mirror of
https://github.com/hiyouga/LLaMA-Factory.git
synced 2026-09-27 01:45:42 +08:00
[v1] update docs (#10684)
This commit is contained in:
103
docs/zh/feature-guide/distributed_training.md
Normal file
103
docs/zh/feature-guide/distributed_training.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# 分布式训练
|
||||
|
||||
训练命令检测到多设备后会自动通过 `torchrun` 启动。拓扑字段属于 `TrainingArguments`,后端专属字段放在 `dist_config`。
|
||||
|
||||
本页列出后端和拓扑配置,完整任务配置见 [SFT](sft.md)、[DPO](dpo.md)和 [RM](rm.md)。设备安装与支持范围见 [NPU 说明](../multi-backend/npu/index.md)。
|
||||
|
||||
## 数据并行
|
||||
|
||||
未设置 `dist_config` 时,多个 DP 进程使用 DDP,每个进程持有完整模型;单设备直接训练。
|
||||
|
||||
## FSDP2
|
||||
|
||||
FSDP2 通过分片降低每个设备上的模型状态内存开销,配置入口为 `dist_config.name: fsdp2`。
|
||||
|
||||
```yaml
|
||||
dist_config:
|
||||
name: fsdp2
|
||||
reshard_after_forward: true
|
||||
offload_params: false
|
||||
pin_memory: true
|
||||
dcp_path: null
|
||||
```
|
||||
|
||||
## FSDPTurbo
|
||||
|
||||
FSDPTurbo 在 FSDP2 基础上提供 MoE 专家并行和专家参数分片。先安装 FSDPTurbo 依赖:
|
||||
|
||||
```bash
|
||||
python -m pip install -r requirements/fsdpturbo.txt
|
||||
```
|
||||
|
||||
FSDPTurbo 的配置入口为 `dist_config.name: fsdpturbo`:
|
||||
|
||||
```yaml
|
||||
dist_config:
|
||||
name: fsdpturbo
|
||||
ep_size: 16
|
||||
ep_dispatcher: eager
|
||||
```
|
||||
|
||||
`ep_size` 必须能够整除 data parallel size。完整示例见 `examples/v1/train_full/train_full_qwen3_moe_fsdpturbo_ep_fsdp.yaml`。
|
||||
|
||||
## DeepSpeed
|
||||
|
||||
DeepSpeed 后端从 `config_file` 读取 ZeRO 等配置,该字段必填。
|
||||
|
||||
```yaml
|
||||
dist_config:
|
||||
name: deepspeed
|
||||
config_file: examples/deepspeed/ds_z3_config.json
|
||||
```
|
||||
|
||||
## Ulysses Context Parallel
|
||||
|
||||
Ulysses CP 跨设备切分序列计算,由顶层 `cp_mode` 和 `cp_size` 启用:
|
||||
|
||||
```yaml
|
||||
flash_attn: flash_attention_2
|
||||
cp_mode: ulysses
|
||||
cp_size: 2
|
||||
|
||||
dist_config:
|
||||
name: fsdp2
|
||||
```
|
||||
|
||||
设置 `cp_size > 1` 后,训练使用 Ulysses 通信和 Sequence Parallel loss 完成跨 CP 进程的损失聚合。Ulysses 需要 `flash_attention_2` 和 FSDP2,不要求特定的 `batching_strategy`,支持 `normal` 和符合[批处理约束](batching.md)的 padding-free 策略。
|
||||
|
||||
`cp_size` 需要能够整除 world size。模型的 attention head 数必须能被 `cp_size` 整除,即 `num_attention_heads % cp_size == 0`;例如 32 个 attention head 可以使用 `cp_size: 2`。KV head 数与 `cp_size` 则要求其中一个能被另一个整除,即 `num_key_value_heads % cp_size == 0` 或 `cp_size % num_key_value_heads == 0`。当前只有 SFT 支持 `cp_size > 1`;DPO 和 RM 要求 `cp_size: 1`。
|
||||
|
||||
当前训练器不支持 `model_type: qwen3_5` 的 CP 路径。
|
||||
|
||||
## 配置并行拓扑
|
||||
|
||||
```yaml
|
||||
dp_size: 4
|
||||
cp_size: 2
|
||||
cp_mode: ulysses
|
||||
mp_replicate_size: 2
|
||||
mp_shard_size: 4
|
||||
dist_timeout: 18000
|
||||
```
|
||||
|
||||
上例使用 8 个进程,并同时构造两套 DeviceMesh:
|
||||
|
||||
- Data Mesh 的形状为 `dp_size × cp_size = 4 × 2`,分别用于 Data Parallel 和 Context Parallel。
|
||||
- Model Mesh 的形状为 `mp_replicate_size × mp_shard_size = 2 × 4`。FSDP 在 4 个进程间分片参数,并在 2 个分片组间复制参数。
|
||||
|
||||
`mp_replicate_size` 和 `mp_shard_size` 描述 FSDP 的二维参数 Mesh,不是额外的 Tensor Parallel 配置。未显式指定时,`dp_size` 默认为 `world_size / cp_size`,`mp_shard_size` 默认为 `world_size / mp_replicate_size`。后端完整配置见[训练参数](../configuration/training.md#dist_config)。
|
||||
|
||||
## 配置多机启动
|
||||
|
||||
CLI 读取 `NNODES`、`NODE_RANK`、`NPROC_PER_NODE`、`MASTER_ADDR` 和 `MASTER_PORT`。例如使用 4 台机器、每台机器 8 个设备时,在每台机器上执行:
|
||||
|
||||
```bash
|
||||
NNODES=4 \
|
||||
NODE_RANK=<0到3,各节点不同> \
|
||||
NPROC_PER_NODE=8 \
|
||||
MASTER_ADDR=<rank 0 节点的 IP> \
|
||||
MASTER_PORT=29500 \
|
||||
llamafactory-cli sft config.yaml
|
||||
```
|
||||
|
||||
4 个节点需要使用相同的 `NNODES`、`NPROC_PER_NODE`、`MASTER_ADDR` 和 `MASTER_PORT`,并分别设置 `NODE_RANK=0`、`1`、`2`、`3`。
|
||||
Reference in New Issue
Block a user