完整 LLM 流水线 本节摘要:01 到 12 节的每一节都是某流水线的一个阶段。本节是把这些阶段变成单次端到端运行的脚手架:分词、预训练、扩展、SFT、对齐、评估、量化、服务。你不会在笔记本上训 70B——你会产出 2026 前沿团队用来决定「什么能上线」的编排层、清单、评估关卡、回滚计划。这是毕业项目。代码很小,纪律很大:同样的四件套(清单、编排器、评估关卡、产物库)既跑 Llama 3 也跑你的爱好 GPT,差别只在各阶段配置里数字的大小,不是流水线的形状。 学习目标 阅读完本节,你应当能够: 把前十课(分词器、数据、预训练、扩展、SFT、RLHF、DPO、CAI、评估、量化、推理)组合成单一可复现的流水线规约。 定义阶段间的产物契约:每阶段消费什么、产出什么、下阶段如何验证输入。
本节摘要:01 到 12 节的每一节都是某流水线的一个阶段。本节是把这些阶段变成单次端到端运行的脚手架:分词、预训练、扩展、SFT、对齐、评估、量化、服务。你不会在笔记本上训 70B——你会产出 2026 前沿团队用来决定「什么能上线」的编排层、清单、评估关卡、回滚计划。这是毕业项目。代码很小,纪律很大:同样的四件套(清单、编排器、评估关卡、产物库)既跑 Llama 3 也跑你的爱好 GPT,差别只在各阶段配置里数字的大小,不是流水线的形状。
阅读完本节,你应当能够:
前几节各自都能跑。分词器训好。迷你 GPT 预训练。SFT 数据集组装。奖励模型训练。DPO 跑。评估测量。量化权重导出。推理服务起。每个都是 notebook,各有自己的约定、输出路径、随机种子。
前沿训练运行不是 notebook。Llama 3 405B 用了 3000 万 H100 小时,约 54 天。DeepSeek-V3 用约 280 万 H800 小时。期间,一个损坏的检查点、一次数据污染、一次评估回退,就能让团队损失一周挂钟时间和一个月 GPU 预算。团队靠流水线卫生活下来:每阶段有确定性输入、确定性输出、清单、哈希、关卡。
这是毕业项目。你不会在笔记本上端到端跑流水线——你会写协调各阶段的编排器、描述运行的清单、把关上线决策的校验器、让第三方凭单一文件重跑你工作的回放计划。代码小,纪律大。模式从 1 亿到 1 万亿参数不变——同样的四件套(清单、编排器、评估关卡、产物库)既跑 Llama 3 也跑你的爱好 GPT。
每个第 10 章的课都是一个阶段,完整依赖图如下。
阶段 07、08 可并行,其余是硬依赖。阶段 02(分词器)一变,所有下游产物失效;阶段 10(评估)一变,只影响上线决策。
清单是单一文件,描述一次运行到足以回放。流水线产出的任何东西都不该依赖清单里没有的状态。字段枯燥但必备:
pipeline_version: 1.2.3 seed: 42 git_commit: a1b2c3d4 stages: 01_tokenizer: recipe: bpe_32k input_hash: sha256:... output_hash: sha256:... wall_clock_sec: 3600 cost_usd: 12
阶段 N 的输出哈希是阶段 N+1 的输入哈希,任何偏差流水线就停——这是及早抓数据损坏的方法,也是异大陆队友验证其回放产出与你相同产物的途径。实践中小团队用简单 YAML 模式加清单检查器,对比上次成功运行的差值,任何预期字段(成本、挂钟)外的偏差是红旗。
每阶段输出是类型化产物——不是目录 blob,不是 pickle,而是有已知模式的命名类型。类型化防止最常见失败:把阶段 08 输出当阶段 06 输入,把 DPO 训的模型走 SFT 路径。类型化产物与类型化阶段签名让这些错变成编译期失败而非第五天的失败。
上线不是「训练完成」,而是「训练完成且评估关卡过了」。关卡在运行开始前定义,每条都是数值阈值,无「看着行」关卡,无主观签字。全过则产物标可上线,任一失败则暂停等具名评审显式覆盖(覆盖本身记入清单)。两个关卡抓大多数灾难:回归关卡(新模型在核心基准上至少不比上个差)抓训练 bug,KL 预算关卡(对齐策略偏离参考不超过 X)抓对齐过火。
gates: mmlu: >= baseline + 0.5 humaneval: >= baseline + 1.0 truthfulqa: >= baseline safety_refusal_rate: <= 0.05 kl_from_reference: <= 25.0 cost_total_usd: <= 50000
读清单、派发阶段、追踪产物、任何契约违例就停的几小块代码。这不是 Airflow,不是 Kubeflow,流水线卫生你要的是自己写的无聊东西。职责狭窄:(1) 从清单解析 DAG;(2) 每阶段检查期望输出是否已以正确哈希存在(在则跳过);(3) 跑阶段,捕获 stdout/stderr,测挂钟与成本;(4) 验证输出哈希对下阶段期望输入;(5) 失败则写含确切失败阶段的部分清单并非零退出。约 200 行 Python。
两个外部系统锚定流水线。实验追踪器(wandb、neptune、mlflow)按阶段记损失曲线、评估指标、系统遥测——这是三周后你想比运行 A 与 B 时去的地方,团队几乎都用托管追踪器。产物库(S3、R2、GCS)是检查点、数据集、分词器、评估报告的不可变对象存储,产物按哈希寻址而非文件名——latest.pt 是自找麻烦,ckpt-7b-step-20000-sha256:abc123.safetensors 是契约。编排器两者都写:追踪器给人看图,产物库给下阶段查输入。
前沿运行带一个美元数字。预算纪律在两处:运行前估算——从清单算预期 FLOPs(预训练:6×参数×token)、预期 GPU 时(FLOPs/峰值吞吐/利用率)、当前租金下美元成本,超预算关卡流水线拒启动。运行中追踪——逐阶段挂钟与成本记入清单,每阶段后查剩余预算,某阶段超支则下阶段关卡按新剩余预算评——你不是 VC 来电时才发现没钱。Llama 3 报告成本 6100 万,DeepSeek-V3 主预训练报告 560 万。
这俩不同。可复现:同样清单+同样代码+同样基础设施产出下游指标等价的检查点。确定:逐位相同输出。现代 LLM 训练可复现但不确定——分布式训练的归约顺序、GPU 核不确定性(cuBLAS、flash-attn)、混合精度舍入合起来让运行间浮点在 1e-5 级别不同。这对最终指标(不动)没问题,但对你想逐位 diff 调试是致命的。解法是记每阶段的输入哈希、输出哈希、头条指标——这些匹配则运行「复现」了,即使权重不逐位相同。
运行开始前写下每阶段失败时怎么办。三类:便宜重跑(小时)——分词器、评估、量化、推理服务,直接重跑;中等(天)——SFT、DPO、CAI,保留基座只重跑对齐阶段;昂贵(周与百万美元)——预训练,回滚计划不是「重跑」而是「用上一个好检查点,用修订数据重跑更便宜的下游阶段」。因阶段依赖类型化且哈希化,编排器可自动算回滚集:使失败阶段加所有后代失效。阶段 06(SFT)失败使 06~12 失效,阶段 11(量化)失败只使 11、12 失效。事先命名避免凌晨 4 点团队筋疲力尽时即兴发挥。
多数前沿团队汇聚到同一骨架:分词器 128K BPE 带字节回退(小而均衡的多语言切片上训);预训练 1020T token(主要网页+代码+合成),Muon 或 AdamW 优化器,FSDP2 或 DeepSpeed ZeRO-3,梯度检查点,BF16 权重 FP32 主;SFT 50 万200 万指令对(人+合成混,对评估集严格去重);对齐 DPO 或 CAI+GRPO(偏好信号太多维才用 RLHF);评估 MMLU-Pro、MATH、HumanEval+、GPQA、SWE-Bench Verified、LiveBench 加一个公从不见的私有留出集;量化 4 位 GPTQ 或 AWQ 服务、8 位安全评估;服务 vLLM、TensorRT-LLM 或自研,连续批、投机解码、KV 缓存驱逐。数字每半年变,骨架不变。
本节代码是编排器与清单检查器,非十二个训练脚本。每阶段用产出正确形状与哈希的占位符模拟,端到端跑编排器证明流水线管道通,再去烧 GPU 钱跑真阶段。关键件:Manifest(流水线版本、种子、git 提交、阶段、关卡)、Stage(名、类型、输入哈希、输出哈希、挂钟、成本)、Orchestrator.run()(解析 DAG、派发阶段、验哈希、更新清单)、EvalGate.check()(读阈值、比最新评估、返通过/失败)、ArtifactStore(内存桩,模拟 S3)、CostTracker(逐阶段与累计,超上限即停)。
三个命令组成规范工作流:plan(验清单、算成本估算、打印 DAG)、run(执行阶段,写 manifest.out.yaml)、gate(读 manifest.out、应用评估关卡、上线或暂停)。每次先跑 plan——多数流水线 bug 在 plan 时暴露(缺关卡阈值、过期哈希、预算超支),plan 免费、run 贵,在便宜侧抓 bug 省钱。gate 输出 SHIP 或 HOLD: <原因>——暂停不是失败是决策点,具名评审覆盖(覆盖被记录)或批准回滚。
本节产出 outputs/skill-llm-pipeline-reviewer.md。喂给它拟议的流水线清单,它检查所有契约:阶段类型化、哈希链、关卡、回滚计划、成本估算。它拒绝批准缺评估关卡、KL 预算无界、或混评估与训练数据的清单。
(Easy) 扩展编排器支持阶段 07、08 并行执行(用 concurrent.futures),确认最终清单记录两者输出且阶段 09 输入哈希是两者的确定性组合。
(Medium) 加「污染检查」关卡:给定评估集哈希与训练分片,算重叠(精确串匹配或 13-gram),超 0.1% 关卡失败。喂污染训练集确认关卡暂停运行。
(Medium) 实现成本估算器:阶段 04 预训练 FLOPs=6×参数×token,H100 在 989 TFLOPS BF16 上假设 40% MFU,2.50 美元/GPU 时,报 7B 训 2T token 的估算,对比已发表 Llama 2 数字。
(Hard) 构建部分回滚:模拟阶段 09(CAI)失败,重跑 0912 而 0108 留缓存,编排器应按哈希检测缓存产物跳过,测省的挂钟。
(Hard) 加可观测性:每阶段发 OpenTelemetry span,含参数、已见 token、损失、成本属性,接本地收集器。重点不是仪表盘,是每阶段健康可从单一 trace ID 追溯。
latest.pt 是自找麻烦,ckpt-sha256:abc.safetensors 是契约。下一节,我们把视角从流水线转到架构:前沿开源模型(Llama 3、DeepSeek-V3、Mixtral、Qwen、Gemma)相对 GPT-2 到底改了哪几个旋钮。