困难推理系统推理系统PrefillDecode面试高频DeepSeek
Prefill 和 Decode 两个阶段有什么本质区别?分别是 compute-bound 还是 memory-bound?
10 0 0
参考答案
**Prefill(预填充)**:一次性并行处理整个输入 prompt,为所有输入 token 计算 K、V 建立 KV Cache,并算出第一个输出 token。因为可同时处理成百上千个 token,矩阵乘法规模大,GPU 计算单元被充分利用 → **compute-bound(计算受限)**。决定 **TTFT(首 token 延迟)**。 **Decode(解码)**:逐个生成 token,每步只处理 1 个新 token(batch 内每序列 1 个)。矩阵乘法退化成矩阵-向量乘,计算量小,但每步都要从 HBM 读取全部模型权重和 KV Cache → **memory-bound(访存受限)**。决定 **TPOT / ITL(token 间延迟)**。 **工程含义**: - 两阶段特性相反,混在一起调度会互相干扰:长 prefill 会阻塞 decode,抬高 TTFT。 - **Chunked Prefill**:把长 prefill 切块,与 decode 步交错执行,平衡 TTFT 和 TPOT。 - Decode 是 memory-bound,所以增大 batch(更多序列共享一次权重读取)能提升吞吐;也是投机解码、量化等优化的作用点。 - 有些系统做 **P/D 分离**(Prefill/Decode disaggregation),用不同实例分别服务两阶段。
讨论区(0)
还没有评论,来做第一个发言的人吧