发起 Pytorch 分布式训练
更新时间:2026-10-21
概述
DistributedDataParallel(DDP) 是 PyTorch 官方推荐的 多卡 / 多机分布式训练框架 ,基于 多进程 + Ring AllReduce 实现,用于加速大模型、大数据集的训练。
百舸平台提供了 PyTorch 训练框架的完整支持,覆盖单机训练和分布式训练场景。本文介绍如何在百舸平台提交 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)提交多机多卡训练任务。
评价此篇文章
