跳转到主要内容

分布式训练

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

要求

组件必需安装
Accelerate是(已包含)随 AITraining 包含
DeepSpeed可选pip install deepspeed
多个 GPUNVIDIA CUDA GPU

分布式后端

后端描述
DDPddpNonePyTorch 分布式数据并行(默认)
DeepSpeeddeepspeed带自动分片的 DeepSpeed Zero-3

快速开始

DDP(默认)

使用多个 GPU 时,自动使用 DDP:
aitraining llm --train \
  --model meta-llama/Llama-3.2-1B \
  --data-path ./data \
  --project-name my-model \
  --trainer sft \
  --peft

DeepSpeed

对于大型模型,使用 DeepSpeed Zero-3:
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

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 配置

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 训练:
# 在每个节点上
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 的检查点

使用 DeepSpeed 时,PEFT 适配器保存的处理方式不同。不使用 SavePeftModelCallback;而是使用 accelerator.get_state_dict(trainer.deepspeed) 保存并解包模型。

GPU 选择

控制使用哪些 GPU:
# 使用特定 GPU
CUDA_VISIBLE_DEVICES=0,1 aitraining llm --train ...

# 使用所有可用 GPU(默认)
aitraining llm --train ...

故障排除

检查 Accelerate 环境

accelerate env

常见问题

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

下一步