在 Ubuntu 上跑 PyTorch 很卡,原因可能很多,下面按最常见 → 较少见的顺序帮你排查和优化。你可以一条条对照试。
nvidia-smi
如果看不到 GPU,说明 PyTorch 在用 CPU。
检查 PyTorch 是否支持 CUDA:
import torch
print(torch.cuda.is_available())
False → 没用上 GPU(大问题)True → 继续看下面✅ 解决:
device = torch.device("cuda")
model.to(device)
x = x.to(device)
即使 cuda.is_available() == True,如果:
model = Model() # 在 CPU
x = x.cuda() # 只在输入上
也会非常慢。
✅ 正确做法:
model = Model().cuda()
inputs = inputs.cuda()
如果你看到 GPU 利用率很低(nvidia-smi 里 Volatile GPU-Util 很低):
✅ 优化 DataLoader:
DataLoader(
dataset,
batch_size=32,
num_workers=4, # 很重要
pin_memory=True
)
⚠️ 注意:
num_workers 一般 = CPU 核心数 / 2num_workers=0(极慢)nvidia-smi
如果显存快满(90%+),PyTorch 会变慢甚至卡死。
✅ 解决:
batch_sizetorch.cuda.empty_cache()from torch.cuda.amp import autocast, GradScaler
查看:
nvidia-smi
nvcc --version
✅ 建议:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
cat /proc/cpuinfo | grep MHz
如果频率很低:
✅ 开启高性能:
sudo apt install cpufrequtils
sudo cpufreq-set -g performance
with torch.no_grad():
output = model(x)
torch.compile(PyTorch 2.x)model = torch.compile(model)
通常能快 10–30%
你只要确认这几件事:
torch.cuda.is_available() == True.cuda()num_workers > 0nvidia-smi 里 GPU 有利用率如果你愿意,可以把下面信息贴出来,我可以直接帮你定位:
nvidia-smi 输出torch.cuda.is_available() 结果我可以直接告诉你“你这一步最该改什么”。