在 CentOS 上调优 PyTorch 性能,可以从 系统、CPU、GPU、PyTorch 自身、数据加载、分布式 几个层面来做。下面按优先级和实际可操作性给你一份“实战清单”。
nvidia-smi
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
cpupower frequency-set -g performance
PyTorch 默认会用很多线程,反而更慢:
import torch
torch.set_num_threads(8) # 视 CPU 核心数
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
torch.backends.cudnn.benchmark = True
torch.backends.cudnn.enabled = True
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
with autocast():
output = model(input)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
torch.compile(PyTorch 2.x)model = torch.compile(model)
DataLoader(
dataset,
batch_size=64,
num_workers=8,
pin_memory=True,
prefetch_factor=4,
persistent_workers=True
)
⚠ 注意:
num_workers ≈ CPU 核心数 / GPU 数__getitem__ 里做重 IOtorch.cuda.amp(见上)
loss = loss / accum_steps
loss.backward()
if step % accum_steps == 0:
optimizer.step()
optimizer.zero_grad()
torch.cuda.empty_cache()
torchrun --nproc_per_node=4 train.py
model = torch.nn.parallel.DistributedDataParallel(
model,
device_ids=[local_rank]
)
export NCCL_DEBUG=INFO
export NCCL_P2P_DISABLE=0
nvidia-smi dmon
watch -n 1 nvidia-smi
htop
iostat -x 1
❌ 默认 openblas 太慢
✅ 安装 mkl 或 oneDNN
❌ Python 版本太老
✅ 用 conda 或 pyenv 装 Python 3.9+
| 项目 | 推荐 |
|---|---|
| OS | Rocky 8 / CentOS 7.9 |
| Python | 3.9 / 3.10 |
| PyTorch | 2.1+ |
| CUDA | 11.8 / 12.1 |
| 训练 | DDP + AMP |
| DataLoader | num_workers ≥ 8 |
如果你愿意,可以告诉我:
我可以直接给你 针对性调优方案。