Perplexity AI a open-sourcé un tokenizer Rust Unigram sous licence MIT à github.com/perplexityai/pplx-garden, avec une réduction de latence p50 rapportée de 5,5× sur le crate tokenizers de HuggingFace. Chiffres concrets sur 514 tokens (512 + BOS/EOS) : 349µs HuggingFace vs 63µs Perplexity. À 16K tokens, l'implémentation de référence fait 299 171 allocations ; la version Perplexity en fait zéro. Le claim de production, c'est une réduction de 5-6× de l'utilisation CPU sur les rerankers qui scorent des centaines de documents candidats par request, où le compute GPU finit en single-digit millisecondes pis le tokenization devient le goulot.
Le pattern d'ingénierie, c'est la substance en dessous du speedup. La traversée de trie basée HashMap se fait remplacer par un double-array trie (Aoe, 1989), qui pack le trie dans deux arrays d'entiers contigus pour de l'indexation cache-friendly. Ajoute de la validation byte basée bitmap pour skip les paths de préfixes invalides tôt, pis un backing huge-page 2MB pour garder le trie hors du territoire TLB-thrashing. La tokenization Unigram elle-même roule un most-probable-path Viterbi sur les log-probabilités apprises de chaque token de vocabulaire — différent du merge itératif de BPE — donc le pattern trie fitte Unigram naturellement. Le coût, c'est la mémoire : le trie passe de ~9MB à ~50MB. Pas de régression de qualité rapportée ; le output est token-exact contre la référence.
La lecture écosystème pour les bâtisseurs qui roulent des stacks de reranker ou d'embedding : la tokenization est un goulot mesurable dans les paths CPU-bound, pis la plupart des équipes ne l'ont pas instrumenté. Si ton reranker fan out sur 200 documents candidats par query, la tokenization roule 200× par request — quelques centaines de microsecondes deviennent des dizaines de millisecondes, ce qui sur de l'inférence servie par GPU est de même ordre que le modèle lui-même. Le caveat étroit : le tokenizer de Perplexity cible le vocabulaire SentencePiece Unigram 250K-tokens de XLM-RoBERTa, donc ça bénéficie aux utilisateurs de vocab Unigram (la plupart des rerankers pis plusieurs embedders multilingues) mais aide pas les stacks tokenizés BPE (la plupart des LLM frontière courants). La leçon plus large — Rust + double-array trie + huge-page backing + paths zero-allocation — est portable à n'importe quel hot path de tokenizer, pis probablement worth replicating pour les tokenizers BPE si ton budget CPU est tight.
Si tu roules de l'inférence de reranker ou d'embedding lundi matin : instrumente le wall-clock du tokenizer contre le wall-clock d'inférence ; si la tokenization est plus de 20% de ce dernier, ça compte. Si tu utilises spécifiquement des modèles à vocab Unigram : pplx-garden est un candidat drop-in pour remplacer le crate de HuggingFace. Le coût mémoire de 50MB, c'est le tradeoff à budgéter.
