在 CentOS 上 PyTorch 训练慢,通常不是单一原因,下面按最常见 → 最容易被忽略的顺序给你排查清单和优化建议。
nvidia-smi
watch -n 1 nvidia-smi
✅ 正常情况:
❌ 如果:
DataLoader(..., num_workers=?, pin_memory=True)
✅ 推荐设置:
num_workers = 4~8 # 不要超过 CPU 核心数
pin_memory=True
❌ 常见问题:
num_workers=0(默认,极慢)✅ 优化:
torchvision.io.decode_image(比 PIL 快)确认:
print(torch.cuda.is_available())
print(torch.backends.cudnn.enabled)
✅ 正确用法:
device = "cuda"
model.to(device)
x = x.to(device)
❌ 常见错误:
model.cuda() 但输入在 CPU.cpu() 操作穿插在训练中torch.backends.cudnn.benchmark = True
torch.backends.cudnn.deterministic = False
⚠️ 注意:
benchmark=True 才有收益nvidia-smi
nvcc --version
✅ 要求:
推荐用官方 wheel:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
如果是 powersave:
sudo cpupower frequency-set -g performance
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
with autocast():
out = model(x)
loss = loss_fn(out, y)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
✅ 收益:
| GPU | 建议 batch size |
|---|---|
| 16G | 32~64 |
| 24G | 64~128 |
太小 → GPU 喂不饱
torch.compile()(PyTorch 2.0+)DistributedDataParallelchannels_last 格式| 检查项 | 命令 |
|---|---|
| GPU 利用率 | nvidia-smi |
| num_workers | DataLoader |
| 混合精度 | amp |
| cudnn | benchmark |
| CPU 模式 | cpupower |
你可以贴:
nvidia-smi 截图我可以直接告诉你卡在哪、怎么改最快。