ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大模型推理基础:Prefill、显存账本与核心指标

大模型推理基础:Prefill、显存账本与核心指标 这是「大模型部署学习路线」的第一课L1 推理基础。 学完这一篇你将能手算一个模型占多少显存、看懂 TTFT / TPOT / 吞吐这些指标从此调参不再靠感觉而是靠算。一、 推理的本质模型在算什么先说清楚一个最底层的事实大模型不会一次性想好整段回答它是逐个词token往外吐的。你发一句帮我写一首诗模型内部的真实过程是把你这句话切成一串 token约 10~20 个读完全部输入后算出第一个输出 token 的概率分布挑一个把这个 token 拼到输入末尾再算下一个token重复第 3 步直到吐出一个结束符号。所以一次推理 一次 Prefill处理全部输入 很多次 Decode每吐一个词算一次。理解不了这一点后面所有的优化技术都看不懂。因为它直接决定了为什么首 token 慢、后面快为什么显存里除了权重还要存别的为什么并发一高显存就爆。二、推理两阶段Prefill vs DecodePrefill预填充处理全部输入算出第一个词做什么把你的 prompt 全部喂进模型一次性并行计算所有输入 token 的中间状态。特点计算密集、可以并行一瞬间要算一大堆矩阵乘法。结果得到第一个输出 token同时把每个输入 token 的 K、V 向量缓存起来这就是后面的 KV Cache。为什么慢它要处理的是整个上下文比如几千个 token计算量 输入长度 × 模型大小。Decode解码逐 token 自回归生成做什么每步只基于上一个 token 缓存算出下一个 token。特点串行、只能一个一个来每步计算量小但无法并行。为什么慢生成 1000 个词就要串行跑 1000 步每一步的延迟TPOT决定总耗时。瓶颈Decode 阶段往往不是算力不够而是显存带宽不够——每步都要把整层权重从显存搬一遍但只算一个 token。一张表看懂两阶段的差异维度PrefillDecode处理对象全部输入 tokenN 个1 个新 token并行度高N 个 token 同时算低只能串行计算量大随输入长度线性增长小每步固定瓶颈算力compute-bound显存带宽memory-bound对应指标TTFT(Time To First Token)TPOT(Time PerOutputToken)直觉读完整张卷子逐字念答案一句话Prefill 决定你多久听到第一个字Decode 决定你多久听完一整段。三、显存账本显存 ≈ 权重 KV Cache 激活值把显存想象成一张记账卡跑一个模型时占显存的主要是三项显存 ≈ 模型权重 KV Cache 激活值第一项模型权重固定开销权重就是模型的参数本身。计算公式权重显存 参数量 × 每参数字节数不同精度下每个参数的字节数精度每参数字节7B 模型70B 模型FP324 字节28 GB280 GBFP16 / BF162 字节14 GB140 GBINT8 / FP81 字节7 GB70 GBINT4 / FP40.5 字节3.5 GB35 GB看两个结论一个 70B 的模型FP16 下光权重就要140GB——单张 80GB 的 A100/H100 根本放不下这就是为什么大模型要分卡张量并行或者量化降精度。7B FP16 14GB一张 24GB 的消费级显卡如 RTX 4090勉强能装这也是 7B 系列人人都能跑的原因。第二项KV Cache随对话变长、随并发暴涨这是最容易被忽略、也是上线后最先爆显存的一项。模型在 Decode 阶段每读一个 token都要拿它去和之前所有 token 算注意力。为了不把之前的 token 重新算一遍模型把每个 token 的 K、V 向量缓存了下来——这就是 KV Cache。单个请求的 KV Cache 大小KV Cache每请求≈ 2 × 层数 × hidden_size × 序列长度 × 每参数字节数以 7B 模型假设 32 层、hidden4096、FP16为例每个 token 大约要占2 × 32 × 4096 × 2 字节 ≈ 512 KB / token换算成不同上下文长度的单请求 KV Cache上下文长度单请求 KV Cache2K2048约 1 GB8K8192约 4 GB32K32768约 16 GB128K131072约 64 GB如果同时有 N 个请求在跑并发KV Cache 还要再乘 N并发数8K 上下文 × 并发32K 上下文 × 并发416 GB64 GB832 GB128 GB1664 GB256 GB这就是为什么长上下文 高并发是显存杀手128K 上下文、16 并发时KV Cache 轻松上千 GB比权重本身还大得多。第三项激活值瞬时中间量前向计算过程中每一层的中间结果激活值也要占显存。它的特点是大可能和权重一个量级甚至更大瞬时算完当前层前面的就可以释放由框架管理算子融合、激活重计算activation checkpointing就是为了压缩它。对使用者来说激活值一般不用精确手算——知道它存在、理解它为什么波动即可。真正要手算的是权重 KV Cache。进阶如果模型是 MoE 架构如 DeepSeek呢前面算的都是稠密模型每个 token 用全部参数。现在很多大模型——比如 DeepSeek-V3——改用MoE混合专家Mixture of Experts架构把一个大 FFN 拆成一堆小专家每个 token 只唤醒其中少数几个top-2。这让显存账本出现两个不同的参数量总参数决定权重显存部署时所有专家必须全部装进显存 激活参数决定算力每个 token 实际只计算这一小部分对比项稠密模型例MoEDeepSeek-V3总参数67B671B每 token 激活参数67B37B权重显存FP8 约67 GB671 GB每 token 算力需求高低≈37B 水平对三项账本分别意味着权重开销变大所有专家参数必须常驻显存。DeepSeek-V3 共 671B 参数FP8 也要约 671GB单卡根本放不下——这就是为什么 MoE 模型天生要多卡部署并引出专家并行EP。KV Cache完全不变KV Cache 只跟注意力层层数、hidden_size有关MoE 换掉的只是 FFN。所以前面那套 KV Cache 公式对 MoE 模型照用不误。激活值反而更小每层只算 2 个专家中间结果比全量 FFN 小得多。一句话MoE 是用显存换算力——权重开销大、KV Cache 照旧但每 token 算得快、吞吐高。这也是为什么 DeepSeek 这类 MoE 模型部署时贵的在显存省的在算力。一页纸总结显存账本显存账本 权重固定随模型/精度变 KV Cache随上下文长度 × 并发数变最需要监控 激活值瞬时框架自动管理 例子稠密 7B FP16权重 14GB8K 上下文、8 并发时 KV Cache 约 32GB → 需要显存 ≈ 14 32 激活 ≈ 50GB 左右单卡 4090 装不下 MoE 模型如 DeepSeek-V3权重按总参数 671B 算≈671GB FP8 KV Cache 公式不变但每 token 只算 37B算力省、吞吐高四、四个核心指标TTFT / TPOT / 吞吐 / 显存占用看懂压测报告、评估部署方案就看这四个数。它们正好对应前面讲的原理。1. TTFTTime To First Token首 token 延迟定义从发出请求到收到第一个输出 token 的时间。对应Prefill 阶段处理全部输入。直觉打开对话页面后要等多久才开始打字。影响因素输入长度、模型大小、并发争抢。合理范围一般希望 1~2 秒长文档分析场景可以放宽。2. TPOTTime Per Output Token每输出一个 token 的耗时定义生成阶段每吐一个 token 平均耗时毫秒级。对应Decode 阶段逐字生成。直觉开始打字后每隔多久蹦出一个字。影响因素显存带宽、模型大小、是否量化。换算TPOT 100ms 时每秒生成 10 个 token2000 字的回答约 2000 token要 200 秒。3. 吞吐Throughput系统每秒能产出多少 token定义整个服务单位时间产出的 token 总数tokens/s。直觉这是产能不是速度——系统总的产出能力。关键吞吐和单用户延迟往往打架并发越高、吞吐越高但每个用户变慢。调优就是在两者间找平衡。4. 显存占用显存利用率定义权重 KV Cache 激活值占了多少显存。作用决定你最多能开多少并发。直觉显存是硬约束——权重装不下就跑不起来KV Cache 装不下就只能砍并发或砍上下文。四指标速查表指标回答什么问题对应阶段越差说明TTFT多久听到第一个字Prefill输入太长 / 算力不足TPOT每蹦一个字要多久Decode带宽瓶颈 / 模型太大吞吐系统总共能产多少整体并发设计 / 批处理策略差显存能同时服务多少人整体上下文太长 / 并发太高怎么用这四个指标调参不再靠感觉显存不够 → 砍 KV Cache限上下文 / 限并发或量化INT8/INT4 首 token 慢 → 看 TTFT输入过长并发过高 生成太慢 → 看 TPOT换更高带宽显卡量化投机解码 整体产能低 → 看吞吐提高并发 / 开启 Continuous Batching五、学完这一层你能做什么手算显存拿到一个模型5 分钟算出权重多少、KV Cache 涨多快、单卡装不装得下预判并发上限显存剩多少除以单请求 KV Cache就知道能开几个并发看懂压测报告别人给的 TTFT / TPOT / 吞吐数字你一眼能看出系统瓶颈在 Prefill 还是 Decode调参有依据vLLM 里的max-model-len、--gpu-memory-utilization、量化选项每个参数背后都是这份账本。一句话总结推理 一次 Prefill 无数次 Decode显存 权重固定 KV Cache随上下文和并发暴涨 激活值瞬时TTFT 管第一句话TPOT 管说话速度吞吐管总产能显存管能装多少人。把这张账本刻进脑子里大模型部署的大门就为你打开了。
返回列表