发起 Pytorch 分布式训练
更新时间:2026-04-30
DistributedDataParallel(DDP) 是 PyTorch 官方推荐的多卡 / 多机分布式训练框架,基于多进程 + Ring AllReduce 实现,用于加速大模型、大数据集的训练。
百舸平台提供了 PyTorch 训练框架的完整支持,覆盖单机训练和分布式训练场景。本文介绍如何在百舸平台提交 PyTorch 训练任务的关键要点。
PyTorch 训练基本原理
PyTorch 分布式进程模型
PyTorch 分布式训练采用 多进程(Multi-Process) 模型,核心基于 torch.distributed 模块实现进程间通信:
- 每个训练进程拥有独立的 Python 解释器和 GPU
- 进程之间通过 NCCL / Gloo 等后端进行集合通信(AllReduce、Broadcast 等)
- 每个进程有唯一的
RANK,同一节点内的进程有LOCAL_RANK
常见逻辑关系如下:
| 概念 | 含义 |
|---|---|
WORLD_SIZE |
全局进程总数 |
RANK |
当前进程在全局中的编号(0 ~ WORLD_SIZE-1) |
LOCAL_RANK |
当前节点内的进程编号(0 ~ 本节点 GPU 数-1) |
MASTER_ADDR |
主节点(RANK=0)的地址 |
MASTER_PORT |
主节点通信端口 |
PyTorch 训练框架工作机制
PyTorch 训练框架任务,百舸平台的工作机制如下:
- 环境变量注入:平台自动向所有训练容器注入
MASTER_ADDR、MASTER_PORT、WORLD_SIZE、RANK、LOCAL_RANK等分布式训练所需的环境变量。详见:PyTorch环境变量,您可以在代码中直接应用上述环境变量 - 进程拉起:平台根据实例数量与单实例 GPU 卡数,自动完成多节点进程调度与拉起
- 通信建联:训练进程启动后,通过
torch.distributed.init_process_group()初始化进程组,利用平台注入的环境变量自动完成节点间通信建联。 - 训练执行:所有进程完成初始化后进入训练循环,通过 NCCL/Gloo 后端完成梯度同步。
典型启动命令示例
torchrun启动
Bash
1torchrun \
2 --nproc_per_node $NPROC_PER_NODE \
3 --nnodes $WORLD_SIZE \
4 --node_rank $RANK \
5 --master_addr $MASTER_ADDR \
6 --master_port $MASTER_PORT \
7 your_training_script.py
accelerate launch启动
Bash
1num_processes=$((WORLD_SIZE * NPROC_PER_NODE))
2echo $num_processes
3accelerate launch --same_network --multi_gpu --gpu_ids all \
4 --num_machines $WORLD_SIZE --num_processes $num_processes \
5 --machine_rank $RANK --main_process_ip $MASTER_ADDR \
6 --main_process_port $MASTER_PORT \
7 your_training_script.py
PyTorch 任务实践:基于 AIAK-Training 训练 Qwen-2.5-VL-72B
可参考 Qwen-2.5-VL-72B 多模态大模型 SFT 训练,在百舸平台使用 PyTorch 框架 + AIAK-Training(Megatron)提交多机多卡训练任务。
评价此篇文章
