Почему 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) | 128k | 0.8 | ~6.5 | 800 токенов |
| GPT-4 (BPE) | ~100k | 1.2 | ~4.3 | 1200 токенов |
| T5 (SentencePiece Unigram) | 32k | 1.5 | ~3.5 | 1500 токенов |
| BERT (WordPiece) | 30k | 1.4 | ~3.7 | 1400 токенов |
| Byte-level BPE (GPT-2) | 50k | 1.1 | ~4.7 | 1100 токенов |
Ключевой фактор размер словаря. Большой словарь (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 или новости). Оценить экономию токенов и симулировать стоимость обучения.
Инструменты
- Hugging Face
transformers(AutoTokenizer) - Датасет:
wikitext-2илиc4 - Python, pandas, matplotlib
Шаги:
- Загрузите два tokenizer’а:
bert-base-uncased(WordPiece, 30k) иmeta-llama/Meta-Llama-3-8B(BPE, 128k). - Выберите 1000 случайных документов.
- Для каждого документа посчитайте количество токенов каждым tokenizer’ом.
- Вычислите среднее TPW и compression ratio.
- Постройте гистограмму распределения длины в токенах.
- Симулируйте стоимость: предположите, что обучение стоит $0.1 за 1 млн токенов (аренда GPU). Рассчитайте общую стоимость для 1 триллиона токенов (типичный размер обучения 7B модели).
- Сделайте вывод: сколько можно сэкономить, используя эффективный 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 и как он влияет на стоимость? |
Навигация
- Предыдущий: 474
- Следующий: 476
- Индекс: 00. Индекс разборов