
Hugging Face представила первую мажорную версию библиотеки tokenizers — ключевого компонента для подготовки текста перед подачей в модели. В релиз-кандидате v1 разработчики заявляют о многократном ускорении кодирования и декодирования, что особенно заметно при масштабировании на большое количество потоков и длинные последовательности.
Токенизация традиционно не считалась узким местом в ML-пайплайнах: она легковесна по сравнению с прямым проходом через модель. Однако с ростом скорости самих моделей и увеличением объёмов обрабатываемых данных, ожидание токенизации начинает приводить к простою GPU. В Hugging Face решили, что библиотека должна масштабироваться вместе с рабочими нагрузками, и полностью переработали внутреннюю архитектуру.
Что изменилось в v1
Разработчики сохранили обратную совместимость: v1 производит те же token ID, что и v0.23, поддерживает все семейства токенизаторов (BPE, WordPiece, Unigram) и загружает те же словари и ранги слияний. Основные улучшения затронули четыре этапа пайплайна токенизации: нормализацию, пре-токенизацию, работу модели и пост-обработку. Ключевые изменения пришлись на этап модели, где выполняется основная работа.
Замена общего regex-движка на специализированные SIMD-функции. BPE-модели используют регулярное выражение для разбиения текста на пре-токены. Поскольку это выражение фиксировано и не меняется во время выполнения, v1 заменяет универсальный regex-движок на hand-written функции, использующие SIMD-инструкции. Это позволяет обрабатывать 64 байта за одну операцию регистра. Метод, названный bitcannon, рассматривает входные байты как параллельные потоки битов. Однако ускорение применимо только к ограниченному набору наиболее распространённых паттернов; для нестандартных токенизаторов сохраняется старый regex-путь.
Кэширование пре-токенов. BPE всегда даёт одинаковые token ID для одного и того же пре-токена. v1 сохраняет результат обработки в thread-local кэше, что позволяет пропускать процесс слияния для повторяющихся слов. В реальных текстах, особенно длинных, количество уникальных слов растёт медленнее общего количества слов, поэтому кэш даёт значительный выигрыш. Для коротких текстов с малым числом повторений накладные расходы на поиск в кэше могут не окупаться.
Переработка цикла слияния BPE. Предыдущая реализация выделяла новую память для каждого вызова и строила новую очередь приоритетов для каждого пре-токена. В v1 используется переиспользуемый scratch-буфер, а символы хранятся в плоском массиве с привязкой соседних элементов по позициям. Кандидаты на слияние упаковываются в одно 64-битное значение, где старшие биты содержат ранг слияния. Сравнение двух кандидатов сводится к сравнению двух целых чисел.
Пакетная обработка пре-токенов. Вместо обработки каждого пре-токена по отдельности, v1 обрабатывает их батчем в одном вызове модели.
Результаты бенчмарков
Разработчики приводят результаты тестов из репозитория tokbench, который позволяет воспроизвести замеры на собственном оборудовании. Сравнение проводилось с tokenizers v0.23 и другими популярными библиотеками: tiktoken, kitoken, gigatoken.
Ускорение варьируется в зависимости от модели токенизатора и языка. Наиболее впечатляющие результаты получены на BPE-токенизаторах для английского текста, где прирост скорости достигает десятков раз. Для моделей с нестандартными regex-паттернами, где не применяется SIMD-оптимизация, ускорение скромнее.
Важный момент: v1 не жертвует точностью. Все изменения касаются только производительности, а не алгоритма токенизации. Это означает, что модели, обученные с tokenizers v0.23, будут работать с v1 без необходимости переобучения.
Что это значит для разработчиков
Для инженеров, работающих с большими объёмами текста или сервисами с высокими требованиями к latency, обновление до tokenizers v1 может дать ощутимый прирост производительности без изменения кода. Особенно это актуально для:
- Пайплайнов пакетной обработки миллионов документов.
- Систем реального времени, где каждая миллисекунда на счету.
- Сценариев с длинным контекстом (например, RAG-системы), где токенизация может стать узким местом.
Тем не менее, для мелких проектов или единичных запросов разница может быть не столь заметна. Разработчикам стоит самостоятельно прогнать бенчмарки на своих данных, используя команду из репозитория tokbench.
Hugging Face также благодарит IBM, NVIDIA и команду ExecuTorch за патчи и тестирование на широком спектре оборудования, что должно обеспечить хорошую кроссплатформенную поддержку.
Релиз-кандидат tokenizers v1 уже доступен для установки. Ожидается, что финальная версия появится в ближайшие недели. Пока что библиотека находится в стадии активного тестирования, и сообществу рекомендуется сообщать о любых проблемах через GitHub Issues.