Prhub

#30643 Fix TiktokenTokenizer missing num_special_tokens_to_add

原始 PR 作者 sushildubey171 合并时间 2026-07-10 20:37 文件变更 1 提交数 3 评论 3 代码增减 +4 / -0

执行摘要

为 TiktokenTokenizer 添加 num_special_tokens_to_add 方法

TiktokenTokenizer 缺少 num_special_tokens_to_add 方法,导致 sglang.bench_serving 在默认 --dataset-name random(文本模式)下调用该方法时崩溃(AttributeError)。该问题由 issue #30640 报告。

PR 变更简单明了,值得快速合并。对于使用 Grok-2 等模型的团队,此修复解决了 benchmarking 流程中的阻断性 bug,建议在下一个版本中包含。

讨论亮点

Reviewer mmangkad 建议精简注释:将原本多行的注释缩减为单行(# tiktoken's encode adds no special tokens (add_special_tokens is ignored).)。提交者 sushildubey171 采纳并更新了代码。

实现拆解

  1. python/sglang/srt/tokenizer/tiktoken_tokenizer.pyTiktokenTokenizer 类中,于 decode 方法之后新增 num_special_tokens_to_add 方法。
  2. 该方法接受任意位置参数和关键字参数(兼容不同调用签名),并返回 0——因为 tiktoken 的 encode 不会添加特殊 token(add_special_tokens 被忽略)。
  3. Review 中 reviewer mmangkad 建议精简注释,提交者接受并将多行注释简化为一行。
文件 模块 状态 重要度
python/sglang/srt/tokenizer/tiktoken_tokenizer.py tokenizer modified 5.29

关键符号

num_special_tokens_to_add

关键源码片段

python/sglang/srt/tokenizer/tiktoken_tokenizer.py core-logic

核心变更文件:新增 num_special_tokens_to_add 方法解决缺失属性导致的崩溃。

# 文件 : python/sglang/srt/tokenizer/tiktoken_tokenizer.py
# 在 decode 方法之后插入的新方法def num_special_tokens_to_add(self, *args, **kwargs) -> int:
    # tiktoken's encode adds no special tokens (add_special_tokens is ignored)
    # 因此无需预留长度预算;此方法用于兼容 benchmark 调用方
    return 0

评论区精华

精简注释 style

mmangkad 建议将多行注释精简为单行 `# tiktoken's encode adds no special tokens (add_special_tokens is ignored).`

结论:提交者接受建议并更新了注释。 · 已解决

风险与影响

本次变更为纯新增方法,不修改现有逻辑。返回 0 是安全的,因为 tiktoken 的 encode 确实不添加 special tokens。风险极低,不会引入回归。

直接影响:修复了 Grok-2 等模型在使用 bench_serving 时的崩溃问题,使这些模型能够正常进行基准测试。间接影响:其他可能调用 num_special_tokens_to_add 的代码路径(如随机数据集采样器)也受益。影响范围限于 TiktokenTokenizer,不影响其他 tokenizer。

关联 Issue

#29853 bugfix for npu Grok2 model --detokenizer without all special ids
#30640 [Bug] TiktokenTokenizer missing num_special_tokens_to_add breaks bench_serving random dataset (Grok-2)

完整报告

参与讨论