ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

torchtitan 多机 H200 基准测试:Llama 3.1 8B 跨节点 Float8 训练实测解析

2026/9/17 12:35:59 拓冰建站 浏览量
torchtitan 多机 H200 基准测试:Llama 3.1 8B 跨节点 Float8 训练实测解析 torchtitan 多机 H200 基准测试Llama 3.1 8B 跨节点 Float8 训练实测解析【免费下载链接】torchtitanA PyTorch native platform for training generative AI models项目地址: https://gitcode.com/GitHub_Trending/to/torchtitan本文围绕 torchtitan 仓库中收录的第三方基准测试报告 benchmarks/llama3-8b_h200_202506_trainy-whitefiber.md 展开Trainy 团队于 2025 年 6 月在 WhiteFiber 集群上使用 4/8 台 8 卡 H200 主机对 Llama 3.1 8B 进行了跨节点训练基准测试实测单卡吞吐约 10700~10900 tokens/s。读完本文你将掌握该基准的硬件拓扑与逐条命令行参数含义、结果表的解读方法并了解如何结合当前仓库的 run_train.sh、Float8LinearConverter源码和 config_registry.py 复现同等配置的训练实验。基准背景与提交规范该报告是社区依照 benchmarks/README.md 的提交指南贡献的基准数据文件名严格遵循[model/theme]_[hardware]_[date/time]_[entity].md约定即llama3-8b模型h200硬件2025062025 年 6 月trainy-whitefiber测试主体。提交指南要求一份合格的基准必须包含测试主体个人、公司、团队等基准模型或主题如 Llama 3.1、Async TP硬件构成包括 GPU 型号与互连方式实际性能报告与训练配置Python 配置文件 / 命令行参数推荐附上--print_config输出的完整配置torchtitan、torch、torchao等相关依赖的版本与日期其他有助于复现结果的补充说明。硬件拓扑32~64 张 H200 的跨节点训练报告中的硬件环境为每台主机 8 张 NVIDIA H200 GPU节点内通过 NVLink 互连主机之间通过后端 RDMA 网络连接每 GPU 带宽 400Gb/sMellanox CX-7。测试规模为NUM_NODES 4与8两组即 32 卡与 64 卡的多机训练。这一拓扑对性能解读很关键节点内 TP/集合通信走 NVLink跨节点通信如 FSDP 梯度 AllReduce、参数 AllGather则完全依赖 RDMA 网络跨节点扩展时的吞吐变化主要反映 RDMA 通信的开销。原始测试命令行与参数逐项解析基准运行时的原始命令如下NUM_NODES取 4 和 8torchrun \ --nnodes $NUM_NODES \ --nproc_per_node 8 \ --rdzv_id 101 \ --rdzv_backend c10d \ --rdzv_endpoint $MASTER_ADDR:29500 \ torchtitan/train.py \ --job.config-file torchtitan/models/llama3/train_configs/llama3_8b.toml \ --metrics.enable_wandb \ --training.local_batch_size2 \ --training.compile \ --model.convertersquantize.linear.float8 \ --quantize.linear.float8.enable_fsdp_float8_all_gather \ --quantize.linear.float8.precompute_float8_dynamic_scale_for_fsdp \ --quantize.linear.float8.force_recompute_fp8_weight_in_bwd \ --profiler.profile_freq 1000000 \ --training.steps 2000重要提示原文档的 Warning 原样保留该命令反映的是基准测试当时2025 年 6 月的 CLI 形态。torchtitan 的 CLI 此后已改为使用--module与--config参数--job.config-file与train_configs/llama3_8b.toml这类 TOML 路径在当前仓库中已不存在最新用法见 README 与 run_train.sh。参数逐项说明参数作用--nnodes $NUM_NODES/--nproc_per_node 8声明多机规模4 或 8 个节点每节点 8 进程对应 8 卡 H200。--rdzv_backend c10d/--rdzv_endpoint $MASTER_ADDR:29500使用 c10d 重入点协议所有节点向主节点MASTER_ADDR:29500汇聚。--metrics.enable_wandb开启 WandB 指标上报当时的开关形态当前指标由 metrics.py 中的MetricsProcessor配置控制支持 TensorBoard 等。--training.local_batch_size2本地 batch size 为 2。结合 config_registry.py 中llama3_8b配置的num_tokens_per_microbatch_per_dp_rank1 * max_context_length与max_context_length4096Llama 3.1 8B 上下文长度即每个 microbatch 每 DP rank 处理 2×40968192 个 token。--training.compile对整个模型启用torch.compile是吞吐达标的关键前提之一。--model.convertersquantize.linear.float8通过转换器机制把模型中的 Linear 层替换为 Float8 线性层当时的转换器名当前等价物为Float8LinearConverter见下文。--quantize.linear.float8.enable_fsdp_float8_all_gather让 FSDP 的 AllGather 直接在 Float8 精度上进行降低通信量。--quantize.linear.float8.precompute_float8_dynamic_scale_for_fsdp为 FSDP 预计算 Float8 动态 scale与 AllGather 优化配合。--quantize.linear.float8.force_recompute_fp8_weight_in_bwd反向传播时重算 FP8 权重而非保存前向的 FP8 权重用算力换显存。--profiler.profile_freq 1000000把 profiler 频率设得极高以避免触发相当于关闭周期性 profile只保留指标。--training.steps 2000训练 2000 步结果表中的 TPS 与显存即在第 100 步采样。在当前仓库中复现同等训练当前 torchtitan 的训练入口为python -m torchtitan.train --module MODULE --config CONFIG仓库根目录的 run_train.sh 已封装了torchrun与常用环境变量支持通过MODULE、CONFIG、NGPU等环境变量覆盖# 在单机 8 卡上以 Llama 3.1 8B 配方训练 MODULEllama3 CONFIGllama3_8b ./run_train.shrun_train.sh 的关键逻辑默认MODULEllama3、CONFIGllama3_debugmodel、NGPU8正常路径下执行torchrun --nproc_per_node${NGPU} --rdzv_backend c10d --rdzv_endpointlocalhost:0 -m torchtitan.train --module ${MODULE} --config ${CONFIG} $并把调用方追加的参数透传给 tyro 做配置覆盖此外还支持COMM_MODEfake_backend在没有 GPU 通信的情况下做配置干跑验证。要复现原基准的 Float8 语义可以基于llama3_8b配方叠加转换器覆盖tyro 参数按 dataclass 字段路径传入。仓库提供了现成的 Float8 调试配方可参考例如 llama3_debugmodel_float8 将Float8LinearConverter.Config(model_compile_enabled...)挂入model_registry(..., converters[...])8B 规模下还可参考 llama3_8b_mxfp8MXFP8 版本同样先开启CompileConfig(enableTrue, components[model])再挂入转换器。llama3_8b配方的完整默认值见 config_registry.py损失ChunkedLossWrapper(CrossEntropyLoss)词表大小取模型vocab_size优化器AdamWlr3e-4训练量num_tokens_per_microbatch_per_dp_rank 1 * max_context_lengthsteps1000基准用命令行把 batch 提到 2、步数改到 2000;数据C4 数据集 ConcatThenSplitPackingConfig拼接打包检查点每 500 步保存CheckpointManager激活检查点SelectiveAC选择性重计算验证Validator每 500 步跑 1200 步验证资源路径hf_assets_path./assets/hf/Llama-3.1-8Btokenizer 需按 torchtitan/models/llama3/README.md 中的scripts/download_hf_assets.py流程下载。多机场景下把单机./run_train.sh换成与原基准同形的torchrun --nnodes $NUM_NODES --nproc_per_node 8 -m torchtitan.train --module llama3 --config llama3_8b ...即可参数覆盖部分则使用当前 CLI 的--字段路径语法。Llama 3.1 8B 模型结构要点基准对象 Llama 3.1 8B 在 torchtitan 中的实现位于 torchtitan/models/llama3/model.pyLlama3Model.Config定义dim4096、vocab_size128256等核心超参Llama3TransformerBlock.forward为标准的 pre-norm 结构h x attention(attention_norm(x))out h feed_forward(ffn_norm(h))分片配置由update_from_config中调用的set_llama3_sharding_config见 sharding.py统一装配支持 FSDP/HSDP、TP含 sequence parallel、CP、PP、DDP 等多种并行与 torchtitan/models/llama3/README.md 的Supported Parallelisms表一致。从源码结构看该基准未显式指定 TP/CP/PP即使用默认的 FSDP32/64 卡下为 HSDP 形态数据并行路径——这也与每卡显存仅 47 GiB 左右、跨节点 TPS 基本持平的结果相符8B 模型在 Float8 权重与 FSDP 切分下单卡只需承载 1/32~1/64 的参数与优化器状态。Float8 量化训练torchtitan 中的实现机制原命令中最核心的技术项是quantize.linear.float8。当前仓库中对应的实现是 Float8LinearConverter 与 Float8Linear后者继承自 torchao 的Float8Linear。从源码看其关键行为硬件门槛构造时校验has_cuda_capability(8, 9) or has_rocm_capability(9, 4)即 Float8 硬件加速仅在 NVIDIA SM89H100/H200 属于该档或 AMD MI300 及以上可用旧硬件只能设emulateTrue做 eager 模式测试且该模式不兼容torch.compile。H200 正好满足该条件。配方选择通过TorchAOFloat8LinearConfig.from_recipe_name(cfg.recipe_name)加载配方默认recipe_namerowwiserowwise配方下会顺带设置torch._inductor.config.emulate_precision_casts True以规避 Inductor 精度转换问题源码注释中注明。模块过滤nn.Linear中任一维度不能被 16 整除的层会被自动跳过硬件对齐要求filter_fqns可显式排除特定模块auto_filter_small_kn可启用 torchao 的自动小维度过滤对RouterGateLinear直接报错要求用户显式排除。编译联动model_compile_enabled字段记录模型是否被torch.compile与基准中--training.compile的组合相对应——Float8 高性能路径依赖编译后的 kernel 融合。Float8 训练对基准收益的来源可以归纳为三点线性层 GEMM 在 FP8 下执行计算与访存量下降enable_fsdp_float8_all_gather让 FSDP AllGather 传输 FP8 参数通信量减半force_recompute_fp8_weight_in_bwd避免保存反向所需的 FP8 权重副本压低显存——这解释了 8B 模型在多机下每卡显存稳定在约 47 GiB 的观测。TPS 指标口径结果表中TPS的定义可在 torchtitan/observability/metrics.py 中找到tps ntokens_since_last_log / (time_since_last_log / dp_world_size)即每设备 tokens 每秒tokens per second per device是区间平均值而非瞬时值同处还基于num_flops_per_token * tps计算 TFLOPs 与 MFUPeak FLOPs 参考 NVIDIA 官方博客口径。原文档说明 TPS 与 Memory(GiB) 是在第 100 个迭代任意采样的复现时如需对齐应关注日志中的throughput(tps)字段而非固定瞬时点。结果与跨节点扩展性分析NUM_NODESTPS/GPUMemory(GiB)41093847.9681075346.97解读近线性扩展4 节点 → 8 节点单卡 TPS 仅从 10938 降到 10753约 -1.7%说明在 400Gb/s RDMA 网络下32→64 卡的跨节点 FSDP 通信开销被计算充分掩盖扩展效率很高显存持平两组 Memory(GiB) 均在 47 GiB 上下。FSDP 中每卡承载的参数/优化器分片随节点数增加而减少理论上显存应进一步下降实测基本持平从结果本身看说明该配置下显存由激活值与临时 buffer 主导切分带来的收益有限绝对吞吐单卡约 10.7K~10.9K tokens/s32 卡集群整体约 35 万 tokens/s。原文档另附 WandB 报告链接供查看详细曲线外部链接不在本文复现完整配置可在开启--print_config的日志中获得。版本与日期复现前提repocommitdatetorch2.8.0a05228986c39NVIDIA 2025-05 release2025-05-29torchao0afa4c12025-06-13torchtitane7c0cae2025-06-13注意这是 2025 年 6 月的 nightly 版本组合torch 为 2.8.0 预发布版NVIDIA H200 定制构建torchao 与 torchtitan 均为 2025-06-13 的 commit。用当前仓库 HEAD 复现时CLI、配置体系Python dataclass 配方取代 TOML与部分默认值可能已演进但 Float8 路径、并行策略与指标口径的对应关系如上所述仍然成立建议以当前 README 与 torchtitan/models/llama3/README.md 为准核对用法。复现检查清单按 benchmarks/README.md 的六项要求准备报告主体、模型/主题、硬件GPU 型号 NVLink/RDMA 拓扑、完整训练配置推荐--print_config全量输出、依赖版本与日期、复现备注下载 Llama-3.1-8B tokenizer 至./assets/hf/Llama-3.1-8Bpython scripts/download_hf_assets.py --repo_id meta-llama/Llama-3.1-8B --assets tokenizer确认 GPU 为 SM89 及以上H200 满足以启用 Float8 硬件加速 GEMM 而非 emulate 模式用MODULEllama3 CONFIGllama3_8b ./run_train.sh跑通单机路径再改为多节点torchrun --nnodes N --nproc_per_node 8 -m torchtitan.train ...并按原基准叠加compile 开启、Float8 转换器含 FSDP FP8 AllGather 与 bwd 重算权重两项优化、local batch size2、steps2000在第 100 个迭代附近记录throughput(tps)与显存峰值与本文结果表4 节点 10938 / 8 节点 10753 tokens/s/GPU对比评估硬件一致性将结果按命名规范[model]_[hardware]_[date]_[entity].md提交到 benchmarks/ 目录供社区引用。【免费下载链接】torchtitanA PyTorch native platform for training generative AI models项目地址: https://gitcode.com/GitHub_Trending/to/torchtitan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考