Skip to content

Build token mask caches in worker-local maps - #793

Closed
Ubospica wants to merge 4 commits into
mlc-ai:mainfrom
Ubospica:perf/worker-local-mask-results
Closed

Ubospica wants to merge 4 commits into
mlc-ai:mainfrom
Ubospica:perf/worker-local-mask-results

Conversation

@Ubospica

Copy link
Copy Markdown
Collaborator

改动

词元是模型一次处理的文本单位。词元掩码是生成每个词元时用于排除不合法候选的布尔结果。原实现让所有工作线程在同一个结果表上加锁并插入。本改动让每个工作线程写入自己的结果表,全部任务完成后再把表节点移动合并,避免热点锁和串行内存分配。

本请求保持主分支原有的“每个状态一个任务”,没有带入历史实验中单独无明确收益的相同缓存键任务分组。本请求依赖 #790#791#792;当前分支保留这些前置提交,需要审查的独立提交是 4e7aeaa1

单项性能

结构标签是把触发文本、函数参数规则和结束文本组合起来的生成约束。JSON Schema 是描述 JSON 数据结构及字段约束的规则。允许词元集合生成时间是生成每一步筛选合法词元所需的平均时间。

输入 编译时间 允许词元集合生成时间
大型结构标签 213.632 -> 194.677 毫秒,减少 8.9% 10.971 -> 11.409 微秒,增加 4.0%
小型结构标签 5.565 -> 6.023 毫秒,增加 8.2% 12.049 -> 12.919 微秒,增加 7.2%
大型 JSON Schema 48.049 -> 48.783 毫秒,增加 1.5% 28.088 -> 27.970 微秒,减少 0.4%
小型 JSON Schema 8.240 -> 8.295 毫秒,增加 0.7% 69.419 -> 70.356 微秒,增加 1.4%

收益集中在大型结构标签;小型结构标签有明显回退,评审重点是是否应为任务数量增加启用阈值。

143.810 毫秒组合

历史完整候选在固定 400 函数结构标签、32 个编译线程和 15 个稳定样本下得到:

实现 完整编译中位数
XGrammar 完整优化组合 143.810 毫秒
llguidance 151.295 毫秒

llguidance 是另一个用于语法约束生成的实现,这里作为外部参考。XGrammar 快 7.485 毫秒,即 4.95%。

该历史组合包含 #781#783#784#785#790#791#792 和本请求对应的优化。历史候选还包含相同缓存键任务分组;后续四类输入实验没有证明该分组有明确收益,因此本请求已排除它。143.810 毫秒是完整组合的历史实测结果,不应解读为本请求单独或本请求只加 #783 的结果。

正确性

  • 四类正式输入中,优化前后接受行为差异为 0。
  • 使用严格警告检查完成发布构建。
  • 从构建产物进行不可编辑安装后,编译器和结构标签测试 21 项通过,21 项因需要额外模型词表而未执行。
  • 编译器测试使用合成词表逐步比较 1 线程和 8 线程的精确词元掩码。
  • 提交前格式检查全部通过。

Copilot AI review requested due to automatic review settings July 30, 2026 16:00

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants