mcpField
D
distributed-llm-pretraining-torchtitan

distributed-llm-pretraining-torchtitan

github.com/kiterlin数据与数据库276 次安装38 周前更新
代码仓库

关于 distributed-llm-pretraining-torchtitan

distributed-llm-pretraining-torchtitan 是一项介绍如何使用 PyTorch TorchTitan 在 GPU 集群上预训练大模型的技能,涵盖并行配置、Float8 训练和检查点操作,适用于单机与多机训练。

主要功能

  1. 01基于 PyTorch 的大模型预训练
  2. 02组合使用 FSDP2、TP、PP 和 CP
  3. 03配置 Float8 训练
  4. 04单机与多机训练流程
  5. 05检查点与恢复指导

适用场景

  1. 01预训练 8B 至 405B 的 Llama 模型
  2. 02通过 SLURM 扩展多机训练
  3. 03在 H100 GPU 上启用 Float8
  4. 04从检查点恢复训练

安装

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

$npx skills add https://github.com/kiterlin/intelligent-detection-system --skill distributed-llm-pretraining-torchtitan

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

包含的文件

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

.openskills.json
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