在 Ubuntu 上加速 PyTorch 训练,通常从硬件利用、软件配置、代码优化三个层面入手。下面按实用程度给你一份清单。
import torch
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))
如果返回 False:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
(cu118 对应 CUDA 11.8,按你驱动版本选)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
inputs, labels = inputs.to(device), labels.to(device)
torch.backends.cudnn.benchmark = True
torch.backends.cudnn.enabled = True
✅ 适合输入尺寸固定的情况
❌ 输入尺寸变化频繁时不要开
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
for x, y in dataloader:
x, y = x.cuda(), y.cuda()
with autocast():
out = model(x)
loss = criterion(out, y)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
✅ 显存 ↓ 30%~50%
✅ 速度 ↑ 1.5~2x(V100 / A100 / 30 系以上)
torch.utils.data.DataLoader(
dataset,
batch_size=64,
num_workers=8, # CPU 核心数左右
pin_memory=True, # GPU 训练必开
prefetch_factor=4
)
✅ pin_memory=True 能明显提速
✅ num_workers 不是越大越好(一般 = CPU 核数)
model = torch.nn.DataParallel(model)
model = torch.nn.parallel.DistributedDataParallel(
model, device_ids=[local_rank]
)
配合:
torchrun --nproc_per_node=2 train.py
nvidia-smi
建议驱动 ≥ 525(新卡用 535+)
sudo cpupower frequency-set -g performance
数据读取是常见瓶颈
torch.compile(PyTorch 2.x)model = torch.compile(model)
.item()、.cpu() 频繁调用in-place 操作(谨慎)cudnn.benchmark如果你愿意,可以告诉我:
我可以直接帮你给一份可复制的训练加速模板。