关系约束也能当草稿:FactorSpec 让结构化输出每步多验 10.5 个 token,记录还全部合法
核心概要
结构化输出里,字段之间的关系本可决定大量 token,但服务引擎的草稿器只从提示或学习头猜,语法掩码又只管语法,模型因此常写出违反关系的记录。FactorSpec 把 JSON Schema 与关系编译成因子图,用精确可行性检查把被约束唯一确定的 token 当作必然草稿,并按每个请求单独选择验证宽度。在 SGLang 中,其草稿在行程规划上每步最多接受 10.5 个 token,是最快 n-gram 草稿形状的至多 1.9 倍,解码比按负载调优的投机器快至多 1.43 倍,代价约等于一个语法掩码。
深度剖析
结构化记录中由字段关系唯一确定的 token 现在可以直接作为投机解码的草稿提交,目标模型一次前向就能整段验证,而不必由模型逐字生成再碰运气满足关系。 此前的服务引擎从提示或学习到的草稿头提出候选,语法掩码只保证语法合法;在 NATURAL PLAN 的三到七城市行程问题上,Qwen3-8B 只有 10% 写出合法行程,点名被违反关系的重试也只到 14%。 在 SGLang 中,行程规划上每个验证步最多接受 10.5 个 token,是最快 n-gram 草稿形状的至多 1.9 倍;在 8、64、128 个在途请求下,它比按负载调优的投机器快至多 1.43 倍,在工具调用上为 1.01 至 1.12 倍。
做法是把记录声明为 JSON Schema 加一组字段间关系,编译成因子图,由精确可行性检查判断哪些位置只剩一个可选值,这些位置就构成必然被接受的草稿段。 精确检查比语法掩码重得多,放在调度线程上会拖慢同一步的每个请求;单个字段打开在会议规划上第 99 百分位可达 10 毫秒。 约束服务把每个请求的会话放在调度进程之外的八个工作进程中,在前向计算进行时把掩码行写入共享内存;掩码吞吐在 64 个在途请求以内为 XGrammar 的 0.95 至 1.07 倍,代价是每个 GPU 约八个主机核心。
因为每条记录同时合法,可用产出的提升大于速度提升:相对仅语法基线,每 GPU 秒服务的合法规划记录最多为其 13.9 倍。 求解器同样能保证记录合法,但答案仍要逐 token 进入语法引擎;在黄金答案遵循固定目标时,求解器的会议安排更常匹配黄金。 相对求解器,FactorSpec 每 GPU 秒服务的合法行程与会议安排为其 1.28 至 1.46 倍;在会议规划上求解器的最早安排匹配黄金的比例为 46% 至 56%,FactorSpec 为 14% 至 16%。
启示与展望
演示范围是 SGLang 0.5.16 与 vLLM 0.21.0 上的六个工具调用与规划负载,模型为 Qwen3-8B、Qwen3-1.7B、Qwen3-14B 和 Llama 3.1 8B,硬件为两块 RTX A6000 与 64 核主机,在途请求最多 128 个。声明要求有限域和表预算,新关系种类需要服务端扩展,写出正确的关系由应用方负责。
主机工作藏在设备步骤之后这一结论,是在一种 GPU、最多 128 个在途请求下测得的,更快的 GPU 会缩短步骤,可能需要每 rank 更多工作进程。验证宽度取整会让 64 条贪心会议记录中有 1 至 4 条不同,但都合法;同一单元三次运行重复相同提示,几个百分点的速度领先视为持平。自由文本占比上升时领先收窄,行程规划加 128 token 备注时从 1.77 倍 XGrammar 降到 1.13 倍。
