Почему tokenizer влияет на стоимость training?

Краткий тезис

Tokenizer определяет, на сколько токенов разбивается каждый текстовый пример. Количество токенов напрямую влияет на FLOPs (операции с плавающей точкой) при обучении, так как каждый токен участвует в вычислениях attention и feed-forward слоёв. Более эффективный tokenizer (например, Llama 3 с 128k словарём) кодирует тот же текст в меньшее число токенов, экономя 30–50% вычислительных ресурсов и, соответственно, стоимости обучения.


1. Термин: Tokenizer

Tokenizer — это компонент, преобразующий сырой текст в последовательность числовых идентификаторов (токенов). Он разбивает текст на субсловные единицы (subwords) или символы. Популярные алгоритмы: BPE (Byte-Pair Encoding), WordPiece, Unigram.

  • BPE (Byte-Pair Encoding): итеративно заменяет наиболее частые пары байтов/символов на новый токен. Используется в GPT-моделях.
  • WordPiece: похож на BPE, но выбирает пары, максимизирующие вероятность обучающих данных. Используется в BERT.
  • Unigram: вероятностная модель, выбирающая токены, минимизирующие энтропию.

Зачем нужен tokenizer
LLM работают с фиксированным словарём токенов (обычно 32k–128k). Tokenizer должен эффективно кодировать любой текст, включая редкие слова, числа и символы, минимизируя общее количество токенов.


2. Как tokenizer определяет количество токенов?

Эффективность tokenizer’а измеряется средним числом токенов на слово (tokens per word, TPW) или compression ratio (отношение длины в символах к длине в токенах).

  • Llama 3 (словарь 128k): ~0.8 токенов на слово.
  • GPT-4 (словарь ~100k): ~1.2 токенов на слово.
  • T5 (словарь 32k): ~1.5–2 токенов на слово.

Пример:
Фраза «The quick brown fox jumps over the lazy dog» (9 слов).

  • Llama 3: ~7 токенов (0.8 * 9 ≈ 7.2)
  • GPT-4: ~11 токенов (1.2 * 9 ≈ 10.8)
  • T5: ~14 токенов (1.5 * 9 ≈ 13.5)

Разница в 2 раза между Llama 3 и T5.


3. Связь количества токенов и FLOPs

FLOPs (floating point operations) — количество операций с плавающей точкой, необходимое для одного forward pass. Для transformer-модели с N параметрами и последовательностью из T токенов:

  • Attention: FLOPs ~ 4 * N * T (для каждого токена вычисляются Q, K, V и weighted sum).
  • Feed-forward: FLOPs ~ 8 * N * T (два линейных слоя с активацией).

Итого: FLOPs ~ 12 * N * T (приближённо, без учёта embedding и output projection).

Вывод FLOPs линейно растёт с числом токенов. Если tokenizer уменьшает T в 2 раза, FLOPs тоже уменьшаются в 2 раза.


4. Влияние на стоимость training

Стоимость обучения облачных кластеров (например, GPU-hours) прямо пропорциональна FLOPs. При фиксированном бюджете в FLOPs (например, 10^23 FLOPs) и цене $1 за 10^15 FLOPs, экономия 50% токенов даёт 50% экономии денег.

Формула
Cost = (Total Tokens) * (FLOPs per token) * (Price per FLOP)

  • Total Tokens = (число примеров) * (средняя длина в токенах)
  • FLOPs per token = 12 * N (константа для модели)

Таким образом, cost ∝ average tokens per example.


5. Сравнение эффективности tokenizer’ов

TokenizerСловарьTokens/word (среднее)Compression ratio (символов/токен)Пример для 1000 слов
Llama 3 (BPE)128k0.8~6.5800 токенов
GPT-4 (BPE)~100k1.2~4.31200 токенов
T5 (SentencePiece Unigram)32k1.5~3.51500 токенов
BERT (WordPiece)30k1.4~3.71400 токенов
Byte-level BPE (GPT-2)50k1.1~4.71100 токенов

Ключевой фактор размер словаря. Большой словарь (128k) позволяет кодировать целые слова одним токеном, уменьшая общее число токенов. Однако слишком большой словарь увеличивает embedding matrix и может замедлить inference.


6. Как измерять эффективность tokenizer’а?

Метрики:

  • Tokens per word (TPW) — среднее число токенов на слово в корпусе.
  • Compression ratio — отношение длины текста в символах (или байтах) к длине в токенах.
  • Coverage — доля слов, которые кодируются одним токеном (без разбиения).

Пример кода для оценки

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")
text = "The quick brown fox jumps over the lazy dog"
tokens = tokenizer.encode(text)
print(f"Tokens: {len(tokens)}")  # ~7
print(f"Words: {len(text.split())}")  # 9
print(f"TPW: {len(tokens)/len(text.split()):.2f}")  # ~0.78

7. Практические последствия: экономия 30–50% токенов

При переходе с T5-подобного tokenizer’а (32k) на Llama 3 (128k) количество токенов снижается в ~1.5–2 раза. Для обучения модели с 7B параметров на 1 триллионе токенов:

  • T5: 1.5 трлн токенов (из-за большего TPW)
  • Llama 3: 0.8 трлн токенов

Экономия: 0.7 трлн токенов, что при стоимости $0.1 за 1 млн токенов (аренда GPU) даёт $70 000.

Дополнительно меньше токенов → меньше памяти для хранения активаций (attention matrix O(T^2)), что позволяет использовать меньший batch size или более длинные последовательности.


8. Влияние на длину контекста и memory

Attention имеет квадратичную сложность O(T^2) по памяти (для каждого токена хранятся attention scores со всеми предыдущими). Уменьшение T в 2 раза сокращает memory в 4 раза. Это критично для Agentic RAG, где модели часто обрабатывают длинные контексты (много retrieved документов).

Пример:

  • Контекст 4096 токенов → attention matrix ~ 16 млн элементов (float16 = 32 MB).
  • Контекст 2048 токенов → 4 млн элементов (8 MB).

Экономия памяти позволяет увеличить batch size или использовать более длинные контексты без OOM.


9. Влияние на throughput и latency при inference

Хотя вопрос про training, inference тоже выигрывает от эффективного tokenizer’а. Меньше токенов → быстрее генерация (линейно меньше шагов декодирования). В Agentic RAG агенты делают множество вызовов LLM (планирование, вызов инструментов, рефлексия), поэтому каждый сэкономленный токен умножается на число вызовов.


10. Связь с Agentic RAG

В агентных системах (ReAct, AutoGPT) каждый шаг агента включает:

  • Формирование промпта (системное сообщение + история + retrieved документы).
  • Генерация ответа (chain-of-thought, вызов инструмента).

Эффективный tokenizer сокращает длину промпта и ответа, уменьшая:

  • Стоимость каждого вызова (оплата за токены).
  • Latency (быстрее генерация).
  • Memory (меньше attention overhead).

Поэтому выбор tokenizer’а — стратегическое решение для production RAG-систем.


11. Как выбрать tokenizer для своей модели?

  • Для training с нуля используйте tokenizer с большим словарём (128k) и алгоритмом BPE или Unigram. Обучите на целевом корпусе (язык, домен).
  • Для fine-tuning используйте tokenizer базовой модели (например, Llama 3). Если fine-tuning на специфическом домене (медицина, код), можно расширить словарь дополнительными токенами (например, медицинскими терминами).
  • Для Agentic RAG предпочтительны tokenizer’ы с низким TPW (Llama 3, GPT-4), чтобы минимизировать затраты на многошаговые вызовы.

Компромисс большой словарь увеличивает embedding matrix (параметры), что может замедлить первый forward pass. Но это окупается экономией токенов.


12. Заключение

Tokenizer — не просто «упаковка» текста, а ключевой фактор стоимости обучения и инференса. Эффективный tokenizer (большой словарь, хорошее покрытие) может сократить количество токенов на 30–50%, что прямо уменьшает FLOPs, память и денежные затраты. При проектировании Agentic RAG-систем выбор tokenizer’а должен быть осознанным, так как каждый вызов агента умножает эффект.


Пет-проект для закрепления

Задача Сравнить два tokenizer’а (BPE с малым словарём 32k и BPE с большим словарём 128k) на датасете из 10 000 документов (например, Wikipedia или новости). Оценить экономию токенов и симулировать стоимость обучения.

Инструменты

Шаги:

  1. Загрузите два tokenizer’а: bert-base-uncased (WordPiece, 30k) и meta-llama/Meta-Llama-3-8B (BPE, 128k).
  2. Выберите 1000 случайных документов.
  3. Для каждого документа посчитайте количество токенов каждым tokenizer’ом.
  4. Вычислите среднее TPW и compression ratio.
  5. Постройте гистограмму распределения длины в токенах.
  6. Симулируйте стоимость: предположите, что обучение стоит $0.1 за 1 млн токенов (аренда GPU). Рассчитайте общую стоимость для 1 триллиона токенов (типичный размер обучения 7B модели).
  7. Сделайте вывод: сколько можно сэкономить, используя эффективный tokenizer.

Ожидаемый результат

  • Таблица с TPW, compression ratio, симулированной стоимостью.
  • График распределения.
  • Вывод: Llama 3 tokenizer экономит ~40% токенов по сравнению с BERT, что даёт $40 000 экономии на обучении.

Связь с другими вопросами

ВопросТема
470Архитектура Transformer (основы FLOPs)
472Как считаются FLOPs в LLM?
473Как память зависит от длины последовательности?
476Почему fine-tuning стоит дешевле, чем pre-training?
480Как оптимизировать inference для RAG?
485Что такое KV-cache и как он влияет на стоимость?

Навигация