在 CentOS 中调试 PyTorch 的实用流程
一 环境准备与最小验证
# 1) 创建并激活环境
conda create -n pytorch python=3.8 -y
conda activate pytorch
# 2) 安装 PyTorch(示例:CPU 版;GPU 请按官网命令选择对应 cudatoolkit)
conda install pytorch torchvision torchaudio cpuonly -c pytorch
# 3) 最小验证
python - <<'PY'
import torch
print("torch:", torch.__version__, "cuda:", torch.cuda.is_available())
PY
上述流程与验证方式适用于 CentOS 上的 PyTorch 开发与调试起步。二 Python 层调试与日志
# pip install ipdb # 可选,增强交互体验
import pdb; pdb.set_trace() # 或:import ipdb; ipdb.set_trace()
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
filename="train.log", filemode="a"
)
logger = logging.getLogger(__name__)
logger.info("Start training...")
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("runs/exp1")
for epoch in range(3):
loss = 0.1 * epoch # 示例
writer.add_scalar("train/loss", loss, epoch)
writer.close()
# 终端启动:tensorboard --logdir=runs
torch.autograd.set_detect_anomaly(True) # 放在训练开始前
# 典型形状不匹配排查
x = torch.randn(4, 3); w = torch.randn(5, 3)
# y = x @ w.t() # 会报错,便于及早发现
以上方法覆盖断点调试、日志、可视化与常见训练错误的快速定位。三 性能分析与瓶颈定位
python -m cProfile -o profile.prof train.py
# 分析
python - <<'PY'
import pstats, snakeviz
p = pstats.Stats("profile.prof")
p.sort_stats("cumtime").print_stats(20)
# 或生成可视化页面:snakeviz profile.prof
PY
from torch.profiler import profile, record_function, schedule
with profile(
activities=[
torch.profiler.ProfilerActivity.CPU,
torch.profiler.ProfilerActivity.CUDA
],
schedule=schedule(wait=1, warmup=1, active=3),
on_trace_ready=lambda prof: prof.export_chrome_trace("trace.json"),
record_shapes=True
) as prof:
for step in range(5):
with record_function("forward"):
loss = model(data)
loss.backward()
optimizer.step()
prof.step()
# 在 Chrome 打开 chrome://tracing 查看 trace.json
以上工具组合可快速发现算子耗时、数据加载阻塞与内存拷贝等性能问题。四 GPU CUDA 与 C++ 层调试
import torch
print("cuda available:", torch.cuda.is_available())
print("device count:", torch.cuda.device_count())
print("current device:", torch.cuda.current_device())
print("device name:", torch.cuda.get_device_name(0))
# 1) 以调试符号编译/安装 PyTorch(示例方式)
# 可参考:debug=1 python setup.py install
# 2) 使用 cuda-gdb 运行脚本
cuda-gdb python
(cuda-gdb) set cuda break_on_launch on
(cuda-gdb) run your_script.py
# 系统级时间线
nsys profile -o report.qdrep python your_script.py
# 内核级分析
ncu --metrics all python your_script.py
上述流程适用于排查 GPU 初始化、内核挂起、非法内存访问与算子性能异常等问题。五 常见问题与快速排查清单