GigaToken: 高性能语言模型分词
GigaToken 的分词速度比 HuggingFace 快多达 1000倍
GigaToken 是一个高性能语言模型分词器,旨在以每秒千兆字节(GB/s)的速度处理文本数据。它可以作为现有分词器的直接替代品,相比 HuggingFace 的 tokenizers 和 OpenAI 的 tiktoken(两者均已用多线程 Rust 实现),提供巨大的吞吐量提升。
性能基准测试
GigaToken 在各种 CPU 架构上展示了显著的加速效果,包括 x86(AMD EPYC、Ryzen)和 ARM(Apple M4 Max)。
在双路 AMD EPYC 9565(144 核心)上,GigaToken 在 owt_train.txt 数据集上实现了以下吞吐量:
| 分词器 | GigaToken 吞吐量 | HF 分词器吞吐量 | 相对 HF 的加速倍数 |
|---|---|---|---|
| GPT-2 | 24.53 GB/s | 24.8 MB/s | 989× |
| Phi-4 | 24.00 GB/s | 29.9 MB/s | 801× |
| Llama 3 / 3.1 / 3.2 | 22.15 GB/s | 48.5 MB/s | 457× |
| DeepSeek V3 / R1 / V4 | 19.69 GB/s | 26.2 MB/s | 750× |
| Qwen 2 / 2.5 | 19.12 GB/s | 27.7 MB/s | 691× |
在 Apple M4 Max(16 核心)上,加速效果依然显著,GPT-2 达到 8.79 GB/s(比 HF 快 1,268倍),OLMo 2/3 达到 7.56 GB/s(比 HF 快 1,299倍)。
核心技术优化
GigaToken 通过专注于分词管道中计算成本最高的部分来实现这些速度:
- SIMD 加速的预分词:GigaToken 用高度优化的 SIMD 实现替换标准的 Regex 引擎(通常用于预分词)。这减少了分支,并提高了每个时钟周期处理的字节数。
- 高级缓存层次:该项目实现了一个高度优化的预token映射缓存系统。通过高效查找之前编码的单词,GigaToken 避免了在长尾分布中频繁出现的 token 的冗余计算。
- 最小化 Python 开销:GigaToken API 允许 Rust 实现直接从文件读取数据,绕过了在两种语言之间传递大型 Python 数据结构的开销。
- 线程独立性:实现最小化线程间通信,以确保在高核心数 CPU 上实现最大并行性。
使用与集成
兼容模式
此模式使 GigaToken 能够作为 HuggingFace 或 Tiktoken 的直接替代品。虽然它确保与原始库的输出完全匹配,但这种兼容性会带来性能代价,意味着用户无法看到完整的 1000x 加速,但仍会获得显著提升。
import gigatoken as gt
hf_tokenizer = ...
tokenizer = gt.Tokenizer(hf_tokenizer).as_hf()
tokens = tokenizer.encode_batch(["This is a test string", "And here is another" ])
GigaToken API(最大性能)
为了获得最大吞吐量,原生 API 允许 Rust 直接处理文件 I/O:
import gigatoken as gt
tokenizer = gt.Tokenizer("Qwen/Qwen3-8B\)) # Note: The original had a missing closing quote? Actually original: gt.Tokenizer("Qwen/Qwen3-8B\)). We'll keep as is.
file_source = gt.TextFileSource(["owt_train.txt"], separator=b"<|endoftext|>\)oftext|>\)
tokens = tokenizer.encode_files(file_source)
局限性和已知问题
- SentencePiece 支持:基于 SentencePiece 的分词器(例如某些 Google 和 BERT 风格的模型)没有 BPE 分词器那样经过高度优化,吞吐量较低。
- WordPiece:目前不受支持。
- 操作系统支持:Windows 尚未进行广泛测试;建议 Windows 用户使用 WSL。
- Python ABI:当前使用 ABI3 进行 Python 迭代相比特定版本的 CPython API 更慢。计划对每个 Python 版本进行特化,以进一步降低开销。
社区视角和使用案例
虽然一些评论者指出,分词通常仅占总推理时间的很小部分(通常 <0.1%),但社区强调 GigaToken 对离线数据准备至关重要。
"当为训练语料库对 TB 级文本进行分词时,这里的加速可能真的在为您节省时间(和金钱?)。在弄清楚和调整数据集时,您将获得更快的迭代周期。"
其他开发者将这一工程壮举与 SimdJson 相提并论,指出加速是通过创造性编程和底层优化实现的,而不仅仅是针对特定硬件配置。
SUMMARY: GigaToken 是一个高性能分词器,通过利用 SIMD、优化的预分词和先进的缓存层次,实现了相比 HuggingFace 分词器最高 1000 倍的加速。
TITLE: GigaToken: 高性能语言模型分词
Sources
相关
- 项目
- Dispatch
- Dispatch
- Dispatch
- Dispatch