在 CentOS 上进行 PyTorch 多卡训练,常见做法有 DataParallel(不推荐) 和 DistributedDataParallel(推荐)。下面按实用角度给你一套完整说明。
nvidia-smi
确认多张卡(如 0,1,2,3)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
验证:
import torch
print(torch.cuda.device_count())
CentOS 下最推荐用 torchrun
torchrun \
--nproc_per_node=4 \
train.py
4 = 你机器上的 GPU 数量import torch
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP
from torch.utils.data import DataLoader
from torch.utils.data.distributed import DistributedSampler
def main():
dist.init_process_group(backend="nccl")
local_rank = int(os.environ["LOCAL_RANK"])
torch.cuda.set_device(local_rank)
model = MyModel().cuda(local_rank)
model = DDP(model, device_ids=[local_rank])
dataset = MyDataset()
sampler = DistributedSampler(dataset)
loader = DataLoader(dataset, batch_size=32, sampler=sampler)
for x, y in loader:
x, y = x.cuda(local_rank), y.cuda(local_rank)
loss = model(x, y)
loss.backward()
optimizer.step()
dist.destroy_process_group()
if __name__ == "__main__":
main()
ncclbatch_size 是每张卡的DistributedSampler 必须加model = torch.nn.DataParallel(model.cuda())
缺点:
只适合快速测试
如果是多台 CentOS 服务器:
torchrun \
--nnodes=2 \
--node_rank=0 \
--master_addr=192.168.1.1 \
--master_port=29500 \
--nproc_per_node=4 \
train.py
export NCCL_DEBUG=INFO
ulimit -n 65535
barrier()| 方式 | 推荐度 | 场景 |
|---|---|---|
| DDP + torchrun | ⭐⭐⭐⭐⭐ | 正式训练 |
| DataParallel | ⭐ | 测试 |
| 单机多卡 | ✅ | 最常见 |
如果你愿意,可以告诉我:
我可以给你完全贴合你环境的多卡训练脚本。