Baseten 推出了一个它声称在 Kimi K3 上快 18 倍的 Rust 分词器

Michael Feil 的新软件包旨在解决随着代理提示接近 Kimi K3 的一百万令牌限制而日益加剧的 CPU 瓶颈。

By · Published

Primary source: X

Why it matters

Million-token agent workloads can move latency away from the GPU and into prompt preparation. Baseten is competing by optimizing that overlooked CPU path and releasing the code for engineers to test.

Illustration of Baseten's Rust tokenizer speeding token processing for the Kimi K3 model, shown as streams of data feeding a CPU labeled Kimi K3.

Baseten 的模型性能工程师 Michael Feil (@feilsystem) 在 7 月 27 日 于 X 的一条推文线程中 表示,他发布了 Baseten Tokenizer,这是一个以 Rust 为后端的包,旨在减少为 Moonshot AI 的 Kimi K3 模型准备长提示所需的 CPU 时间。

该包名为 basetenkenizer,在 Baseten 发布其结果时可通过 PyPI 以及 Hugging Face 上的 Kimi K3 tokenizer repository 获取。PyPI 将 Feil 列为经过验证的维护者,并显示版本 0.2.8 于 7 月 27 日上传,此前在 7 月 26 日已有两次发布。

Feil 是一名在旧金山工作的机器学习工程师,拥有慕尼黑工业大学的计算机科学硕士学位。根据 他个人网站,他此前在 Gradient.ai 从事模型训练工作,并创建了 Infinity,一个用于嵌入推理的开源框架。Baseten 的作者页面将他标识为一名 model performance engineer,其早期工作包括嵌入吞吐量、感知缓存的路由和 Kimi K2.5 的服务。

Baseten 由 CEO Tuhin Srivastava、CTO Amir Haghighat、首席科学家 Phil Howes 和 Pankaj Gupta 于 2019 年创立。创始团队围绕他们在部署机器学习系统时遇到的一个问题构建 Baseten:训练出有用的模型可能比在生产流量下运营它更容易。Baseten 现在出售托管推理、后训练和模型优化服务,这将 Feil 的分词器工作直接纳入这家旧金山公司的核心产品主张。

当令牌数量达到一百万时,分词成本变得明显

分词器(tokenizers)将文本和结构标记转换为模型处理的数值 token ID。与将提示加载到 GPU 并生成答案相比,这一步通常耗时较少。Kimi K3 改变了这种平衡,因为 Moonshot AI 的 model card 指定了 1,048,576 个令牌的上下文窗口、160,000 令牌的词汇表,以及一个混合专家(mixture-of-experts)架构,总参数量为 2.8 万亿,活跃参数为 1040 亿。

代理(agent)工作负载可能会反复将文档、工具输出、代码和中间状态追加到该上下文中。前缀缓存可以减少处理模型已见材料所需的 GPU 工作,结果使得 CPU 端的分词在首次返回 token 的时间中占比更大。

在一篇 于 7 月 27 日发布的技术文章 中,Baseten 表示 Basetenkenizer 使其完整的 Kimi K3 服务路径在短序列上比 OpenAI 的 tiktoken 快超过 6 倍,在百万令牌输入上最多快 18 倍。这些数据是 Baseten 的基准测试结果,而非独立验证的结果。

Baseten 的实现用一次本地 Rust 调用替换了一个在 Python 中遍历提示片段的路径。该分词器接受类型化的 (text, allow_special) 段,执行预分词(pre-tokenization)和字节对编码(byte-pair encoding),并返回一个与 NumPy 兼容的 token 数组,而不是先创建一个可能包含多达一百万个整数的 Python 列表。

片段(segment)的区分对于提示完整性是必要的。Kimi K3 在结构化部分中使用诸如 <|open|><|close|> 的字符串作为控制标记。同样字符出现在用户文本中时必须保持为普通文本。Baseten 表示,Basetenkenizer 在保持该边界的同时保留了之前服务路径生成的 token ID。

Feil 在他的 X 线程中表示,大多数竞品库在这项工作中不会使用超过一个 CPU 内核。Basetenkenizer 使用大小为 8 或 16 个工作线程的 Rayon 线程池,并限制并发,以便重复的预分词可以在字节对编码之前产生更多缓存命中。

Baseten 的最快主张具有狭窄的适用范围

Baseten 最广泛的主张需要加以限定。基准测试使用了一个呈现好的 Kimi K3 对话,包含 54 个类型化片段,并在 52 个固定的 Intel Xeon vCPU 上运行。Baseten 为每一轮测量生成了一个新的确定性语料,防止整个提示从热分词器缓存中提供服务。Tiktoken 的公共 encode 调用是单线程的,而 Basetenkenizer 则在可用的 CPU 集上并行化。

Baseten 还报告说,在 10,000 个令牌时 gigatoken 更快,并且 gigatoken 在离线文件分词时仍然是更好的工具。在一百万令牌时,Baseten 在其在线服务测试中使 Basetenkenizer 比 gigatoken 快 1.41 倍。可支持的结论比 Feil 帖子中“世界最快”标签更为狭窄:Baseten 测量的是针对已被呈现为类型化片段以用于在线推理的 Kimi K3 提示的最快完整路径。

这种专业化契合 Baseten 在竞争激烈的推理市场中的定位。GPU 容量可从越来越多的平台获得,推动供应商在加速器周边的软件上竞争:调度器、缓存、内核、网络,现在还有分词。对新发布的开源权重模型提供零日支持也让 Baseten 有机会在工程团队选择其它服务栈之前抢占工作负载。

Baseten 在这场竞争中拥有可观的资本。6 月 22 日,Baseten 宣布完成 15 亿美元的 F 轮融资,估值为 130 亿美元,由 Altimeter Capital、Conviction Partners 和 Spark Capital 领投,Sands Capital 和 Wellington Management 作为共同领投。Baseten 当时表示,收入在前一年增长了 20 倍,推理量增长了 40 倍,但 Baseten 并未用底层财务报表或绝对数值来支持这些数据。

Basetenkenizer 采用 MIT 许可证,支持 Python 3.10 或更高版本。其发布将 Baseten 内部的一部分 Kimi K3 优化工作转化为其他推理工程师可以在自己的硬件上安装、基准测试并挑战的包。

Reader comments

Conversation for this story loads after sign-in.