在 Ubuntu 上调试 PyTorch 代码,常见方式可以分为日志/打印调试、Python 调试器、PyTorch 专用工具、性能与分布式调试几类。下面按实用程度给你一个清晰清单。
print / loggingimport logging
logging.basicConfig(level=logging.INFO)
logging.info(f"x shape: {x.shape}")
print(x.shape, x.dtype, x.device)
print(torch.isnan(x).any())
print(x.min(), x.max())
pdb(命令行)import pdb
pdb.set_trace()
运行后可用:
n 下一步s 进入函数c 继续l 看代码p x 打印变量ipdb(更好用)pip install ipdb
import ipdb
ipdb.set_trace()
.vscode/launch.json{
"version": "0.2.0",
"configurations": [
{
"name": "Python: PyTorch",
"type": "python",
"request": "launch",
"program": "train.py",
"console": "integratedTerminal"
}
]
}
torch.autograd.set_detect_anomaly(True)
配合:
with torch.autograd.detect_anomaly():
loss.backward()
def hook(module, input, output):
print(module, output.shape)
model.layer1.register_forward_hook(hook)
torchinfo 看模型结构pip install torchinfo
from torchinfo import summary
summary(model, input_size=(1,3,224,224))
import time
start = time.time()
output = model(x)
print(time.time() - start)
torch.utils.bottleneckpython -m torch.utils.bottleneck train.py
py-spy(不修改代码)pip install py-spy
sudo py-spy top --pid <pid>
nvidia-smi
CUDA_VISIBLE_DEVICES=0 python train.py
import os
print("RANK:", os.environ["RANK"])
nvcc --version
python -c "import torch; print(torch.version.cuda)"
which python
which torch
sudo chmod -R 777 /tmp
✅ VS Code + ipdb + torch.autograd.set_detect_anomaly
如果你愿意,可以告诉我:
我可以直接给你针对性的调试步骤。