
Gigatoken: tokenizador mil vezes mais rápido para pré-processamento de LLMs
Gigatoken: tokenização de LLMs na casa dos GB/s
Gigatoken é um tokenizador open-source escrito em Rust que promete ser até 1000x mais rápido que os tokenizers da HuggingFace e significativamente mais rápido que o tiktoken. O projeto, criado por Marcel Rød, funciona como drop-in replacement para ambos.
Como funciona
O ganho de performance vem de três frentes principais:
- Pretokenização otimizada com SIMD - em vez de delegar a pretokenização a um motor de regex (como fazem HF e tiktoken), o Gigatoken implementa essa etapa diretamente com instruções SIMD (AVX512, AVX2, NEON), cobrindo CPUs x86 modernas e ARM.
- Cache hierárquico de mapeamentos - quando uma palavra já foi vista, seus tokens são recuperados de um cache eficiente, evitando recomputação.
- Mínima interação com Python e entre threads - a leitura de dados é feita diretamente pelo Rust, reduzindo overhead de crossing de fronteira de linguagem.
Uso
A instalação é via pip install gigatoken. Existem dois modos:
- Modo compatibilidade: aceita um tokenizer HF ou tiktoken existente e o envolve, mantendo a mesma interface. A saída é idêntica à do original, com ganho de performance menor (mas ainda substancial).
- API nativa do Gigatoken: aceita nomes de modelos do HuggingFace diretamente e lê arquivos em disco pelo Rust, alcançando o máximo de throughput.
Benchmarks
Medidos no arquivo owt_train.txt (11,9 GB, representativo de texto extraído do Common Crawl):
| CPU | Tokenizador | Gigatoken | HF tokenizers | Speedup |
|---|---|---|---|---|
| AMD EPYC 9565 (144 cores) | GPT-2 | 24,53 GB/s | 24,8 MB/s | 989× |
| AMD EPYC 9565 (144 cores) | Qwen 3 | 22,16 GB/s | 34,2 MB/s | 648× |
| Apple M4 Max (16 cores) | GPT-2 | 8,79 GB/s | 6,9 MB/s | 1.268× |
| AMD Ryzen 7 9800X3D (16 cores) | GPT-2 | 6,27 GB/s | 59 MB/s | 106× |
No EPYC, a taxa observada permitiria tokenizar o Common Crawl inteiro (~130 trilhões de tokens) em menos de 6,5 horas.
Os tokenizadores baseados em SentencePiece (Gemma, Mistral, CodeLlama, Llama 2) são os mais lentos no Gigatoken, com speedups de 7-22× - ainda assim superiores aos concorrentes.
Cobertura
Suporta praticamente todos os tokenizadores BPE em uso: GPT-2, Llama 3/3.1/3.2/3.3/4, Qwen 2/2.5/3/3.5, DeepSeek V3/R1/V4, Phi-4, OLMo, Nemotron, GLM, Kimi K2, Gemma, ModernBERT, entre outros.
Limitações conhecidas
- WordPiece ainda não é suportado.
- SentencePiece (usado por modelos Google/BERT) tem otimização limitada.
- File sinks ainda não implementados na API nativa.
- Windows pouco testado (recomenda-se WSL).
- A iteração Python usa ABI3, mais lento que APIs específicas por versão do CPython (experimentos indicam 2x de melhora futura).
Sobre o código
A maior parte foi escrita à mão sem IA. IA foi usada nas etapas finais para: API pública, ampliação de compatibilidade, portabilidade de estratégias SIMD entre arquiteturas, profiling final e refatoração. O projeto tem 625 stars e 32 forks no GitHub.