# GigaToken: 言語モデルのトークン化を1000倍高速化
GigaToken: 言語モデルのトークン化を1000倍高速化
GigaTokenは、HuggingFaceおよびTiktokenのドロップイン置換として設計された高性能トークン化ライブラリで、ハイエンドCPUハードウェアにおいて最大24 GB/sのスループットを達成します。これにより、大規模データセットの処理に必要な時間を大幅に短縮し、デュアルソケットAMD EPYCシステム上でCommon Crawlデータセット全体(約130兆トークン)のトークン化を6.5時間未満で行うことが可能になります。
技術的実装と性能向上
// GigaTokenは、トークン化プロセスにおいて最も計算コストの高い部分、具体的にはプリトークン化とキャッシングに焦点を当てることでその速度を達成します。
SIMDとプリトークン化
ほとんどのトークナイザーはプリトークン化をRegexエンジンに外部委託しています。GigaTokenはこれを、SIMD(Single Instruction, Multiple Data)と分岐の最小化を用いた高度に最適化された実装に置き換えます。このアプローチにより、ライブラリはx86およびARMアーキテクチャの両方でバイトレベルでのテキストデータ処理を極めて効率的に行うことができます。
最適化されたキャッシュ階層
プリトークンマッピングのキャッシュは、プリトークン分布が長尾分布でありキャッシュが急速に増大するため、重要なパフォーマンスボトルネックとなります。GigaTokenは、以前に見た単語のエンコード済みトークンを効率的に検索できる専用のキャッシュ階層を実装し、冗長な計算を削減します。
ランタイムオーバーヘッドの最小化
スループットを最大化するため、GigaTokenはPythonランタイムとの相互作用を最小限に抑え、スレッド間の通信を避けています。コアロジックをRustで実装し、Rust実装がファイルから直接データを読み込むようにすることで、Pythonデータ構造を渡すオーバーヘッドを回避します。
ベンチマークとハードウェア性能
GigaTokenの性能向上は、ネイティブAPIを使用する際に最も顕著になります。これは最大限の並列性と直接ファイル読み込みを可能にするためです。
ハイエンドサーバーハードウェア (AMD EPYC 9565)
デュアルソケット144コアのAMD EPYC 9565プロセッサーにおいて、GigaTokenは一般的なトークナイザーに対して次のスループットを達成します:
| トークナイザー | GigaToken スループット | vs HuggingFace |
|---|---|---|
| GPT-2 | 24.53 GB/s | 989x |
| Phi-4 | 24.00 GB/s | 801x |
| Llama 3 / 3.1 / 3.2 | 22.15 GB/s | 457x |
| DeepSeek V3 / R1 / V4 | 19.69 GB/s | 750x |
| Qwen 2 / 2.5 | 19.12 GB/s | 19.12 GB/s |
コンシューマーハードウェア (Apple M4 Max)
16コアのApple M4 Maxにおいて、GigaTokenは同様の桁数の速度向上を示します:
| トークナイザー | GigaToken スループット | vs HuggingFace |
|---|---|---|
| GPT-2 | 8.79 GB/s | 1,268x |
| OLMo 2 / 3 | 7.56 GB/s | 1,299x |
| Llama 3 / 3.1 / 3.2 | 7.60 GB/s | 676x |
| Phi-4 | 7.76 GB/s | 1,012x |
デスクトップハードウェア (AMD Ryzen 7 9800X3D)
16コアのAMD Ryzen 7 9800X3Dにおいて、スループットはGPT-2で6.27 GB/sからGemma 3で1.12 GB/sの範囲です。
使用方法と互換性
互換性モード
このモードでは、GigaTokenはHuggingFaceまたはTiktokenのドロップイン置換として機能します。正確な出力を保証しますが、互換性を維持するオーバーヘッドによりパフォーマンスコストが発生します。ユーザーは大幅な速度向上を期待できますが、ネイティブAPIで見られるフルの1000倍の向上までは得られません。
ネイティブGigaToken API
最大のパフォーマンスを得るために、ネイティブAPIが使用されます。これはHuggingFaceのモデル名を受け入れ、TextFileSourceを利用してRustで直接ファイルからデータを読み込み、Pythonオーバーヘッドをスキップします。
import gigatoken as gt
tokenizer = gt.Tokenizer("Qwen/Qwen3-8B\)) file_source = gt.TextFileSource(["owt_train.txt"], separator=b"<|endoftext|>\)) tokens = tokenizer.encode_files(file_source)
制限事項と既知の問題
BPEトークナイザーに対して高度に最適化されているものの、GigaTokenにはいくつかの既知の制限があります:
- SentencePiece: SentencePieceベースのモデル(GoogleモデルやBERTスタイルのモデルなど)のトークン化は最適化が十分ではなく、スループットが低下します。
- WordPiece: WordPieceトークン化はまだサポートされていません。
- OS Support: Windowsサポートは未テストです;Windowsでの使用にはWSLが推奨されます。
- Python ABI: 現在の実装はABI3を使用しており、作者は各Pythonバージョンに特化させることを意図しており、オーバーヘッドがボトルネックとなるケースの速度を潜在的に2倍にすることを目指しています。
コミュニティディスカッション
業界の実務家たちは、トークン化が総推論時間のごく小さな部分(しばしば0.1%未満)であることを指摘していますが、これはトレーニングデータの大規模なプリトークン化を必要とする同じアプリケーションにおいて重要です。
"これは素晴らしいですが、トークン化は通常総推論時間の0.1%未満です。おそらくトークン化だけが必要なアプリケーションが多数あり、それにはこれが非常に役立つでしょう!"