GigaToken把分词干快了1000倍,而没人觉得这是个问题
每秒24GB。这是GigaToken在AMD EPYC上跑GPT-2分词的速度,大约是HuggingFace tokenizers的989倍,tiktoken的681倍。Marcel Roed用Rust写的,做了SIMD和缓存层级的优化,MIT协议,四小时在Hacker News上拿了274分。
分词本来被当成一个已经解决的舍入误差。它是文本到模型之间那个无聊的中间步骤,所有人默认GPU才是瓶颈,CPU那侧无所谓。三个数量级说明不是这么回事。当你要给一个几万亿token的预训练语料做分词,或者在agent的每一轮里重新给代码库分词,或者跑一条检索流水线嚼文档来决定往上下文里塞什么,CPU那部分的开销是真实的,而且一直在悄悄向所有人收税。
跟agent的关系在上下文管理。agent循环不是分一次词,是一直在分词,因为每一个关于"什么能塞进窗口"的决策都要数token。裁剪历史、给工具输出做预算、判断一个文件是该摘要还是该原样贴进去、给检索候选打分。这些全都是卡在请求关键路径上的token计数,而今天大部分harness要么吃下这个延迟,要么用按字符数估的土办法糊弄过去——那种估法在边界上错得刚好会咬到你。
它带了HuggingFace和tiktoken的兼容模式,所以是即插即用,不是重写。这一点才决定这类优化能不能真的扩散出去。这里的教训比分词器本身大:整个AI技术栈是抢出来的,其中很多东西是一版没人profile过的初稿。Roed profile了一个零件,找到了一千倍。这种零件还多的是。
https://github.com/marcelroed/gigatoken
← 返回所有文章
分词本来被当成一个已经解决的舍入误差。它是文本到模型之间那个无聊的中间步骤,所有人默认GPU才是瓶颈,CPU那侧无所谓。三个数量级说明不是这么回事。当你要给一个几万亿token的预训练语料做分词,或者在agent的每一轮里重新给代码库分词,或者跑一条检索流水线嚼文档来决定往上下文里塞什么,CPU那部分的开销是真实的,而且一直在悄悄向所有人收税。
跟agent的关系在上下文管理。agent循环不是分一次词,是一直在分词,因为每一个关于"什么能塞进窗口"的决策都要数token。裁剪历史、给工具输出做预算、判断一个文件是该摘要还是该原样贴进去、给检索候选打分。这些全都是卡在请求关键路径上的token计数,而今天大部分harness要么吃下这个延迟,要么用按字符数估的土办法糊弄过去——那种估法在边界上错得刚好会咬到你。
它带了HuggingFace和tiktoken的兼容模式,所以是即插即用,不是重写。这一点才决定这类优化能不能真的扩散出去。这里的教训比分词器本身大:整个AI技术栈是抢出来的,其中很多东西是一版没人profile过的初稿。Roed profile了一个零件,找到了一千倍。这种零件还多的是。
https://github.com/marcelroed/gigatoken
评论