mcpField
D
distributed-llm-pretraining-torchtitan

distributed-llm-pretraining-torchtitan

github.com/orchestra-research开发14.1k962 次安装19 周前更新
代码仓库

关于 distributed-llm-pretraining-torchtitan

TorchTitan 是 PyTorch 的大规模 LLM 预训练平台,面向训练模型的研究与工程团队。它支持组合式 4D 并行、Float8 训练和分布式检查点。

主要功能

  1. 01组合式 4D 并行
  2. 02支持多种模型规模与架构
  3. 03H100 上的 Float8 训练
  4. 04分布式训练与检查点
  5. 05TensorBoard 日志监控

适用场景

  1. 01单节点预训练 Llama 3.1 8B
  2. 02通过 SLURM 进行多节点训练
  3. 03为 H100 训练启用 Float8
  4. 04为大型模型配置 4D 并行

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/orchestra-research/ai-research-skills --skill distributed-llm-pretraining-torchtitan

安装后在 Claude Code 中输入/distributed-llm-pretraining-torchtitan确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
checkpoint.md
custom-models.md
float8.md
fsdp.md

详细介绍

TorchTitan - PyTorch 原生分布式 LLM 预训练

快速开始

TorchTitan 是 PyTorch 官方的大规模 LLM 预训练平台,支持可组合的 4D 并行(FSDP2、TP、PP、CP),在 H100 GPU 上的速度比基线提升 65% 以上。

安装:

# From PyPI (stable)
pip install torchtitan

# From source (latest features, requires PyTorch nightly)
git clone https://github.com/pytorch/torchtitan
cd torchtitan
pip install -r requirements.txt

下载分词器:

# Get HF token from https://huggingface.co/settings/tokens
python scripts/download_hf_assets.py --repo_id meta-llama/Llama-3.1-8B --assets tokenizer --hf_token=...

在 8 块 GPU 上开始训练:

CONFIG_FILE="./torchtitan/models/llama3/train_configs/llama3_8b.toml" ./run_train.sh

常见工作流

工作流 1:在单节点上预训练 Llama 3.1 8B

复制此清单:

Single Node Pretraining:
- [ ] Step 1: Download tokenizer
- [ ] Step 2: Configure training
- [ ] Step 3: Launch training
- [ ] Step 4: Monitor and checkpoint

步骤 1:下载分词器

python scripts/download_hf_assets.py \
  --repo_id meta-llama/Llama-3.1-8B \
  --assets tokenizer \
  --hf_token=YOUR_HF_TOKEN

步骤 2:配置训练

编辑或创建 TOML 配置文件:

# llama3_8b_custom.toml
[job]
dump_folder = "./outputs"
description = "Llama 3.1 8B training"

[model]
name = "llama3"
flavor = "8B"
hf_assets_path = "./assets/hf/Llama-3.1-8B"

[optimizer]
name = "AdamW"
lr = 3e-4

[lr_scheduler]
warmup_steps = 200

[training]
local_batch_size = 2
seq_len = 8192
max_norm = 1.0
steps = 1000
dataset = "c4"

[parallelism]
data_parallel_shard_degree = -1  # Use all GPUs for FSDP

[activation_checkpoint]
mode = "selective"
selective_ac_option = "op"

[checkpoint]
enable = true
folder = "checkpoint"
interval = 500

步骤 3:启动训练

# 8 GPUs on single node
CONFIG_FILE="./llama3_8b_custom.toml" ./run_train.sh

# Or explicitly with torchrun
torchrun --nproc_per_node=8 \
  -m torchtitan.train \
  --job.config_file ./llama3_8b_custom.toml

步骤 4:监控并保存检查点

TensorBoard 日志保存在 ./outputs/tb/:

tensorboard --logdir ./outputs/tb
工作流 2:使用 SLURM 进行多节点训练
Multi-Node Training:
- [ ] Step 1: Configure parallelism for scale
- [ ] Step 2: Set up SLURM script
- [ ] Step 3: Submit job
- [ ] Step 4: Resume from checkpoint

步骤 1:配置并行策略以扩展规模

在 256 块 GPU(32 个节点)上运行 70B 模型:

[parallelism]
data_parallel_shard_degree = 32  # FSDP across 32 ranks
tensor_parallel_degree = 8        # TP within node
pipeline_parallel_degree = 1      # No PP for 70B
context_parallel_degree = 1       # Increase for long sequences

步骤 2:设置 SLURM 脚本

#!/bin/bash
#SBATCH --job-name=llama70b
#SBATCH --nodes=32
#SBATCH --ntasks-per-node=8
#SBATCH --gpus-per-node=8

srun torchrun \
  --nnodes=32 \
  --nproc_per_node=8 \
  --rdzv_backend=c10d \
  --rdzv_endpoint=$MASTER_ADDR:$MASTER_PORT \
  -m torchtitan.train \
  --job.config_file ./llama3_70b.toml

步骤 3:提交作业

sbatch multinode_trainer.slurm

步骤 4:从检查点恢复

如果配置的文件夹中存在检查点,训练会自动恢复。

工作流 3:为 H100 启用 Float8 训练

Float8 可在 H100 GPU 上带来 30%–50% 的速度提升。

Float8 Training:
- [ ] Step 1: Install torchao
- [ ] Step 2: Configure Float8
- [ ] Step 3: Launch with compile

步骤 1:安装 torchao

USE_CPP=0 pip install git+https://github.com/pytorch/ao.git

步骤 2:配置 Float8

添加到 TOML 配置中:

[model]
converters = ["quantize.linear.float8"]

[quantize.linear.float8]
enable_fsdp_float8_all_gather = true
precompute_float8_dynamic_scale_for_fsdp = true
filter_fqns = ["output"]  # Exclude output layer

[compile]
enable = true
components = ["model", "loss"]

步骤 3:启用编译并启动

CONFIG_FILE="./llama3_8b.toml" ./run_train.sh \
  --model.converters="quantize.linear.float8" \
  --quantize.linear.float8.enable_fsdp_float8_all_gather \
  --compile.enable
工作流 4:为 405B 模型启用 4D 并行
4D Parallelism (FSDP + TP + PP + CP):
- [ ] Step 1: Create seed checkpoint
- [ ] Step 2: Configure 4D parallelism
- [ ] Step 3: Launch on 512 GPUs

步骤 1:创建种子检查点

确保 PP 阶段之间的初始化一致,必须执行此步骤:

NGPU=1 CONFIG_FILE=./llama3_405b.toml ./run_train.sh \
  --checkpoint.enable \
  --checkpoint.create_seed_checkpoint \
  --parallelism.data_parallel_shard_degree 1 \
  --parallelism.tensor_parallel_degree 1 \
  --parallelism.pipeline_parallel_degree 1

步骤 2:配置 4D 并行

[parallelism]
data_parallel_shard_degree = 8   # FSDP
tensor_parallel_degree = 8       # TP within node
pipeline_parallel_degree = 8     # PP across nodes
context_parallel_degree = 1      # CP for long sequences

[training]
local_batch_size = 32
seq_len = 8192

步骤 3:在 512 块 GPU 上启动

# 64 nodes x 8 GPUs = 512 GPUs
srun torchrun --nnodes=64 --nproc_per_node=8 \
  -m torchtitan.train \
  --job.config_file ./llama3_405b.toml

何时使用及替代方案

适用场景:

  • 从头开始预训练 LLM(8B 至 405B 以上)
  • 需要不依赖第三方依赖项的 PyTorch 原生解决方案
  • 需要可组合的 4D 并行(FSDP2、TP、PP、CP)
  • 使用支持 Float8 的 H100 进行训练
  • 需要与 torchtune/HuggingFace 互通的检查点

替代方案:

  • Megatron-LM:适用于仅使用 NVIDIA 的部署,性能最高
  • DeepSpeed:提供更全面的 ZeRO 优化生态系统,并支持推理
  • Axolotl/TRL:适用于微调,而非预训练
  • LitGPT:适用于教学和小规模训练

常见问题

问题:大型模型导致内存不足

启用激活检查点并减小批次大小:

[activation_checkpoint]
mode = "full"  # Instead of "selective"

[training]
local_batch_size = 1

也可以使用梯度累积:

[training]
local_batch_size = 1
global_batch_size = 32  # Accumulates gradients

问题:TP 与异步集合通信一起使用时导致内存占用过高

设置环境变量:

export TORCH_NCCL_AVOID_RECORD_STREAMS=1

问题:Float8 训练没有提速

Float8 只对大型 GEMM 运算有益。过滤掉较小的层:

[quantize.linear.float8]
filter_fqns = ["attention.wk", "attention.wv", "output", "auto_filter_small_kn"]

问题:更改并行策略后,检查点加载失败

使用 DCP 的重分片功能:

# Convert sharded checkpoint to single file
python -m torch.distributed.checkpoint.format_utils \
  dcp_to_torch checkpoint/step-1000 checkpoint.pt

问题:流水线并行初始化

请先创建种子检查点(参见工作流 4,步骤 1)。

支持的模型

模型规模状态
Llama 3.18B、70B、405B生产就绪
Llama 4多种实验性
DeepSeek V316B、236B、671B(MoE)实验性
GPT-OSS20B、120B(MoE)实验性
Qwen 3多种实验性
Flux扩散模型实验性

性能基准(H100)

模型GPU 数量并行策略TPS/GPU技术
Llama 8B8FSDP5,762基线
Llama 8B8FSDP+compile+FP88,532+48%
Llama 70B256FSDP+TP+AsyncTP8762D 并行
Llama 405B512FSDP+TP+PP1283D 并行

高级主题

FSDP2 配置:详细了解 FSDP2 与 FSDP1 的比较及 ZeRO 等效方案,请参阅 references/fsdp.md。

Float8 训练:有关 tensorwise 与 rowwise 缩放方案,请参阅 references/float8.md。

检查点:有关 HuggingFace 转换和异步检查点,请参阅 references/checkpoint.md。

添加自定义模型:有关 TrainSpec 协议,请参阅 references/custom-models.md。

Resources

评论

支持 Markdown