news 2026/10/28 21:52:16

Chunked Prefill:切的是调度预算,不是跨 query 复用 Softmax

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Chunked Prefill:切的是调度预算,不是跨 query 复用 Softmax

长 prompt 会占用一次较大的 prefill 工作,交互请求的 decode 则更在意连续输出间隔。Chunked Prefill 的目标是把长 prefill 分成可调度的小块,与 decode 共享批次预算。它没有允许不同 query 沿用同一个 Softmax 归一化状态。

vLLM 的优化文档说明 V1 在可用时启用 chunked prefill,并优先安排 decode,剩余 token 预算再填 prefill。预算大小影响 TTFT、ITL 与吞吐,具体折中仍需按工作负载测量。

decode 优先使用预算,长 prefill 通过后续批次逐段继续。

from collections import deque def schedule(decode_ids,prefills,budget): if budget<=0: raise ValueError("positive budget required") if len(decode_ids)>budget: raise ValueError("toy policy requires decodes to fit") chosen=[("decode",x,1) for x in decode_ids] left=budget-len(decode_ids) while prefills and left: request,remaining=prefills.popleft() if remaining<=0: raise ValueError("positive prompt remainder") take=min(left,remaining) chosen.append(("prefill",request,take));left-=take if take<remaining: prefills.appendleft((request,remaining-take)) return chosen q=deque([("long",9)]) a=schedule(["d1","d2"],q,6) assert a==[("decode","d1",1),("decode","d2",1),("prefill","long",4)] assert list(q)==[("long",5)] b=schedule([],q,6) assert b==[("prefill","long",5)] and not q print("token-budget accounting and prompt continuation passed")

这段调度模型只扣 token 预算,没做 Attention,也未建模设备耗时。它把 decode 必须先全部装下作为简化前提;真实系统还要处理 decode 过载、公平性与准入,不能让等待 prompt 永远饥饿。

一个 query 的 KV 分块,和多 query 分块不是一回事

在线 Softmax 可以合并同一 query 面对不同 KV 块的统计量。下一个 query 的分数变了,最大值与分母也要重新计算。把上一个 query 的状态带过去,得到的已经不是标准 Attention。

切分 prefill 时,因果位置、前序 KV 可见性和块边界都要保留。缓存分配可能在块间增长,取消请求还需清理尚未执行的部分。调度计数正确只是第一步。

预算守恒之外,还有请求进展

示例先安排两个 decode,再从长 prompt 取四个 token,因此剩余 prompt 从九变成五。下一轮没有 decode 时,五个 token 全部进入 prefill。这个过程检查的是已经调度量与剩余量相加仍等于原始需求,不涉及设备一轮能多快完成。若把 token 数直接乘一个固定耗时,便额外引入了未经测量的性能模型。

真实调度器还要检查每个请求是否在前进。持续有 decode 到来时,prefill 可能一直得不到预算;持续有长 prompt 时,已有 decode 的输出间隔又可能变差。可以采用准入、等待时间或其他公平性策略,但需要明确目标,并在负载变化时检查,不存在一个适用于所有服务的固定预算。

请求取消会影响队列里的剩余量。某个 prefill 已被切出但尚未提交时,取消可以直接移除;已经提交后则需要等待实际完成或按设备能力处理。不能把剩余计数清零,就假定相应 KV 与工作区已经空闲。调度状态和执行完成是两份不同信息。

形状 bucket 又会引入额外工作。一个批次的有效 token 数与实际填充后的执行形状未必相等;调度日志最好同时记录这两者,便于解释小批次为什么没有按预期降低成本。调预算之前先观察真实分布,通常比凭一个平均 prompt 长度选择参数更可靠。

预算单位必须统一。decode 请求通常贡献本轮需要处理的新 token,prefill 请求贡献本轮选中的 prompt token;不能在一个字段里混用请求数与 token 数。多模态输入还可能引入不同的展开或计算成本,简单 token 预算不应被当成完备成本模型。调度器可以逐步增加更准确的估计,但每次增加规则,都应保留预算不超限、请求不重复调度和取消后不再提交等基本检查。明确这些不变量,才能让性能参数调整具有稳定边界。

调度记录应同时保存请求身份与有效 token 数,才能复查一次请求是否被遗漏、重复或过早移出队列。

2026 年 10 月的 SGLang TPU 后端说明还介绍了按形状 bucket 缓存编译程序。预算、padding 与编译形状会相互影响,不能只把 chunk 大小调得越小越好。本文没有测 GPU、TPU 或服务延迟,输出只证明示例中的预算守恒。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 21:52:02

考研数学历年真题1987-2026数一数二数三PDF解析与三轮刷题指南

考研数学这条路上&#xff0c;我见过太多人把时间砸在各种新出的习题册和模拟卷上&#xff0c;最后分数卡在一个不上不下的位置。真正拉开差距的&#xff0c;往往不是谁刷的题多&#xff0c;而是谁把考研数学历年真题这套东西吃透了。标题里提到的一千九百八十七到二零二六年、…

作者头像 李华
网站建设 2026/10/28 21:50:45

具身智能的任务规划与记忆机制技术解析

1. 具身智能的任务规划与记忆机制解析在机器人学和人工智能领域&#xff0c;具身智能(Embodied Intelligence)正掀起一场认知革命。不同于传统AI仅处理抽象数据&#xff0c;具身智能强调智能体必须通过物理身体与环境交互来获得真正的理解能力。这就如同婴儿通过抓握、爬行等身…

作者头像 李华
网站建设 2026/10/28 21:50:08

MCU从架构到选型:嵌入式开发实战避坑指南

微控制器这个词&#xff0c;很多刚入行的朋友第一次听到会觉得有点距离感&#xff0c;其实它就在你身边——家里的电饭煲、洗衣机的控制板、车里的车窗升降模块、手里那把无线键盘&#xff0c;里面都藏着一颗甚至好几颗 MCU。我做了十来年嵌入式相关的工作&#xff0c;从最早用…

作者头像 李华
网站建设 2026/10/28 21:49:48

话疗的具象化:拆解对话中的接收、定位、重构与落地

1. 当“话疗”被拆成零件&#xff1a;一个被说滥了却很少被拆透的概念“话疗”这个词&#xff0c;这两年出现的频率高得有点离谱。朋友之间调侃叫话疗&#xff0c;心理咨询被戏称为话疗&#xff0c;连楼下大爷开导失恋的邻居都能被冠上“话疗大师”的名号。词是火了&#xff0c…

作者头像 李华
网站建设 2026/10/28 21:48:54

SPA安全测试:核心挑战与解决方案

1. 现代单页应用安全测试模型概述单页应用&#xff08;Single Page Application&#xff0c;SPA&#xff09;已经成为现代Web开发的主流架构模式。与传统多页应用相比&#xff0c;SPA通过在单个HTML页面中动态加载内容&#xff0c;提供了更接近原生应用的流畅用户体验。然而&am…

作者头像 李华
网站建设 2026/10/28 21:46:57

微信小程序旅游攻略平台开发实战:Python+Django全栈架构

1. 项目概述&#xff1a;旅游攻略互动平台的现代解法去年帮朋友改造过一个传统旅行社的线上系统&#xff0c;发现旅游行业的信息交互存在明显的断层——游客的真实体验沉淀不下来&#xff0c;而商家推送的内容又缺乏可信度。这正是我们做这个微信小程序Python后台的旅游攻略分享…

作者头像 李华