// data & ai · giornale tecnico MILANO ● LIVE 00:00:00

Gigatoken: un tokenizer BPE in Rust che arriva a 24,53 GB/s

Gigatoken, tokenizer BPE in Rust sotto licenza MIT, arriva a 24,53 GB/s su GPT-2: 989x i tokenizers HuggingFace. Il merito è di una pretokenizzazione scritta a mano con SWAR e del caching dei pretoken.

La tokenizzazione è la parte dello stack di language modeling che quasi nessuno profila. Gigatoken, rilasciato da Marcel Rød (dottorando a Stanford) sotto licenza MIT, parte proprio da qui: una libreria BPE scritta in Rust con binding Python che codifica testo a gigabyte al secondo su una singola macchina, contro baseline già multithread.

Il benchmark sul tokenizer GPT-2, valutato sul corpus owt_train.txt da 11,9 GB su un setup dual-socket AMD EPYC 9565 a 144 core, dà 24,53 GB/s. Nello stesso ambiente, tiktoken di OpenAI si ferma a 36,0 MB/s e i tokenizers di HuggingFace a 24,8 MB/s: un vantaggio rispettivamente di 681x e 989x. Su un Apple M4 Max a 16 core lo stesso carico gira a 8,79 GB/s, e su un AMD Ryzen 7 9800X3D consumer a 6,27 GB/s. Lo speedup non dipende quindi da una singola CPU o vocabolario, e copre 23 famiglie di tokenizer (da GPT-2 a Llama, Qwen, DeepSeek, Gemma e Mistral).

Da dove arriva la velocità

I guadagni non vengono da un merge loop BPE migliore, ma da due punti che molti danno per risolti. Il primo è la pretokenizzazione: invece di delegarla a un motore regex, Gigatoken la scrive a mano. Il log di ottimizzazione mostra la progressione su 100 MB di OpenWebText — da ~47 MiB/s con fancy-regex fino a 1.049 MiB/s — passando per una lookup table da 256 byte, l’uso di SWAR (SIMD Within A Register) al posto degli intrinsics NEON e infine lo sfruttamento dell’ILP con due cursori indipendenti. Il secondo è il caching dei pretoken: se una parola è già stata vista, i suoi token vengono recuperati invece di ricalcolati.

Per un data engineer che gestisce pipeline di preprocessing su corpora grandi, l’aspetto interessante è la sobrietà dei claim. C’è una modalità di compatibilità che avvolge un tokenizer HuggingFace o tiktoken preservando l’output identico, ma “solo” a circa 200–300x per via dell’overhead Python; le vocabolari SentencePiece vedono 7–22x, non 1.000x, e WordPiece non è supportato. Il confronto non è del tutto apples-to-apples (le baseline non usano caching), e una riproduzione indipendente su KrabArena, su una slice da 174 MB, ha misurato 26,2x su tiktoken e 83,4x sui tokenizers: numeri più bassi ma coerenti con un trend che scala con i core.

In sintesi

  • Gigatoken raggiunge 24,53 GB/s su GPT-2 (144-core EPYC), 989x i tokenizers HuggingFace e 681x tiktoken.
  • Il vantaggio nasce da una pretokenizzazione scritta a mano con SWAR e dal caching dei pretoken, non da un BPE più veloce.
  • SentencePiece resta a 7–22x e la modalità compatibile a 200–300x: guadagni reali ma da leggere per caso d’uso.

Fonte: Meet Gigatoken: A Rust BPE Tokenizer that Encodes Text at 24.53 GB/s, up to 989x Faster than HuggingFace Tokenizers — https://www.marktechpost.com/2026/07/23/meet-gigatoken-a-rust-bpe-tokenizer-that-encodes-text-at-24-53-gb-s-up-to-989x-faster-than-huggingface-tokenizers/

Condividi X Facebook LinkedIn WhatsApp Email

// scritto da

Fernando

Hai qualcosa da aggiungere? Unisciti alla discussione.

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Altri dell'autore

dalla stessa firma