端侧 AI · 15 天工程路线
目录首页 English
DAY 14

LLM 性能与 Infra

从单机 TTFT/ITL 追到集群数据移动、并行拓扑与 SLO

建议阅读:约 20 分钟

学习目标

用可复现实验定位单机推理瓶颈,并理解训练并行、KV 调度、Prefill/Decode 解耦与服务 SLO 如何把同一资源账本扩展到集群。

本章关键词

关键词解释ESP32 工程类比
TTFT从请求发出到首个 token 返回的时间。像首次中断到第一条有效状态消息的延迟。
p9595% 请求不超过的尾延迟分位数。像对最慢一小部分现场事件的时延预算。
Goodput在给定正确性与 SLO 约束内完成的有效工作量,而非原始峰值吞吐。像只统计按 deadline 校验通过的数据帧,不把迟到或 CRC 错误帧算成绩。
PD 解耦把 Prefill 与 Decode 放到可独立调度和扩缩容的 worker 池。像把批量预处理与实时控制任务分到不同核,但跨核队列与复制仍有成本。

承上:回顾与定位

Day 13 已能证明请求实际经过哪些 backend;本章把正确性基线升级为跨尺度性能账本,从单设备测量延伸到集群通信、状态调度和服务目标。

从源头看今天

历史发展脉络

大规模 LLM Infra 不是一条由更快 GPU 单独推动的路线。芯片线持续改变计算、内存与互连比例;系统线则用分片、I/O-aware 算法和请求调度把这些硬件拼成可用服务。两条线必须同时阅读。

芯片与互连线

2012

GPU 深度学习证明高吞吐并行计算的规模效应

AlexNet 用 GPU 训练大规模卷积网络,让通用并行加速器成为深度学习主力;后续系统问题随即从单 kernel 扩展到多卡供数与同步。

AlexNet 原始论文 ↗
2017

TPU 与 Tensor Core 把矩阵乘变为专用快速路径

TPU 论文展示 systolic array 与片上缓冲如何围绕神经网络推理组织;同一时期 Tensor Core 推动混合精度矩阵运算,模型与 kernel 开始共同适配专用数据路径。

TPU 原始论文 ↗
2018

混合精度把数值格式变成系统杠杆

FP16 计算配合 FP32 累加与 loss scaling,在维持训练可用性的同时减少带宽和存储压力;BF16、FP8 与量化延续了模型—硬件协同方向。

混合精度训练原始论文 ↗
2020s

HBM 与 scale-up 互连共同定义加速器域

单卡容量和带宽不能独立解决超大模型;高带宽内存与节点内互连让多个加速器能以更低代价共享层内工作,拓扑亲和性进入并行规划。

NCCL 官方用户指南 ↗
至今

机架级 AI 系统把互连、供电与散热一起设计

加速器不再只是可互换的 PCIe 卡;机架内网络、交换芯片、CPU、存储层、功率和冷却共同约束可持续吞吐,因此比较必须绑定具体工作负载与系统配置。

MLPerf Training 官方结果与规则 ↗

并行算法与服务系统线

2012

参数服务器把模型状态与工作进程解耦

DistBelief 展示跨大量机器训练深度网络的参数服务与异步方法,为后来的数据并行、容错与集群调度提供早期系统框架。

DistBelief 原始论文 ↗
2019

Megatron 让 Transformer 层内张量并行可规模化

Megatron-LM 系统化切分 attention 与 MLP 矩阵,并将张量、流水线和数据并行组合,清晰暴露了并行维度与互连拓扑的关系。

Megatron-LM 原始论文 ↗
2020

ZeRO 消除数据并行的状态冗余

ZeRO 分阶段切分优化器状态、梯度和参数,以额外通信换取显著内存容量,后来成为 FSDP 类实现的重要设计基础。

ZeRO 原始论文 ↗
2022

FlashAttention 用 I/O-aware 分块减少 HBM 往返

它没有把 attention 近似掉,而是按片上存储容量组织精确计算,减少中间矩阵读写,说明算法复杂度相同并不代表真实硬件成本相同。

FlashAttention 原始论文 ↗
2023–至今

PagedAttention 之后,KV 成为集群级调度对象

vLLM 将 KV 分页以减少碎片并支持共享;随后 prefix-aware 路由、分层缓存与 Prefill/Decode 解耦把状态位置、传输和 SLO 带入服务控制面。

vLLM / PagedAttention 原始论文 ↗
今天为什么仍然重要: 芯片线给出带宽、容量和拓扑边界,系统线决定如何切模型、放状态、排请求并在失败后恢复。任何只讲其中一条的架构图都会漏掉关键路径:并行算法必须服从互连,服务调度必须知道 KV 在哪里,容量结论必须服从 SLO。
借熟悉的系统建立直觉

类比图解

把性能分析想成追查一趟总迟到的高铁

乘客只感受到总行程,这就是端到端延迟;进站安检像预处理,等首班车像 TTFT,途中每站间隔像 inter-token latency。平均到站时间看似正常,但少数暴雨天的严重晚点就是 p95。只把列车最高时速提高,若检票、换轨或进站仍占大头,总时间几乎不变;车厢空调全开还会提高每位乘客的能耗并触发温度保护。真正的优化要拿时刻表、轨迹和电表对账。

进站等待 排队、tokenize、预处理和 context 分配
首班发车 Prefill 完成并返回首 token,即 TTFT
站间节奏 Decode 的 inter-token latency 与 tokens/s
暴雨限速 尾延迟、功耗、温度和热降频造成的长尾

类比的边界: 列车各段通常近似串行,而推理可能流水化、异步复制或将多个请求合批;单请求阶段之和也不直接等于高并发吞吐。类比用于提醒分段和长尾,不能取代 trace 时间戳、硬件计数器与排队模型。

本章讲解

先写实验契约,再启动计时器

一次可比较基准至少固定模型与哈希、量化格式、runtime commit、线程和绑核、prompt token 数、输出上限、采样、并发、供电及散热。先 warm-up,再执行足够重复次数并保留原始样本。若两轮测试的输入长度或温度不同,p95 与 tokens/s 没有直接可比性。把这些字段保存为机器可读 manifest,可让固件或模型升级后自动复跑。

TTFT 与生成速度必须拆开诊断

TTFT 包含排队、模板化、tokenize、context 准备、prefill 和首轮采样;稳定 decode 则主要反映逐步读取权重与 KV、执行小批矩阵和采样输出。长 prompt 会显著拉高前者,长 context 与带宽压力会拖慢后者。应在相同请求上打单调时钟时间戳,并报告 prompt tokens/s、ITL 分布和 output tokens/s,而不是只给总耗时。

用瓶颈假设驱动下一项观测

看到 CPU 利用率低,不应直接断言“算力富余”:线程可能等待内存、锁、GPU 同步或网络背压。先由 trace 找最长阶段,再提出可证伪假设。若怀疑带宽,改变量化或 context 并观察速度与 bytes moved;若怀疑计算,改变核心数或频率;若怀疑 copy,记录分区边界。每次只改一个变量,让证据能区分相关性与因果。

先画数据移动层级,再谈算力

一个 kernel 中最热的标量可能停在寄存器,线程块复用的数据进入片上 SRAM/shared memory,模型权重、激活与 KV cache 主要驻留 HBM;跨卡张量经 PCIe 或专用 scale-up 互连,跨节点 collective 经过网卡与交换网络,checkpoint 最终落到本地 NVMe 或远端对象/并行文件系统。每向外一层,容量往往更大,但延迟、能耗和争用也上升。算术强度描述每搬一个字节能完成多少计算;Attention、MoE dispatch 和 embedding lookup 的瓶颈可能完全不同。工程分析应给每条边标注字节数、频率、并发者与拓扑,而不是笼统地说“GPU 很快”。HBM 容量决定模型能否放下,HBM 带宽决定许多逐 token kernel 的上限,节点内互连影响 TP collective,节点间网络影响 DP、EP 与 checkpoint 恢复。峰值 FLOPS 只有在数据及时到达计算单元、kernel 形状合适且通信被隐藏时才可能转化为有效吞吐。

六种并行是在不同维度切同一个训练图

数据并行 DP 复制模型、切输入 batch,并在反向后规约梯度;张量并行 TP 在单层内部切矩阵或 attention head,因此每层都可能触发 all-reduce 或 reduce-scatter/all-gather,最依赖低延迟高带宽节点内互连;流水线并行 PP 按连续层切 stage,搬运 stage 边界激活,并以 microbatch 填充流水线,气泡和负载不均是关键成本。上下文并行 CP 切长序列维度,需要交换 attention 所需的 K/V 或中间结果;专家并行 EP 把 MoE 专家分散到 rank,通过 all-to-all dispatch/combine 搬 token,路由倾斜会让少数专家拖住全局。FSDP/ZeRO 则切参数、梯度与优化器状态:计算前 all-gather 所需参数,反向后 reduce-scatter 梯度,再释放完整副本。它们不是互斥按钮,真实作业常用多维 device mesh 组合,但每新增一维都增加布局转换、故障面与调参空间。

在线推理有两个阶段、两类延迟和一个持续增长的状态

Prefill 并行处理 prompt token,通常能形成较大的矩阵乘,决定 Time To First Token;Decode 每轮只生成少量 token,却要读取所有层的权重和历史 K/V,常受内存带宽与调度开销约束,Inter-Token Latency 决定流式体验。KV cache 让系统不必为旧 token 重算 attention,但其容量随并发、上下文长度、层数、head 数和 dtype 增长。PagedAttention 把逻辑连续序列映射到可分页物理 block,降低外部碎片并支持灵活共享;prefix cache 复用相同前缀 block,但命中率取决于模板规范化、租户隔离与路由局部性。continuous batching 在每个 decode 迭代接纳和移除请求,减少静态 batch 的空槽,却使排队策略、抢占与尾延迟成为一等问题。吞吐必须在给定 TTFT/ITL SLO 下报告,超时后才完成的 token 不属于有效服务能力。

用 SLO、可观测性和故障演练闭环容量规划

服务入口应记录输入/输出 token、模型和 tokenizer 版本、采样参数、租户、deadline 与 trace id;路由器记录选择原因、prefix 命中和队列估计;worker 暴露 TTFT、逐 token ITL、batch 宽度、KV block 使用率、抢占、OOM 与错误;网络侧观察 collective 或点对点传输字节、拥塞和重试。容量模型至少区分短问答、长上下文、批处理与多轮会话,因为均值流量会掩盖长 prompt 对 Prefill 和 KV 的冲击。压测要回放到达过程与长度分布,并同时报告 p50/p95/p99 和 SLO goodput。故障演练包括杀 worker、降速网络、填满 KV、破坏一个 checkpoint 分片以及滚动升级不兼容 runtime。只有当系统在这些条件下能拒绝、降级、回滚并留下证据,峰值 benchmark 才能变成可运营的容量结论。

把项目放回正确层级

基础设施项目图谱与跨尺度启示

技术状态核验日期:

以下是按职责层级整理的代表性开源项目,不是性能排名。版本、硬件支持和接口会变化;选型时应回到链接的官方文档或仓库,并用自己的模型、拓扑和 SLO 复测。

训练分片与并行

  • PyTorch FSDP2 / DTensor ↗

    解决的问题
    以设备网格表达参数和张量分片,降低全分片训练的内存冗余。
    核心机制
    参数以 DTensor 分片保存,在计算前 all-gather,反向后 reduce-scatter,并支持二维 mesh 组合。
    适用边界
    它不替你选择网络拓扑、checkpoint 策略或模型并行维度;峰值内存仍取决于预取与激活。
  • Megatron Core ↗

    解决的问题
    为大型 Transformer 组合 TP、PP、CP、EP 与 DP。
    核心机制
    按 Transformer 结构切矩阵、层、序列与专家,并提供调度和通信重叠路径。
    适用边界
    性能依赖受支持模型、并行布局和加速器拓扑,不能把示例吞吐直接搬到另一集群。
  • DeepSpeed ↗

    解决的问题
    提供 ZeRO、流水线、混合精度与训练/推理系统能力。
    核心机制
    分片模型状态并协调通信、offload 和执行调度。
    适用边界
    功能覆盖广不等于每个组合都最优;需锁定版本并验证与模型代码的契约。

通信与 Kernel

  • NCCL / RCCL ↗

    解决的问题
    在 GPU 间执行拓扑感知 collective。
    核心机制
    选择 ring/tree 等算法与传输路径,暴露 all-reduce、all-gather、reduce-scatter 等原语。
    适用边界
    通信库不会决定上层切分是否合理;RCCL 是 AMD 平台对应实现,应按硬件阅读各自支持矩阵。
  • Triton / FlashAttention ↗

    解决的问题
    减少算子实现成本与 attention 的 HBM 中间数据往返。
    核心机制
    编译专用 tile kernel;FlashAttention 用 I/O-aware 分块实现精确 attention。
    适用边界
    形状、dtype、架构和编译版本影响收益,不能把单 kernel 加速等同于端到端吞吐。
  • DeepEP / NIXL ↗

    解决的问题
    处理 MoE token dispatch 与跨内存/节点数据移动等进阶数据面。
    核心机制
    DeepEP 优化专家 all-to-all;NIXL 为 KV 等对象提供跨异构内存层的传输抽象。
    适用边界
    二者解决的对象不同,也不替代通用 collective、路由控制面或一致性协议。

模型服务 Runtime

  • vLLM ↗

    解决的问题
    提高生成式服务的 KV 利用率与动态请求吞吐。
    核心机制
    PagedAttention、continuous batching、prefix cache 与多类并行/连接器。
    适用边界
    功能开关并非普遍增益;必须按 workload 验证 TTFT、ITL、尾延迟与显存。
  • SGLang ↗

    解决的问题
    组织结构化生成程序与高吞吐模型服务。
    核心机制
    将前端语言/缓存复用与后端调度、attention kernel 和分布式 serving 结合。
    适用边界
    API 与后端快速演化;迁移前要验证 tokenizer、采样和输出语义一致。
  • TensorRT-LLM ↗

    解决的问题
    在 NVIDIA 平台构建优化的 LLM 推理 engine 与服务执行路径。
    核心机制
    图优化、专用 kernel、量化、并行和 in-flight batching。
    适用边界
    平台绑定和构建产物管理是成本;不可与跨厂商结果脱离环境比较。

分布式服务编排

  • llm-d ↗

    解决的问题
    在 Kubernetes 上组织 KV-aware 路由、分层缓存与解耦服务。
    核心机制
    连接 Gateway 调度、vLLM、KV 索引和点对点传输,按缓存与负载选择 worker。
    适用边界
    它不是另一个 attention runtime;组件和能力仍快速演化,生产使用要锁版本并演练故障。
  • Dynamo ↗

    解决的问题
    构建可组合的分布式推理数据面和 KV-aware 服务流水线。
    核心机制
    组织路由、worker、KV 传输/卸载以及 Prefill/Decode 分离。
    适用边界
    参考配置不是跨模型通用最优解;额外服务跳数与状态协调必须进入 SLO 预算。

来源机制—工程启示—适用边界

来源机制工程启示适用边界
数据移动层级把权重、激活、梯度、KV 和 checkpoint 分别标到实际内存/网络层。不能只用容量判断;还要测访问频率、争用与尾延迟。
多维并行让高频、细粒度通信留在最快拓扑,低频、大粒度通信再跨节点。最佳 mesh 随模型形状、序列长度和集群拓扑变化。
分页 KV 与解耦服务状态位置和所有权必须进入调度决策,并对传输失败负责。缓存命中和阶段分离只有在目标 workload 下才构成收益。
SLO goodput以 deadline 内完成的请求或有效训练 token 做容量目标。平均 tokens/s 无法代表尾延迟、公平性或故障恢复。
让数据真正跑起来

动态过程演示

一次请求穿过 Prefill/Decode 解耦服务集群

逐步观察 token、KV blocks 与调度元数据走不同路径;每一步都可能改变 TTFT、ITL 或缓存命中。

步骤 1 / 6

准入与分词 · prompt + tenant + deadline → token IDs

网关校验限额、套用版本化聊天模板并估算 prompt/output 预算

观察点

错误 tokenizer 或模板会同时破坏语义、容量估算与 prefix 命中

循环 / 返回条件: 多轮会话携带稳定 prefix 再次进入路由;缓存命中时可跳过部分 Prefill。完成、取消、驱逐或版本变化时,KV 所有权必须原子释放,路由索引也要同步失效。

查看静态全景图
request → queue → prefill → decode → stream
             │ TTFT      │ ITL / KV
chip memory ↔ scale-up ↔ scale-out ↔ storage
             └── topology + parallelism + SLO ──┘

代码或命令示例

record(model, quant, prompt_tokens, output_tokens, hardware, temperature)
measure(TTFT, ITL_p50, ITL_p95, tokens_per_s, joules_per_token)
# 集群侧再记录 collective、KV 占用、goodput 与失败恢复时间

动手实验

固定模型、量化、prompt 与输出长度,完成冷启动和预热后的 10 次本地基准,记录 TTFT、ITL p50/p95、RSS、功耗和温度。然后把一次请求画到“芯片内存→scale-up→scale-out→存储”层级,分别标出若采用 TP、PP、分片训练或 PD 解耦会新增的通信,并写出它可能改善和恶化的指标。
实验记录与导出

工程陷阱

避免误判: 只报告峰值 tokens/s,或把某个并行/解耦策略当成普适加速。任何结果都必须绑定模型、精度、序列、并发、硬件拓扑、热状态和 SLO;边界通信可能吞掉局部收益。

核心测试

完成 3 道单选题后提交;提交前不会显示答案。

1. Time to First Token 的定义最接近?
2. 为什么张量并行通常优先限制在同一高速互连域内?
3. 哪种情况最可能让 Prefill/Decode 解耦比共置更慢?

一起把本章讲清楚

在 GitHub 上讨论本章

登录 GitHub 后提问、补充实测或分享你的实现;评论会保存在本课程的 GitHub Discussions 中。

评论区需要 JavaScript;也可以直接打开 GitHub 讨论区: 打开 GitHub 讨论区 ↗

延伸阅读

启下:下一章如何使用本章能力

终章把模型包、runtime、异构 backend、MCU/Host 安全边界、能耗、回退、OTA 与可观测性收束成可交付的端侧 LLM 产品。

下一天: Day 15 · 端侧 LLM 产品化