Arganzheng's Blog

stay hungry, stay foolish

大模型推理系统揭秘:从 vLLM 看 LLM Serving Infra 核心技术(总纲)

内容简介 《大模型推理系统揭秘:从 vLLM 看 LLM Serving Infra 核心技术》以 vLLM v0.27.1 为主要分析对象,从 LLM Serving 的问题本质出发,系统讲解请求生命周期、性能指标、调度、KV Cache、GPU 执行、解码的扩展(采样、投机解码与结构化输出)、多卡并行、Prefill/Decode 分离、模型适配、请求形态的扩展(multi-LoRA 与多模态)、硬件抽象、Serving Infra 的演进方向与源码走读,以及对照 SGLang 的同题比较,共十五篇正文加一篇总结自测。 本系列不局限于算子优化,也不止于源码解读,而是试图回答一个更完整的问题: 一个文本生成请求,为什么会逐渐演化成一个涉及计算、显存、调...

大规模训练工程(09):系列总结与通关自测

Large-Scale Training Engineering: Series Recap and Final Self-Test

八篇正文回答了一个问题:一个千卡训练任务,怎么配、怎么跑满、怎么跑一个月不倒。前四篇是静态与稳态——第一篇算一张卡上四种状态的字节数与 FLOP,第二篇把每种并行写成”切哪种状态、付哪种通信”,第三篇追一个 bf16 参数在 Megatron-LM、DeepSpeed、torchtitan 里的一生,第四篇从模型与集群规格推出 70B / 1024 卡的配置并拆解 MFU 损失;后四篇是长时——第五篇把状态写到磁盘并允许换布局读回,第六篇算故障之后每一秒去了哪里,第七篇让数值不跑飞、数据可回放,第八篇把任务当作服务来运维。八篇合起来,是《大规模训练工程:从并行策略到容错恢复》总纲里”训练引擎这一层”的全部。 本文不讲新内容,做三件事:把八篇压成一张表与八段回顾,把...

大规模训练工程(08):长时训练的可观测与运维——从指标到 hang 排查

Observability and Operations for Long-Running Training

更新 @2026-09-06:本文 torchtitan 部分基于 v0.3.0 刷新;其余源码引用仍以 PyTorch 2.13.0 / Megatron Core 0.18.0 为准。 前七篇把一个千卡训练任务从”配出来”讲到”跑满”再讲到”不倒”:显存账、并行策略、三个框架、MFU 拆解、checkpoint、容错、稳定性与数据。每一篇都在回答”出了某件事该怎么办”。本篇回答的是前面那半句——怎么知道出了事,以及知道之后的十分钟里该看哪里、该叫谁、该按什么顺序查。 这不是一个附加题。Llama 3 论文(Dubey et al. 2024)报告的 54 天里 419 次意外中断,平均每三小时一次;同一篇论文说他们只有 3 次需要显著的人工介入,有效...

大规模训练工程(07):训练稳定性与数据管线——loss spike、梯度范数、数据混合与流式加载

Training Stability and the Data Pipeline

更新 @2026-09-06:本文 torchtitan 部分基于 v0.3.0 刷新;其余源码引用仍以 PyTorch 2.13.0 / Megatron Core 0.18.0 / DeepSpeed 0.19.2 为准。 前两篇处理的敌人是硬件:卡会坏、网会断、算出来的结果会悄悄错。这一篇的敌人不报错、不掉卡、不超时——任务好好地跑着,第 137,000 步 loss 从 2.1 跳到 4.8,梯度范数从 0.3 蹿到 40,然后要么在几百步后慢慢爬回来,要么再也回不来。PaLM 论文(Chowdhery et al. 2022)报告 540B 模型的训练中出现了大约 20 次这样的 spike;OLMo 2 的技术报告用了整整一节讲他们怎么把它压下...

大规模训练工程(06):容错与弹性——故障率数学、straggler、SDC 与弹性训练

Fault Tolerance and Elasticity: Failure Math, Stragglers, SDC and Elastic Training

更新 @2026-09-06:本文 torchft 部分基于 v0.2.0、torchtitan 部分基于 v0.3.0 刷新;其余源码引用仍以 PyTorch 2.13.0 / Megatron Core 0.18.0 / NVIDIA Resiliency Extension 0.6.0 为准。 Llama 3 论文(Dubey et al. 2024,The Llama 3 Herd of Models)第 3.3.4 节给了一组很少有训练团队愿意公开的数字:405B 模型在 16K 张 H100 上预训练,54 天的统计窗口里发生了 466 次任务中断,其中 47 次是计划内的(固件升级、数据集切换),419 次是意外的;意外中断里约 78% 归因...

大规模训练工程(05):分布式 checkpoint——格式、异步保存与重分片恢复

Distributed Checkpoint: Format, Async Save and Resharding

更新 @2026-09-06:本文 torchtitan 部分基于 v0.3.0 刷新;其余源码引用仍以 PyTorch 2.13.0 / Megatron Core 0.18.0 / DeepSpeed 0.19.2 为准。 前四篇解决的是”怎么配、怎么跑满”。配置定了、MFU 到了预期,任务开始按一个月的日程往前跑。这时候训练引擎面对的第一个可靠性问题不是故障本身,而是一个更朴素的问题:这一千多 GB 到几 TB 的状态,怎么写到磁盘上,写多久一次,写的时候要不要停。 Llama 3 论文(Dubey et al. 2024)给了一组值得反复引用的数字:16K 张 H100、54 天预训练、466 次任务中断,其中 419 次是意外的。折算下来集群平...

大规模训练工程(04):千卡配置实战——并行搭配、micro-batch、激活重计算与 MFU 调优

Configuring a Thousand-GPU Job: Parallelism, Micro-batch, Recompute and MFU

更新 @2026-09-06:本文 torchtitan 部分基于 v0.3.0 刷新;其余源码引用仍以 PyTorch 2.13.0 / Megatron Core 0.18.0 为准。 前三篇把一个训练任务拆成了四种状态、把并行策略拆成了”复制还是切分”的选择、把三个框架拆成了”一个 bf16 参数的一生”。这些是零件。本篇把零件装回去:拿到一份模型规格和一份集群规格,坐下来算出一组配置,跑起来,然后面对那个所有人都会遇到的数字——MFU 比预期低了 10 个点。 配置一个千卡任务没有搜索空间可以穷举。TP、PP、DP、CP 四个维度、micro-batch、重计算策略、重叠开关、精度、编译,任意组合都要几分钟到几十分钟才能跑出一个 MFU 数字,一...

大规模训练工程(03):三个框架——Megatron-LM、DeepSpeed 与 torchtitan 的架构对比与源码导读

Megatron-LM, DeepSpeed and torchtitan: Architecture and Source Guide

更新 @2026-09-06:本文 torchtitan 部分基于 v0.3.0 刷新;其余源码引用仍以 PyTorch 2.13.0 / Megatron Core 0.18.0 / DeepSpeed 0.19.2 为准。 上一篇结束在一个数字上:Llama 3 405B 用 TP 8 / PP 16 / DP 128 训练时,每张卡常驻的参数、梯度、优化器状态只有 13 GB,而在途激活可以到 73 GB。这个数字是从公式里算出来的,公式假设”bf16 参数在每张 TP×PP 分片上完整、fp32 主参数被 ZeRO-1 切成 128 份”。但公式不会告诉你:那份 bf16 参数在显存里是一个 nn.Parameter 还是一段大 buffer 的切...

大规模训练工程(02):并行策略全景——每种并行切的是哪种状态

A Map of Parallelism: Which State Does Each Strategy Shard

上一篇算出了一个数字:混合精度 + Adam 下,每个参数在训练时要占 16 字节。一个 70B 的模型光是参数、梯度和优化器状态就是 1.13 TB,还没算激活;405B 是 6.5 TB。任何一张 80 GB 的卡都放不下其中的零头。所以这些字节必须被切开放到很多卡上——怎么切,就是并行策略的全部内容。 习惯上并行策略被当作一组 API:DDP、FSDP、ColwiseParallel、Schedule1F1B、--tensor-model-parallel-size 8。这样理解的问题是你记住了十几个名字,却回答不了”这个配置为什么慢”。换一个角度:训练的状态只有四样——参数、梯度、优化器状态、激活——每一种并行策略无非是决定这四样东西的哪一样、沿哪个维度、...

大规模训练工程(01):训练任务的状态解剖——显存账与 MFU

Anatomy of Training State: Memory Accounting and MFU

一张 H100 有 80 GB 显存、标称 989 TFLOPS 的 bf16 算力。一个 70B 参数的模型,用 bf16 混合精度加 Adam 训练,参数、梯度和优化器状态加在一起是 1.13 TB——是那张卡的 14 倍。序列长 8192 时,它每一层的激活值还要 2.3 GB,80 层就是 180 GB。每个 token 的前向加反向要 4.5×10¹¹ 次浮点运算,一条 8192 token 的序列在一张卡上就算满了也要 3.7 秒。 这几个数字是本系列后面七篇的全部起点。并行策略要解决的是”1.13 TB 放到哪些卡上”;micro-batch 与激活重计算要解决的是”180 GB 的激活怎么塞进剩下的显存”;MFU 调优要解决的是”3.7 秒的理论下...

×