在 Linux 下调试 PyTorch 代码,常见做法有 print / logging、pdb、IDE 调试、PyCharm/VS Code 远程调试、torch 自带工具 等。下面按“从简单到专业”给你一个实用清单。
适合定位“哪一步出问题”。
import torch
x = torch.randn(3, 4)
print(x.shape, x.device, x.dtype)
建议用 logging 代替 print:
import logging
logging.basicConfig(level=logging.INFO)
logging.info("x shape: %s", x.shape)
import pdb
pdb.set_trace()
运行:
python train.py
常用命令:
n:下一行s:进入函数c:继续l:查看代码p x:打印变量q:退出python -m pdb train.py
torch.isnan(x).any()
torch.isinf(x).any()
x.requires_grad
torch.autograd.set_detect_anomaly(True)
with torch.autograd.detect_anomaly():
loss.backward()
for name, p in model.named_parameters():
if p.grad is not None:
print(name, p.grad.norm())
launch.json{
"name": "Python: Remote",
"type": "python",
"request": "attach",
"host": "localhost",
"port": 5678
}
服务器端:
pip install debugpy
python -m debugpy --listen 5678 train.py
DDP 很容易“卡死”。
NCCL_DEBUG=INFO python train.py
单卡先调通:
export CUDA_VISIBLE_DEVICES=0
DDP 中打印:
if dist.get_rank() == 0:
print(...)
| 问题 | 方法 |
|---|---|
| 维度不对 | print(x.shape) |
| NaN | detect_anomaly |
| 梯度为 None | requires_grad, backward() |
| 卡死 | NCCL_DEBUG=INFO |
| 多进程 | rank 0 打印 |
如果你愿意,可以告诉我:
我可以直接给你一套最适合你的调试配置。