Perplexity AI publie en open source un tokeniseur Unigram avec une latence p50 5 fois inférieure au tokeniseur de Hugging Face
L'équipe de recherche de Perplexity AI a réécrit de zéro son tokeniseur Unigram en Rust et publié le code en open source dans son dépôt pplx-garden, dédié à ses technologies d'inférence. Le résultat est saisissant : à des longueurs d'entrée typiques de production, la nouvelle implémentation divise par 5 la latence médiane (p50) par rapport à la bibliothèque tokenizers de Hugging Face, par 2 par rapport à SentencePiece en C++, et par 1,5 par rapport au tokeniseur IREE en C. En conditions réelles, Perplexity a mesuré une réduction de 5 à 6 fois de l'utilisation CPU dans sa pile d'inférence, et un gain de plusieurs dizaines de millisecondes sur la latence de ses modèles de reranking. La solution atteint zéro allocation sur le tas en régime permanent, ce qui change fondamentalement la courbe de performance à grande échelle.
Ce gain n'est pas anecdotique : il révèle un angle mort souvent ignoré de l'inférence LLM. La conversation autour des coûts se concentre presque exclusivement sur les GPU, les caches KV et les noyaux d'attention. Mais des modèles plus compacts, comme les encodeurs d'embeddings, les classifieurs et les modèles de reranking, présentent un profil radicalement différent. Un reranker tel que XLM-RoBERTa, doté d'un vocabulaire Unigram de 250 000 tokens, peut terminer son calcul GPU en quelques millisecondes seulement. La tokenisation côté CPU devient alors le vrai goulot d'étranglement, surtout lorsqu'il faut traiter des centaines de documents par requête. Pour des systèmes à fort trafic comme celui de Perplexity, optimiser cette étape revient à réduire directement les coûts d'infrastructure et la latence perçue par l'utilisateur final.
La lenteur de l'implémentation de Hugging Face tenait à trois problèmes structurels : chaque correspondance dans le trie déclenchait une allocation mémoire via String::from_utf8, générant jusqu'à 299 000 allocations pour une entrée de 16 000 tokens ; chaque nœud du trie reposait sur une HashMap entraînant quatre chargements mémoire dépendants par octet ; enfin, les buffers de la table de programmation dynamique étaient réalloués à chaque appel, saturant le cache L2 à mesure que les entrées s'allongent. Perplexity a d'abord validé un portage sans allocation avec la même structure de trie, réduisant déjà la latence de 326 µs à 155 µs, avant d'introduire un Double-Array Trie pour éliminer le coût résiduel du parcours de pointeurs. L'algorithme de Viterbi, introduit en 1967 pour la segmentation probabiliste, reste au cœur du tokeniseur Unigram formalisé par Kudo en 2018 et intégré à SentencePiece. En publiant leur implémentation, Perplexity offre à l'ensemble de l'écosystème open source un composant critique dont les bénéfices dépassent largement leur propre infrastructure.
Les équipes techniques européennes travaillant avec des tokeniseurs Unigram à grande échelle peuvent intégrer directement cette bibliothèque open source pour réduire la latence et les coûts CPU de leurs pipelines d'inférence.
Dans nos dossiers
Vu une erreur factuelle dans cet article ? Signalez-la. Toutes les corrections valides sont publiées sur /corrections.




