Find slow PyTorch code before it burns GPU hours.
PerfForge is a small rule-based CLI for detecting common PyTorch performance anti-patterns before expensive training runs, CI jobs, or experiments start.
Package note: the PyPI name
hotpathis used by an unrelated project. This project publishes ashotpath-ai, while the command remainshotpath.
GPU profilers are powerful, but they often show you traces after money has already been spent. HotPath catches common PyTorch performance mistakes before long training runs, CI jobs, or expensive experiments start.
Use it when you want to spot:
- CPU/GPU synchronization traps like
.item()in hot loops - slow input pipelines from underconfigured
DataLoaders - blocking device transfers
- missing mixed precision or
torch.compile - checkpointing and conversion work inside training loops
python -m hotpath analyze examples/slow_training.pyInstall from PyPI:
pip install hotpath-ai
hotpath analyze examples/slow_training.pyOr after installing locally from this repo:
pip install -e .
hotpath analyze examples/slow_training.pyScan a whole project:
hotpath analyze path/to/projectEmit JSON for CI, scripts, or a future dashboard:
hotpath analyze path/to/project --format jsonFail CI when warnings are present:
hotpath analyze path/to/project --fail-on warningDataLoaderwithnum_workers=0or nonum_workersDataLoadermissingpin_memory=True.item()inside loops, which can force GPU synchronization.cpu(),.cuda(), or.to(...)calls inside loops- CPU tensor creation inside loops without a
device=... - manual attention patterns that may be replaced with
torch.nn.functional.scaled_dot_product_attention - training scripts that never call
torch.compile - training scripts that appear to use full precision without autocast
- Python loops over tensors or batches that may block vectorization
optimizer.zero_grad()missingset_to_none=Truetorch.cuda.empty_cache()inside hot loops- evaluation code that calls
eval()withoutno_grad()orinference_mode() torch.tensor(existing_value)copiesDataLoaderworkers missingpersistent_workers=True- loop transfers missing
non_blocking=True torch.save(...)inside hot loops.numpy()conversion inside hot loops
[WARNING] KP003 line 31: .item() inside loop can synchronize the GPU
Accumulate tensors on-device and call .item() only for occasional logging.
[INFO] KP010 line 29: zero_grad missing set_to_none=True
Try optimizer.zero_grad(set_to_none=True).
Recommended repository topics:
pytorch, cuda, gpu, gpu-optimization, performance, profiling,
static-analysis, linting, machine-learning, deep-learning, mlops,
ai-tools, developer-tools, training, torch, triton
HotPath is intentionally not a magic kernel generator yet. The first product is the GPU performance linter experts wish existed: clear detections, plain-English explanations, and copy-pasteable fixes.
The installable package name is hotpath-ai because hotpath is already used
by an unrelated PyPI project. The Python import package and command-line entry
point are still hotpath:
pip install hotpath-ai
hotpath analyze path/to/projectSee PRODUCT_PLAN.md.