AI News HubLIVE
站內改寫2 分鐘閱讀

Gigatoken:一款 Rust BPE 分詞器,編碼速度高達 24.53 GB/s,比 HuggingFace Tokenizers 快 989 倍

Gigatoken 是斯坦福博士生 Marcel Rød 開發的一款 MIT 許可的 Rust BPE 分詞器,在 144 核 AMD EPYC 9565 上以 24.53 GB/s 的速度對 GPT-2 進行分詞,比 HuggingFace tokenizers 快 989 倍,比 tiktoken 快 681 倍。其速度提升並非來自更快的 BPE 合併循環,而是來自手寫的 SWAR 預分詞器和預分詞緩存。支持 23 種分詞器家族,但 SentencePiece 詞彙表的速度提升僅為 7–22 倍。兼容模式可保持精確輸出一致,但速度約為 200–300 倍。

來源MarkTechPost作者: Asif Razzaq

分詞是語言模型堆棧中幾乎無人關注性能的部分。斯坦福博士生 Marcel Rød 以 MIT 許可發佈了 Gigatoken,旨在糾正這一疏忽。該庫在單台機器上以每秒數 GB 的速度編碼文本,而對比的基線已經是用多線程 Rust 編寫的。

在 GPT-2 分詞器基準測試中,Gigatoken 在 144 核 AMD EPYC 9565 雙路系統上處理 11.9 GB 的 owt_train.txt 語料庫,速度高達 24.53 GB/s。相比之下,OpenAI 的 tiktoken 速度為 36.0 MB/s,HuggingFace tokenizers 為 24.8 MB/s,分別慢 681 倍和 989 倍。在 Apple M4 Max 上,速度達到 8.79 GB/s,是 HuggingFace tokenizers 的 1268 倍,tiktoken 的 140 倍。在消費級 AMD Ryzen 7 9800X3D 上,速度為 6.27 GB/s,分別是 106 倍和 68 倍。

Gigatoken 是一種用 Rust 編寫、支持 Python 綁定的字節對編碼(BPE)分詞器,可以通過 pip install gigatoken 安裝。其基準測試涵蓋 23 種不同的分詞器家族,包括 GPT-2、Llama 3 到 4、Qwen 2 到 3.6、DeepSeek V3/R1/V4 等。提供兩種使用模式:兼容模式包裝現有的 HuggingFace 或 tiktoken 分詞器,保持精確輸出一致,但由於 Python 開銷,速度僅約為 200–300 倍;原生 Gigatoken API 讓 Rust 直接讀取文件,達到公佈的最高速度。

速度提升並非來自更快的 BPE 合併循環,而是來自兩個方面。第一,預分詞化:大多數實現依賴正則引擎,而 Gigatoken 手工編寫了預分詞器。通過優化,單線程吞吐從 47 MiB/s 提升到 1049 MiB/s。第二,預分詞緩存:重複出現的單詞直接查找編碼結果,避免了重複計算。作者坦誠記錄了失敗的優化嘗試,如熱/冷代碼分裂和兩次遍歷分類緩衝區,這些嘗試因額外開銷而被還原。

基準測試並非完全公平:Gigatoken 編碼整個未分割的文件,自動尋找文檔邊界並並行化;而 HuggingFace 和 tiktoken 在預分割的數據上測速,且未使用緩存。SentencePiece 詞彙表的速度提升僅為 7–22 倍,不如 BPE 顯著。獨立驗證(KrabArena)在 4 vCPU 虛擬機上確認了結果:Gigatoken 中位數 277.8 MB/s,是 tiktoken 的 26.2 倍。

Gigatoken 驗證了 35,356 個文檔,其性能趨勢隨核心數增加而擴展。該庫已發佈在 PyPI,版本 0.9.0。更多信息請見 GitHub 倉庫。