在 Linux + PyTorch 环境下,要从训练速度上“榨干”性能,通常可以从 硬件、系统、PyTorch 配置、模型与数据 四个层面入手。下面按优先级和可操作性给你一个实用清单。
nvidia-smi
确认:
PyTorch 使用 GPU:
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
用 CUDA 对应版本 的 PyTorch(不要只用 pip 默认 CPU 版):
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
torch.backends.cudnn.benchmark = True
torch.backends.cudnn.enabled = True
⚠️ 输入尺寸固定时效果最好
DataLoader 多进程加载DataLoader(
dataset,
batch_size=64,
num_workers=8, # 通常 = CPU 核心数
pin_memory=True # GPU 训练必开
)
AMP(自动混合精度)最简单、最有效的提速方式
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()
✅ 显存↓,速度↑(通常 1.5–2×)
DataParallel(简单但不推荐)model = torch.nn.DataParallel(model)
DistributedDataParallel(推荐)torchrun --nproc_per_node=2 train.py
torch.distributed.init_process_group("nccl")
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank])
✅ 比 DP 快、更稳定
torch.optim.AdamWbitsandbytes(8-bit optimizer)torch.optim.LAMB(大 batch).item() / .cpu() 频繁调用printsudo cpufreq-set -g performance
sudo swapoff -a
数据读取速度直接影响训练
| 项目 | 是否开启 |
|---|---|
| GPU 训练 | ✅ |
| cuDNN benchmark | ✅ |
| AMP | ✅ |
| num_workers > 0 | ✅ |
| pin_memory | ✅ |
| DistributedDataParallel | ✅(多卡) |
如果你愿意,可以告诉我:
我可以直接给你 可复制的训练加速模板代码。