> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monostate.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 分布式训练

> 使用 DDP 和 DeepSpeed 进行多 GPU 和多节点训练

# 分布式训练

AITraining 通过 Accelerate 支持多 GPU 训练，并为大型模型提供可选的 DeepSpeed Zero-3 优化。

## 要求

| 组件         | 必需     | 安装                      |
| ---------- | ------ | ----------------------- |
| Accelerate | 是（已包含） | 随 AITraining 包含         |
| DeepSpeed  | 可选     | `pip install deepspeed` |
| 多个 GPU     | 是      | NVIDIA CUDA GPU         |

## 分布式后端

| 后端        | 值              | 描述                      |
| --------- | -------------- | ----------------------- |
| DDP       | `ddp` 或 `None` | PyTorch 分布式数据并行（默认）     |
| DeepSpeed | `deepspeed`    | 带自动分片的 DeepSpeed Zero-3 |

## 快速开始

### DDP（默认）

使用多个 GPU 时，自动使用 DDP：

```bash theme={null}
aitraining llm --train \
  --model meta-llama/Llama-3.2-1B \
  --data-path ./data \
  --project-name my-model \
  --trainer sft \
  --peft
```

### DeepSpeed

对于大型模型，使用 DeepSpeed Zero-3：

```bash theme={null}
aitraining llm --train \
  --model meta-llama/Llama-3.2-3B \
  --data-path ./data \
  --project-name my-model \
  --trainer sft \
  --distributed-backend deepspeed \
  --peft
```

## Python API

```python theme={null}
from autotrain.trainers.clm.params import LLMTrainingParams
from autotrain.project import AutoTrainProject

params = LLMTrainingParams(
    model="meta-llama/Llama-3.2-3B",
    data_path="./data",
    project_name="distributed-model",

    trainer="sft",

    # Distribution
    distributed_backend="deepspeed",  # or None for DDP

    # Training
    epochs=3,
    batch_size=2,
    gradient_accumulation=4,
    mixed_precision="bf16",

    peft=True,
    lora_r=16,
)

project = AutoTrainProject(params=params, backend="local", process=True)
project.create()
```

## YAML 配置

```yaml theme={null}
task: llm-sft
backend: local
base_model: meta-llama/Llama-3.2-3B
project_name: distributed-model

data:
  path: ./data
  train_split: train
  valid_split: null
  chat_template: tokenizer
  column_mapping:
    text_column: text

log: wandb

params:
  distributed_backend: deepspeed  # or null for DDP
  epochs: 3
  batch_size: 2
  gradient_accumulation: 4
  mixed_precision: bf16
  peft: true
  lora_r: 16
```

## 工作原理

### Accelerate 启动

训练通过 Accelerate 启动：

1. AITraining 检测可用 GPU
2. 通过 `accelerate launch` 启动训练
3. 对于 DeepSpeed，添加 `--use_deepspeed` 和 Zero-3 标志
4. 记录 `accelerate env` 用于调试

### DDP 设置

使用 DDP 时：

* 为性能设置 `ddp_find_unused_parameters=False`
* 每个 GPU 处理批次的一部分
* 梯度在 GPU 之间同步

### DeepSpeed Zero-3

使用 DeepSpeed 时：

* 模型参数在 GPU 之间分片
* 多节点使用 `--deepspeed_multinode_launcher standard`
* 自动应用 Zero-3 配置
* 模型保存使用 `accelerator.get_state_dict()` 并解包

## 多节点训练

对于多节点 DeepSpeed 训练：

```bash theme={null}
# 在每个节点上
aitraining llm --train \
  --model meta-llama/Llama-3.2-3B \
  --data-path ./data \
  --project-name my-model \
  --distributed-backend deepspeed \
  --peft
```

`--deepspeed_multinode_launcher standard` 标志会自动传递。

## 任务特定行为

### LLM 训练

* 默认：检测到多个 GPU 时使用 DDP
* DeepSpeed：显式设置 `--distributed-backend deepspeed`

### Seq2Seq 和 VLM

* 多 GPU 情况自动选择 DeepSpeed
* 对于 PEFT + 量化 + bf16 组合使用多 GPU DDP

## 使用 DeepSpeed 的检查点

<Warning>
  使用 DeepSpeed 时，PEFT 适配器保存的处理方式不同。不使用 `SavePeftModelCallback`；而是使用 `accelerator.get_state_dict(trainer.deepspeed)` 保存并解包模型。
</Warning>

## GPU 选择

控制使用哪些 GPU：

```bash theme={null}
# 使用特定 GPU
CUDA_VISIBLE_DEVICES=0,1 aitraining llm --train ...

# 使用所有可用 GPU（默认）
aitraining llm --train ...
```

## 故障排除

### 检查 Accelerate 环境

```bash theme={null}
accelerate env
```

### 常见问题

| 问题            | 解决方案                    |
| ------------- | ----------------------- |
| 找不到 DeepSpeed | `pip install deepspeed` |
| NCCL 错误       | 检查 GPU 连接和 CUDA 版本      |
| OOM 错误        | 减少批量大小或使用 DeepSpeed     |
| 训练缓慢          | 确保 GPU 在同一 PCIe 总线上     |

## 下一步

<CardGroup cols={2}>
  <Card title="LoRA/PEFT" href="/advanced/lora-peft">
    高效微调
  </Card>

  <Card title="Quantization" href="/advanced/quantization">
    减少内存使用
  </Card>
</CardGroup>
