01推理是怎么跑起来的#llminf-anatomy
大模型生成文字是「一次一个 token」的自回归过程,且分成性格完全相反的两个阶段: prefill 读题飞快、吃算力;decode 写字很慢、吃显存带宽。全书一半的优化都在对付这条矛盾。
自回归:为什么一个字一个字往外蹦
模型每次只做一件事:看着前面所有 token 预测下一个,接到末尾再预测下一个。生成 500 字 ≈ 串行跑 500 次前向计算,后一步依赖前一步,天然无法并行。流式输出(Streaming)不是产品设计,是把真实生成过程直接播给你看。训练可以整段并行、推理只能逐 token 串行——这条不对称是推理成为独立工程领域的根源。
两个阶段,性格相反
带宽墙:decode 慢在哪
decode 每生成一个 token,理论上要把全部权重读一遍。算一遍就明白瓶颈在哪:
| 70B 模型 FP16 权重 | 约 140GB |
| H100 带宽 | 3.35TB/s |
| 光搬权重的上限 | 单请求每秒最多约 24 个 token——算力再强也白搭 |
| 此时 GPU 算力利用率 | 往往不足 1%——几百 TFLOPS 的卡在陪显存散步 |
decode 速度上限 ≈ 显存带宽 ÷ 模型字节数
要么摊薄搬运(批处理),要么减小字节(量化)——全书一半优化都在改这个分子或分母。
「每 token 搬全量权重」是单请求的理想化上界,实际有缓存与批处理摊薄,数量级判断成立。
三个仪表盘与一条时间线
| 指标 | 由谁决定 | 它是什么 |
|---|---|---|
| TTFT(Time To First Token,首字延迟) | prefill | 用户等多久看到第一个字 |
| TPOT(Time Per Output Token,每字延迟) | decode | 字往外蹦的快慢 |
| 吞吐 | 批处理 | 摊成本的分母 |
谈体验先问 TTFT / TPOT,谈成本用吞吐,不要只问「一条请求几秒」。
02KV Cache 与显存账#llminf-kv-budget
KV Cache「为什么存在」(空间换时间)在 LLM 原理模块第 4 章;本节讲它在服务系统里的新角色:并发的天花板、长上下文账单的主角。「装得下模型」和「服务得了客户」是两回事。
心算公式
每 token 的 KV 字节数 = 2(K 和 V)× 层数 × KV 头数 × 每头维度 × 精度字节。以 Llama-3-70B 为例:
| 算式 | 2 × 80 层 × 8 个 KV 头(GQA,Grouped-Query Attention)× 128 维 × 2 字节(FP16) |
| 结果 | 320KB / token |
| 记结论 | 主流 70B 级约 0.3MB / token,10 万 token 上下文 ≈ 30GB 显存 |
注意力架构直接改写成本表
| 架构 | KV 占用 |
|---|---|
| 无 GQA(64 头全存) | 是 GQA 的 8 倍 |
| GQA | 基准 |
| MLA(Multi-head Latent Attention,DeepSeek 系) | 比 GQA 再省约 10 倍 |
| 显存去向 | 怎么算 | 占用(70B FP16 示例) | 说明 |
|---|---|---|---|
| 模型权重 | 70B 参数 × 2 字节 | 140GB | 单卡装不下 → 至少 2 卡张量并行 |
| KV Cache | 0.32MB/token × 并发 × 长度 | 弹性:8K × 20 并发 ≈ 51GB | 随并发与对话长度膨胀 |
| 激活/缓冲 | 运行时临时张量 | ~5–10GB | 随 batch 波动 |
| 结论 | 2×H100 = 160GB,权重吃掉 140GB | 剩 ~15GB | 只够 ~6 路 8K 并发——瓶颈是 KV 不是权重 |
显存与并发计算器
按上面的心算公式实现(FP16 口径:8B ≈ 0.13、32B ≈ 0.26、70B ≈ 0.32 MB/token)。 MLA 架构(DeepSeek 系)不适用此公式,按官方数据另算。结果是容量直觉,报价以压测为准。
长上下文为什么贵:两头吃钱
Prefill 端计算平方级涨:输入 4K → 128K(32 倍),注意力计算量涨约 1000 倍, TTFT 从零点几秒到几十秒,还独占算力挤压别的请求。Decode 端显存与带宽线性涨: 128K 的 KV ≈ 41GB,不仅占座、每生成一字还扫一遍。「把整本手册塞进上下文」每次提问为 10 万 token 付钱;「RAG 检索相关三页」每次只带几千 token——能检索就别硬塞,这正是「1M 窗口不是 RAG 终结者」的推理侧论据。
窗口是容量,命中是复用
上下文窗口是「一次能装多少」的能力上限,像信用卡额度——额度高不等于每次刷满;缓存命中是「装进去的东西要不要重算」的运行时效率。命中率由 prompt 结构与请求模式决定,不由窗口大小决定:1M 窗口可以 0% 命中,200K 窗口也能 90%+(稳定前缀放开头、别在头部插时间戳)。容量规划也别按会话数算:按「并发活跃请求 × 实际长度」算,任一时刻绝大多数会话离线、占的只是可回收的缓存位;但要给真跑满超长窗口的请求做准入控制(并发配额、长度分级),别让一个 1M 请求把整台机器的批处理能力挤瘦。
命中直接改写账单:命中读取的价约为原价 1 折,而写入缓存要加价(5 分钟档 1.25×、1 小时档 2×)——像租一个带过期时间的储物柜:存要加钱、取很便宜,放太久被 LRU 挤掉就得重算。省下的绝对金额随前缀长度增长,所以多轮 Agent 每轮重发全部历史时的增量缓存命中,正是「1M 窗口 × 多轮对话」在经济上成立的前提。判断一个长上下文 Agent 方案划不划算,先看它的稳定前缀有多长、命中率能做到多少,而不是看窗口标称多大。
03批处理与调度#llminf-batching
把 GPU 利用率从 1% 拉到 40%+ 靠三件套:
这是 vLLM 和 SGLang 起家的本钱,也是「同一张卡吞吐差数倍」的全部秘密。
批处理:GPU 是大巴,不是出租车
decode 的主要成本是把权重从显存搬进计算单元;一次搬运顺手算 1 路和算 32 路耗时几乎一样——把并发请求拼进同一批,吞吐近似 ×32 而单路延迟只略增。实测量级:单请求几十 token/s 的卡,批到 32–64 路时整机吞吐能到几千 token/s,单路 TPOT 只慢 20–50%。演进三代:静态批(旅游包车:人齐才发、全程同进退)→ 动态批 → 连续批处理(地铁:每生成一步重新组批,完成的立刻下车、新请求下一步就上车)。
PagedAttention:显存当虚拟内存管
旧做法按「最大可能长度」预留连续显存,实际只用 20%,研究测到 60–80% 的 KV 显存被浪费。 vLLM(SOSP'23)把 KV Cache 切成固定小页(如 16 token/页),逻辑连续、物理任意、页表映射、按需分配——碎片近零、利用率逼近 100%,直接换来 2–4 倍吞吐。赠品:同一份前缀的页可以被多个请求共享(copy-on-write),前缀缓存由此而来。
前缀缓存:提示词结构 = 缓存命中率 = 账单
两条请求开头相同(同一 system prompt、同一文档、同一多轮历史),前缀部分的 KV 完全一样——算过一次就存着,后来者直接命中,省掉整段 prefill,TTFT 常见提速 3–10 倍。 SGLang 的 RadixAttention 把所有请求的 KV 按前缀组织成基数树,自动发现公共前缀、自动共享。最大受益者:多轮 Agent(每轮带全量历史,命中后每轮只算新增几百 token)和固定语料 RAG。把「稳定不变的内容放提示词开头」从写作习惯升级为省钱手段。
Chunked Prefill 与请求状态机
分块预填充(Chunked Prefill)解的是一个调度两难:
| 如果…… | 后果 |
|---|---|
| 长文档 prefill 独占 GPU 几秒 | 批里所有 decode 用户集体卡顿(TPOT 尖刺) |
| 永远让 decode 优先 | 长请求饿死 |
| 分块预填充 | 把长 prefill 切成小块(如每块 2K)与 decode 交替执行——长请求慢一点点,换全场平稳,现代引擎默认开启 |
调度的本质是状态机管理
请求的九种状态分三类走:进行中(排队 / Prefill / Decode)、等待(等 KV 或资源、抢占后待恢复、客户端背压)、终态(完成 / 取消 / 超时失败)。每个状态都要有进入条件、最大驻留时间、可观察事件——缺一个,这个状态就是看不见的黑洞。平均吞吐很好看、P99 排队驻留 8 秒的服务——仪表盘是绿的,用户体感是崩的。
调度验收同时看五项:队列驻留、批内 token、KV 压力、取消抢占率、用户 SLO。
04推理框架图鉴#llminf-engines
引擎是模型的运行时:向下榨硬件、向上暴露 OpenAI 兼容 API 这个事实标准——应用代码一行不改就能在 GPT、Claude、自建 vLLM 之间切换。绑标准接口、不绑具体引擎,是给客户的防锁定承诺。
| vLLM v0.32 | SGLang v0.5.22 | TensorRT-LLM 1.x | llama.cpp / Ollama | |
|---|---|---|---|---|
| 定位 | 通用默认引擎 | 前缀共享 / 结构化输出 | NVIDIA 性能上限 | 本地 / 边缘 |
| 绝活 | PagedAttention · 生态最大 | RadixAttention · day-0 支持 | 内核级优化 · 新精度首发 | CPU 可跑 · 零门槛 |
| 硬件 | 最广(含国产卡) | NVIDIA/AMD 为主 | 仅 NVIDIA | 几乎任何设备 |
| 上手 | pip 一条命令 | pip 一条命令 | 较重、需调优 | 一条命令 |
| 适用 | 不知道选啥选它 | Agent/RAG/DeepSeek 系 | 新卡 + 专职团队 | demo / 隐私 / 离线 |
| 你的情况 | 选谁 | 像什么 |
|---|---|---|
| NVIDIA 新卡 + 极致性能 | TensorRT-LLM | 绑定自家赛道的 F1(商业包装为 NIM,按 GPU 收订阅) |
| 共享前缀多 / DeepSeek 系 | SGLang | 特定赛道超快的改装车 |
| 本地单机 / 桌面 | Ollama | —— |
| 其余一律 | vLLM 起步 | 什么路都能跑的丰田——「它是这个领域的 Linux」 |
两个别:别拿 Ollama 的体验推断生产容量(无连续批处理,几十并发吞吐差近一个数量级);也别拿 vLLM 的门槛吓退桌面用户——两个世界各自最优。
云上三条路线
| 路线 | 形态 | 适合谁 | 代价 |
|---|---|---|---|
| 托管模型 API | 按 token 付费,开箱即用 | 快速上线、流量不稳 | 单价高、定制少 |
| 托管 GPU 自建 | 租 GPU/K8s,自跑 vLLM 等 | 流量稳定、要控制力 | 要运维团队 |
| Serverless GPU | 按秒计费、自动扩缩 | 波峰波谷明显 | 冷启动延迟 |
经验阈值:GPU 月利用率稳定站上盈亏线时,自建开始比按 token 买便宜(盈亏线按当期卡价与 API 价代入算)——成本模型见生产化一节。
引擎版本核实 2026-10-20(vLLM v0.32.0 · SGLang v0.5.22、Spec V2 默认开启 · TensorRT-LLM 稳定版 v1.2.1),来源 GitHub releases。这张表是本页过期最快的一处,月度巡检重点。不可外推边界:版本号只说明当期稳定版,不代表功能对等——三家的默认开关不同,跑分对比必须锁同一批参数。
05量化#llminf-quant
量化直接改 decode 公式的分母:字节减半 = 显存减半 + 搬运变快 + 省出的空间喂给 KV 拼更大的批——一份投入三重回报,是性价比最高的单项优化。神经网络几十亿参数的「集体投票」淹没个体噪声,所以砍一半比特能力几乎不变,像无损音乐压成高码率 MP3。
| 精度 | 每参数 | 70B 占用 | 质量损失 | 地位(2026-07) |
|---|---|---|---|---|
| FP16/BF16 | 2 字节 | 140GB | 基准 | 训练产物原始精度,推理侧已非默认 |
| FP8 | 1 字节 | 70GB | ~0.5–2% | 生产默认:Hopper/Blackwell 原生支持,主流引擎一等公民 |
| INT4(AWQ/GPTQ) | ~0.5 字节 | ~35–40GB | ~1–5% | 显存受限场景主力;大模型塞小卡的标准答案 |
| FP4/NVFP4 | ~0.5 字节 | ~35GB | 优于同位宽整型 | Blackwell 原生格式,工具链成熟中,尚未大规模生产 |
方法各管一段:FP8 训练后转换 + 少量校准几乎免费,权重和 KV Cache 都能用(KV 减半 = 并发翻倍);AWQ/GPTQ 用小批校准数据找「重要权重」,是 GPU 端 INT4 主流;GGUF 服务桌面世界(llama.cpp 生态,2–8bit)。共同关键词是校准——拿几百条真实样本「试穿」,不是盲目砍位数。
什么时候收手
损失不均匀:日常对话、摘要、客服几乎无感;数学推理、代码生成、长链条逻辑对低比特敏感, INT4 可能掉 3–5 分甚至更多。反例警示:某场景 INT4 后客服话术无感,但工单里的金额计算开始出错——败在评测集没覆盖算术。两条铁律:①用自己的业务评测集做上线门禁,不只信通用榜单; ②分档使用——面客核心链路 FP8 起步,内部工具再下探 INT4。量化不是「开不开」而是「开到几档」:FP8 近乎白捡,INT4 用评测换显存,再往下要业务拍板。
核实 2026-07-09,来源 2026 量化综述。NVFP4 用块级缩放把量化误差比 MXFP4 降 88%(NVIDIA 数据)——低比特损失的大头来自缩放粒度。不可外推边界:这个 88% 是两种低比特格式之间的量化误差相对改善(厂商自家口径),不是「模型质量只掉一点点」的结论——业务侧仍要拿自己的评测集做上线门禁。
06投机解码#llminf-speculative
量化减小「每次搬多少」,投机解码减少「搬多少次」:小草稿一口气猜 K 个 token,大模型一次前向并行验证——猜对了白赚,猜错了照旧。像秘书起草、老板审签:审批比逐字口述快得多。
为什么「无损」
验证按大模型自己的概率分布逐 token 把关(拒绝采样),数学上可证输出分布与大模型独跑一模一样——不是「差不多」,是分布级相等。猜错的 token 被拒绝重算,损失的只是那次加速机会,不是质量。所以它敢进生产默认配置。
三代草稿与接受率
①独立小模型起草(要维护两个模型、词表对齐)→ ②EAGLE 系:在大模型内部特征上训轻量草稿头, EAGLE-3 配树状草稿成当前主流 → ③MTP(Multi-Token Prediction):DeepSeek 系把多 token 预测头直接训进模型,原生自带。接受率是成败仪表盘:>80% 时整体 2–4 倍加速;草稿总被拒反而白付验证开销。趋势:草稿能力从「外挂」走向「内生」,新模型自带 MTP/EAGLE 头是 2026 常态。
收益边界
低并发、延迟敏感时收益最大(GPU 闲着,验证白嫖算力);高并发吃满算力时收益缩水甚至为负。代码、结构化文本接受率高,天马行空的创意写作接受率低。典型配置:在线聊天服务开(保体验)、离线批量任务关(保吞吐),同一集群两套配置。一句话:投机解码是「拿闲置算力换延迟」的交易。
推理模型:优化从可选项变刚需
RLVR 训出的推理模型靠「先想后答」提升解题力——同一个问题,普通模型答 300 token,推理模型「想」5000 再答 300:decode 负载 ×17,且全部发生在最慢最贵的那段。行业预测 2030 年推理占 AI 总算力 ~75%。这就是 2025–2026 推理优化集中爆发的原因:投机解码默认化、P/D 分离标准化、NVIDIA 专门发布 Dynamo。售前叙事线:客户要更强的推理能力 → token 消耗数量级上涨 → 推理优化直接决定这件事经济上可不可行。
核实 2026-07-09,来源 2026 实测综述(vLLM 报告 EAGLE-3 最高 ~2.5×)。三板斧正交且叠乘:FP8 + 连续批处理 + EAGLE 组合后,同硬件吞吐可达朴素部署的 5–10 倍。不可外推边界:两个倍数都是特定负载与硬件下的实测:投机解码的收益强依赖草稿命中率,长输出场景收益大、短问答几乎无感;5–10 倍是三招叠乘的上限估计,不是默认可得。
07P/D 分离与分布式#llminf-disagg
单卡优化到头,战场转向集群:装不下就切开跑(并行),prefill 和 decode 互相干扰就分开跑(P/D 分离),KV Cache 金贵到要建分层仓库(缓存池)。这是「千并发怎么架构」的标准答案——但规模不够时别用。
推理侧三种并行
张量并行 TP(一层切给多卡,单机内低延迟首选,NVLink 内不出机)、流水线并行 PP(按层分段,跨机用)、专家并行 EP(MoE 的专家分布到多卡)。DeepSeek 系旗舰(671B 总参/37B 激活)权重远超单机 8 卡容量,生产普遍 TP+EP、几十张卡为一个推理单元——「部署单元」从单卡变成集群是 2026 年旗舰模型常态。MoE 激活少省的是每 token 计算量,但所有专家权重都要装在显存里待命:省的是电费,不是卡数。
P/D 分离:前厅后厨彻底分区
prefill 是算力密集的「突发大活」,decode 是带宽密集的「持续细活」,混跑时两个 SLO 互相绑架——chunked prefill 只是止痛药,根治是分池部署:
代价是 KV 搬运的网络开销:请求短、KV 小时不划算——它是「大集群 + 长上下文」的解药,不是万能默认。
Mooncake:KVCache 从私产变公共资产
Kimi 面对海量长文档对话,把整个推理平台围绕 KVCache 重构(FAST'25 最佳论文):P/D 分池各自调度;全集群闲置的显存、内存、SSD 统一成分布式 KVCache 池,算过的前缀全集群共享复用;过载时按 SLO 主动拒载保住已接请求。真实负载下吞吐提升最高 5 倍级——「缓存换算力」在生产规模被验证。这是推理架构从单机思维到平台思维的分水岭。
| 方案 | 出品方 | 形态 | 一句话定位 |
|---|---|---|---|
| NVIDIA Dynamo v1.5.1 | NVIDIA | 开源编排层(1.0 于 2026-03 GTC GA) | vLLM 等引擎之上做 P/D 分池 + KV 感知路由;NVIDIA 全家桶首选 |
| llm-d | 红帽/谷歌/IBM 等 | K8s 原生开源项目 | P/D 分离、KV 感知调度做成 K8s 组件;已有 K8s 平台团队的自然选择 |
| Mooncake(开源版) | 月之暗面等 | KVCache 传输/存储组件 | 分层 KV 池参考实现,常与 vLLM/SGLang 组合 |
| 各云托管推理 | 各大云厂商 | 托管服务 | 上述能力逐步内置——客户不想自己拼就买这个 |
配套拼图是 KV 分层存储(显存→内存→SSD):热前缀留显存、温的下沉,命中即免 prefill——「存储换计算」。什么时候不用:客户规模没到「多机集群 + 长上下文」之前,单机 vLLM + chunked prefill 足够;过度架构是减分项,能讲出「什么时候不用」比「什么都用」更显专业。
核实 2026-10-20(Dynamo 稳定版 v1.5.1,2026-10-07),来源 NVIDIA 官方博客 / GitHub releases;Mooncake 见 arXiv 2407.00079。不可外推边界:分布式推理的收益随规模才显现,论文与厂商博客给的都是大规模场景的数字;小集群引入会先付一笔运维成本。
08生产化与排错#llminf-production
SLO 是推理服务的合同语言:先问场景,再报数字;离线任务只谈吞吐与单位成本。给客户的容量数字,四份证据(负载、性能、质量、成本)齐了再签。
| 场景 | TTFT 目标(P90) | TPOT 目标 | 备注 |
|---|---|---|---|
| 在线聊天/客服 | < 1s(力争 500ms) | 30–50 token/s | 体感生死线:首字慢即「卡」 |
| 代码补全(IDE 内) | < 300ms | 越快越好 | 对 TTFT 最苛刻的场景 |
| Agent 工具链(多步) | 单步 < 2s | 适中即可 | 步数多,累计延迟才是体验 |
| 文档生成/摘要 | < 3s 可接受 | 20–30 token/s | 用户预期本来就长 |
| 离线批处理 | 不设 | 不设 | 只谈吞吐与单位成本,夜间跑满 |
人的阅读速度约 5–10 token/s——TPOT 超过它太多,对阅读场景是浪费;同一集群分服务档,在线池保延迟、离线池吃剩余算力(错峰混部提利用率 20–30 个百分点)。
SLO 还得配一句:扛不住的时候先关哪扇门
推理服务的过载不长「宕机」的样子,它是全场一起变慢:显存里的 KV 位置被抢光,新请求排队、在跑的被抢占重算,吞吐曲线还挺好看,用户体感已经崩了。所以承诺容量时要连降级一起承诺,按这个顺序放闸:①准入控制——并发配额加按长度分级,超长请求单列,别让一个跑满窗口的请求把整机批处理能力挤瘦;②让离线让路——在线池保延迟,本来就吃剩余算力的离线池在高峰期把算力交出来;③主动拒载——按 SLO 拒掉新请求、保住已经接住的那批(Mooncake 在生产规模验证过的做法)。唯一不能选的是无限排队:队列越长越是把所有人一起拖垮,所以每个状态都要有最大驻留时间。
压测与成本心算
压测三口诀:真实流量、分位延迟、goodput 口径——用 vllm bench serve / AIPerf (现 v0.13.0,接棒 GenAI-Perf)这类懂 token 级计时的压测器,流量画像照生产日志配;看 P50/P90/P99 TTFT、P90 TPOT、整机吞吐、goodput(满足 SLO 的那部分吞吐);画「并发-延迟」曲线找拐点,报价按拐点的 70–80% 留余量。三类假数字要拦:只报均值不报 P99、拿饱和吞吐当可用容量、短输入压测冒充长文档场景。
要签的不是一个吞吐数,是四份证据:负载——流量画像照生产日志配,短问答和长文档分开报;性能——P50/P90/P99 的 TTFT、P90 的 TPOT,容量口径用 goodput 不用裸吞吐;质量——量化档、投机解码这些优化开关都要过业务评测集门禁(见第 5 节);成本——每百万 token 单价。四份必须绑同一个发布组合(模型、精度档、引擎参数、流量画像)一起出:其中任何一项改了,这份报告就作废——这就是「同口径对比」在推理侧的具体含义。
成本公式:每百万 token 成本 ≈ GPU 集群时租 ÷ 每小时产出。
| 算一遍 | 数 |
|---|---|
| 配置 | 2×H100 跑 70B FP8,时租按当期价(H100 级 neocloud 档 $2.89–3.99/卡·时) |
| 压测产出 | 按实测吞吐代入(旧「~3000 token/s」无一手实测源,已撤) |
| 折算 | 每百万 token 成本 = 时租 ÷ 每小时产出 |
| 托管 API 两档价 | 开源 70B 级约 $1 / 前沿旗舰 $12–50(输出) |
粗看自建便宜,但要摊利用率、运维人力、峰值冗余——盈亏线按当期卡价与 API 价代入算,不背固定区间。
H100 级时租
$2.89–3.99 / 卡(neocloud 档)
开源 70B 托管
约 $1 / 百万 token
前沿旗舰
$12–50 / 百万输出 token
2026-09-05 量级参考,报价以实测为准。
降本组合拳:按序叠加
| 招式 | 收益量级 | 代价/前提 | 机制在 |
|---|---|---|---|
| 连续批处理 + PagedAttention | 吞吐 2–4× | 用现代引擎即免费自带 | 第 3 节 |
| Prefix Caching | TTFT 3–10×(命中时) | 提示词结构要配合 | 第 3 节 |
| FP8 量化(权重+KV) | 显存减半、吞吐 +50–100% | 评测门禁;损失 0.5–2% | 第 5 节 |
| 投机解码(EAGLE-3) | 延迟 2–2.5× | 低并发收益大;需匹配草稿头 | 第 6 节 |
| P/D 分离 + KV 池 | goodput 数倍(大集群) | 多机 + 长上下文才划算 | 第 7 节 |
| 错峰混部在线/离线 | 利用率 +20–30pp | 调度与隔离要做好 | 本节 |
叠加不是简单相乘,但「现代引擎 + FP8 + prefix caching」三件套让多数场景的单位成本先降一半,是性价比最高的起手式。自建还是托管,三问定方向:数据能不能出去?月 token 量到没到量级?有没有人运维?——别替客户选立场,把两条路线的月账单摆出来,数字比立场有说服力。
按症状排错
这张表是网页版把全书速查从「按章翻」改成「按症状查」——机制都在上面各节,无新事实。
| 症状 | 最可能的原因 | 先试什么 |
|---|---|---|
| 首字慢(TTFT 高) | 输入长、prefill 排队,或前缀没复用 | prefix caching(稳定内容放开头);长知识改 RAG 检索;chunked prefill 参数 |
| 逐字忽快忽慢(TPOT 尖刺) | 长文档请求的 prefill 插队阻塞 | 确认 chunked prefill 开启、调块大小;规模够大上 P/D 分离 |
| 并发一高就排队 | 剩余显存装不下更多 KV——瓶颈是 KV 不是权重 | FP8 权重 + FP8 KV 腾显存;用上方计算器复核容量;超长请求做准入控制 |
| 吞吐低、GPU 利用率低 | 没拼上批(流量少或引擎不带连续批处理) | 换 vLLM/SGLang 类现代引擎;离线任务错峰填谷 |
| 账单高但延迟达标 | 全场开满档(旗舰模型 + 满预算 thinking) | 按难度分流;聊天开投机解码;核缓存命中率——三件套按序过一遍 |
SLO 与成本量级核实 2026-07-09、压测工具 10-20(AIPerf v0.13.0),来源 pypi/GitHub 与 2026 年中多方评测量级归纳(讲义中已标注「参考」口径)。
09现场高频追问#qa
只收会改变某个决定的问题——会改变技术方案、风险判断、验收方法、对客沟通或下一步行动。
每题标出它加入本题库的日期:2026-07-09 的来自讲义首版对练页,2026-07-12 的来自引擎版本复核,2026-07-20 的来自容量规划增补,2026-07-23 是按客户交锋场景补的三题(上线验收 / 扛不住怎么办 / 已经自己跑起来了)。
为什么模型回答是一个字一个字往外蹦?能不能一次出全文?2026-07-09
这是工作原理:每个词都依赖前面所有词算出来,本质串行,任何厂商都一样。流式输出反而是优点——首字几百毫秒就到,用户不用对着转圈等。
这题是推理话题的入口:答清自回归,后面 TTFT/TPOT、批处理、投机解码的讨论才有地基。
下一步 演示永远开流式;把对方的体验诉求翻译成 TTFT/TPOT 两个可测数字。
依据 推理是怎么跑起来的
我买了 8 张卡,为什么并发一高就排队?显存明明够装模型。2026-07-09
装下权重只是入场券,真正的座位是剩余显存里的 KV Cache:每路对话占一段、还随轮次膨胀。并发上限 ≈ 剩余显存 ÷ 每请求 KV。
「装得下模型 ≠ 服务得了客户」是本册最值钱的一句话——显存账本三大块里,瓶颈几乎总在 KV 不在权重。
下一步 用计算器按对方真实场景(模型/上下文/ 并发)当场算这笔账,再谈加卡还是量化。
128K 长上下文这么好,为什么按输入收费还这么贵?2026-07-09
长输入两头吃资源:读入时计算量随长度平方涨,读完后每 10 万 token 还占约 30GB 显存直到对话结束。定价反映真实成本——长知识用 RAG 检索,别整本塞窗口。
成本结构讲清了,「窗口大小竞赛」的营销话术就失效了——这题直接改变客户的架构判断。
下一步 对必须长驻的前缀上 prefix caching 只付一次;其余改检索喂料,两条路的月账各算一遍。
依据 长上下文为什么贵
1000 个用户都开 1M 窗口,要备多少张卡?2026-07-20
按「并发活跃请求 × 实际长度」算,不按「会话数 × 窗口上限」算——任一时刻绝大多数会话离线,占的只是可回收的缓存位。窗口上限是信用卡额度,不是预扣款。
把标称窗口当预留资源,容量估算会虚高几个数量级——这是容量规划里最贵的一个误解。反面也要防:一个真跑满 1M 的请求 ≈ 几十路普通请求,要做准入控制。
下一步 拉对方生产日志里的「并发活跃 × 实际长度」分布,用计算器出容量表,超长请求单列配额。
依据 窗口是容量,命中是复用
vLLM 和 SGLang 到底选哪个?给句准话。2026-07-12
看流量画像:请求间共享前缀多(多轮 Agent、固定模板、RAG 固定语料)或主力是 DeepSeek 系 → SGLang;否则 vLLM——生态最大、坑最少。两者 API 兼容,切换成本低。
引擎选型的判据是流量画像不是排行榜——这也是「绑标准接口、不绑引擎」防锁定承诺的底气。
下一步 拿真实流量各压一周再定;压测口径按第 8 节三口诀来。
依据 推理框架图鉴 · src-engines
量化会不会把模型「变笨」?我们业务敢用吗?2026-07-09
FP8 校准后通用任务损失约 0.5–2%,日常场景基本无感,是 2026 年生产默认。稳妥做法:拿业务评测集做上线门禁,通过就用——损失可测、可控,不是赌博。
损失不均匀才是要点:对话无感、算术翻车的反例说明,评测集覆盖面比「量化损失多少」这个笼统数字更重要。
下一步 面客核心链路 FP8 起步、内部工具再下探 INT4;评测集里补上数字计算类用例。
依据 量化
投机解码听着像「猜答案」,会不会导致质量下降?2026-07-09
不会。草稿只是候选,每个 token 都经大模型按自己的分布验证,数学上保证输出分布与大模型独跑完全一致——猜错的被拒绝重算,损失的只是那次加速机会。
「无损」是分布级相等不是「差不多」——这一点讲透,客户对默认开启的顾虑就消了。压测只有 1.5× 而非宣传 3×,通常是并发高或文本难预测,不是坏了。
下一步 在线聊天开、离线批量关;用接受率指标(引擎 metrics 端点)确认草稿头真的生效。
依据 投机解码
我们要支撑几千并发,直接堆卡行不行?2026-07-09
你们能承诺多少并发?2026-07-09
并发本身不是好指标——同样 1000 并发,128 token 短问答和 50K 长文档差百倍资源。按流量画像承诺三件事:TTFT/TPOT 的 P90 SLO、goodput 容量、超量时的降级策略。
裸并发数是最容易被拿来对比也最容易失真的数字;goodput(满足 SLO 的吞吐)才是能签进合同的口径。
下一步 把四份证据(负载/性能/质量/成本)绑同一发布组合做一轮压测,容量表按拐点七八成报。
依据 生产化
别家报价比你们便宜一半,是不是你们黑?2026-07-09
先对口径:同一精度(FP8 还是 INT4)、同一 SLO(P99 还是均值)、同一流量画像(短问题还是长文档)?三项对齐后价差通常就解释清了。
推理报价的三类假数字(均值掩尖刺、饱和吞吐当容量、短输入冒充长文档)都会让「便宜一半」凭空出现——识破口径差是这一册的看家本领。
下一步 提议按对方真实流量做一次同口径对比测试,用 goodput 谈单价。
依据 压测与成本心算
你们说的性能,拿什么证明?这个 POC 怎么算通过?2026-07-23
验收标准事前签、不事后争,而且签的不是「吞吐多少 token/s」这一个数,是四份证据绑同一个发布组合:照客户生产日志配的流量画像、P90 的 TTFT/TPOT 与 goodput 容量、业务评测集的质量门禁、每百万 token 单价。模型、精度档、引擎参数、流量画像任改一项,这份报告就得重跑。容量按「并发-延迟」曲线拐点的 70–80% 报,不按压出来的最大值。
推理压测最容易在口径上翻车,三类假数字当场就要拦:只报均值不报 P99、拿饱和吞吐当可用容量、短输入压测冒充长文档场景。拐点之后吞吐还在涨、延迟已经不可用,拿那一段当承诺就是给自己埋雷——所以能签进合同的口径只有 goodput,不是裸吞吐。
下一步 POC 启动会上先定三样:照生产日志配的流量画像、签字的 P90 SLO、质量门禁用的业务评测集;压测器用懂 token 级计时的(vllm bench serve / AIPerf),通用 HTTP 压测工具报的 QPS 交不了差。
高峰期扛不住了会怎样?会不会整个服务瘫掉?2026-07-23
不会瘫,但会先变慢——这是推理服务和普通 Web 服务最不一样的地方:它不是一刀切地拒绝服务,而是显存里的 KV 位置被抢光后全场一起排队,被抢占的请求还要重算。所以「扛不住」要连降级一起写进 SLO,按序放闸:先准入控制(并发配额加按长度分级,超长请求单列),再让离线让路(在线池保延迟,离线池把算力交出来),最后主动拒载——按 SLO 拒新请求、保住已经接住的那批。唯一不能选的是无限排队。
客户脑子里的「扛不住」是宕机,推理服务的形态却是劣化,而且劣化期间仪表盘往往还是绿的——平均吞吐很好看、P99 排队驻留 8 秒的服务,用户体感已经崩了。承诺并发时把降级策略一并说清,是这个承诺听起来不心虚的唯一办法。
下一步 让对方按调度验收那几项(队列驻留、批内 token、KV 压力、取消抢占率、用户 SLO)建监控,再把「超量时先拒谁、拒多久、谁有权拒」写成一条能演练的规则——演练过一次,事后就不用解释。
依据 扛不住的时候先关哪扇门 · 调度的本质是状态机 · Mooncake
我们自己用 Ollama 已经跑起来了,为什么还要再上一套?2026-07-23
先接住这句:那一步的价值是真的——模型能力、提示词、业务链路都验过了,而且因为大家都是 OpenAI 兼容 API,这些资产一行不改就能接过来。要换的只有运行时那一层,原因很具体:桌面引擎没有连续批处理,单人试用和多人并发根本不是一条曲线——一个人用体感很好,几十并发时整机吞吐差近一个数量级。这不是它做得差,它本来就是为本地单机优化的,两个世界各自最优。
这题答成「你们那套不行」,就把客户自己的技术团队推到了对立面——而他们做的这个验证,恰恰是项目能立项的原因。改叙成「验证阶段已经完成,进入服务阶段该换运行时」,对方从阻力变成盟友。判据留一句可复述的:演示用什么都行,容量结论只认带并发的压测。
下一步 拿他们现在这套跑一次并发压测(哪怕只压到 32 路),和现代引擎同口径对一次——差距是自己跳出来的,不用你说。
11来源与核实#sources
本页时效性数字均经联网核实后写入,完整登记(事实 × 核实日期 × 信源)见本模块 MANIFEST。核实窗口 2026-07-09 至 2026-08-01。引用任何数字前先核日期。
| 来源 ID | 信源 | 支持什么 | 不能支持什么 |
|---|---|---|---|
src-engines | GitHub releases / 2026 对比评测 | 四引擎版本号与格局(2026-08-01) | 版本号周级过期;对比结论依赖负载画像 |
src-quant | 2026 量化综述(vrlatech/sesamedisk) | 精度谱系地位与损失量级 | 具体任务的损失要用业务评测集实测 |
src-spec | 2026 实测综述(spheron/sesamedisk) | 投机解码加速量级与接受率口径 | 加速比不能脱离并发与文本类型外推 |
src-dynamo | NVIDIA 官方博客 / GitHub releases | Dynamo 版本与 GA 时间线 | 「最高 7×」为厂商基准,不能当生产承诺 |
src-mooncake | arXiv 2407.00079(Mooncake)等 | P/D 分离的生产验证与收益量级 | 论文负载与你的负载不同,量级参考 |
src-aiperf | pypi.org/aiperf / GitHub | 压测工具换代(AIPerf 接棒 GenAI-Perf) | 不涉及具体容量结论 |
src-cost | 2026 年中多方评测量级归纳 | 时租/吞吐/盈亏线的量级直觉 | 不能当报价——各云差异大,以实测与当期价格为准 |