Perplexity AI open-sourceó un tokenizer Rust Unigram bajo licencia MIT en github.com/perplexityai/pplx-garden, con reducción reportada de latencia p50 de 5,5× sobre el crate tokenizers de HuggingFace. Números concretos en 514 tokens (512 + BOS/EOS): 349µs HuggingFace vs 63µs Perplexity. En 16K tokens, la implementación de referencia hace 299.171 allocations; la versión Perplexity hace cero. El claim de producción es reducción de 5-6× de utilización CPU en rerankers que scorean cientos de documentos candidatos por request, donde el compute GPU termina en single-digit milisegundos y la tokenización se vuelve el cuello de botella.
El patrón de ingeniería es la substancia debajo del speedup. La traversía de trie basada en HashMap se reemplaza con un double-array trie (Aoe, 1989), que empaca el trie en dos arrays de enteros contiguos para indexación cache-friendly. Agrega validación byte basada en bitmap para skipear paths de prefijos inválidos temprano, y un backing huge-page 2MB para mantener el trie fuera del territorio TLB-thrashing. La tokenización Unigram en sí corre un most-probable-path Viterbi sobre las log-probabilities aprendidas de cada token de vocabulario — diferente del merge iterativo de BPE — así el patrón trie encaja con Unigram naturalmente. El costo es memoria: el trie crece de ~9MB a ~50MB. No hay regresión de calidad reportada; el output es token-exact contra la referencia.
La lectura de ecosistema para constructores corriendo stacks de reranker o embedding: la tokenización es un cuello de botella medible en paths CPU-bound y la mayoría de equipos no lo han instrumentado. Si tu reranker fanea a 200 documentos candidatos por query, la tokenización corre 200× por request — unos cientos de microsegundos se vuelven decenas de milisegundos, lo cual en inferencia servida por GPU es del mismo orden que el modelo mismo. La advertencia estrecha: el tokenizer de Perplexity apunta al vocabulario SentencePiece Unigram de 250K-tokens de XLM-RoBERTa, así beneficia a usuarios de vocab Unigram (la mayoría de rerankers y muchos embedders multilingües) pero no ayuda a stacks tokenizados BPE (la mayoría de LLMs frontera actuales). La lección más grande — Rust + double-array trie + huge-page backing + paths cero-allocation — es portable a cualquier hot path de tokenizer, y probablemente vale la pena replicar para tokenizers BPE si tu presupuesto CPU es tight.
Si corres inferencia de reranker o embedding el lunes por la mañana: instrumenta el wall-clock del tokenizer contra el wall-clock de inferencia; si la tokenización es más del 20% del último, importa. Si usas específicamente modelos de vocab Unigram: pplx-garden es un candidato drop-in para reemplazar el crate de HuggingFace. El costo memoria de 50MB es el tradeoff a presupuestar.
