Ubuntu下PyTorch变慢的排查与优化清单
一 快速自检与环境验证
二 常见瓶颈与对应优化
三 定位瓶颈的工具与方法
四 一键可用的优化代码片段
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
for data, target in loader:
optimizer.zero_grad()
with autocast():
output = model(data)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
loader = DataLoader(dataset,
batch_size=...,
shuffle=True,
num_workers=4, # 依据CPU核心数调整
pin_memory=True, # 加速CPU->GPU拷贝
persistent_workers=True) # 减少进程反复创建开销
import torch
torch.backends.cudnn.benchmark = True # 固定输入尺寸时开启
# torch.backends.cudnn.deterministic = True # 需要可复现时再开启
torch.set_num_threads(8) # 依据CPU物理核心数设置
from torch.profiler import profile, record_function, ProfilerActivity
with profile(activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA],
schedule=torch.profiler.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, (x, y) in enumerate(loader):
with record_function("forward"):
out = model(x.cuda())
loss = criterion(out, y.cuda())
with record_function("backward"):
loss.backward()
optimizer.step()
prof.step()
watch -n 1 nvidia-smi
htop
iostat -x 1
以上模板覆盖了AMP、DataLoader提速、线程/库设置与Profiler记录,可直接嵌入现有训练脚本进行验证与对比。
五 环境配置与版本兼容要点