4 октября 2026 г. · Анатолий Крылов, редактор Тераферма
Скорость генерации токенов LLM: от чего зависит и как оценить
Скорость генерации токенов LLM при работе с одним пользователем определяется в первую очередь пропускной способностью видеопамяти: на каждый токен карта читает все веса модели. Отсюда простая оценка: разделите пропускную способность в ГБ/с на размер весов в ГБ. Например, Llama 8B в 4 битах (~5 ГБ) на RTX 4090 (~1 000 ГБ/с) упирается в потолок около 200 токенов в секунду, а на практике выдаёт 120–160.
Две фазы генерации: prefill и decode
Ответ языковой модели формируется в два этапа, и узкие места у них разные.
Prefill — обработка запроса. Модель читает весь промпт целиком и параллельно считает его токены. Это интенсивные матричные вычисления, и здесь важны терафлопсы карты. Prefill определяет время до первого токена: сколько вы ждёте, прежде чем ответ начнёт появляться.
Decode — генерация ответа. Модель выдаёт токены по одному. Для каждого нужно прочитать из памяти все активные веса, а вычислений на эти данные приходится немного. Поэтому decode упирается не в вычисления, а в скорость памяти.
Для длинного промпта с коротким ответом (например, классификации документов) важнее prefill. Для чата и генерации текстов важнее decode. Большинство пользователей под «скоростью модели» понимают именно его.
Формула оценки скорости
Теоретический потолок скорости decode для одного запроса:
токенов в секунду ≈ пропускная способность памяти (ГБ/с) ÷ размер активных весов (ГБ)
Реальная скорость ниже потолка из-за чтения KV-кеша, накладных расходов движка и неидеального использования памяти. Ориентируйтесь на 50–80% от расчёта: лучшие движки на крупных картах ближе к верхней границе.
Размер весов считается так: число параметров × байт на параметр. В FP16 — 2 байта, в FP8 и INT8 — 1 байт, в 4 битах с учётом служебных данных — около 0,55–0,6 байта.
Пропускная способность памяти популярных карт (по спецификациям производителя, округлённо):
| Карта | Память | Пропускная способность | Тариф, ₽/час |
|---|---|---|---|
| RTX 4060 Ti | 16 ГБ | ~290 ГБ/с | 15 |
| RTX 3060 | 12 ГБ | ~360 ГБ/с | 10 |
| RTX A6000 | 48 ГБ | ~770 ГБ/с | 60 |
| L40S | 48 ГБ | ~860 ГБ/с | 102 |
| RTX 3090 | 24 ГБ | ~940 ГБ/с | 22 |
| RTX 4090 | 24 ГБ | ~1 000 ГБ/с | 44 |
| RTX 5090 | 32 ГБ | ~1 790 ГБ/с | 70 |
| A100 80 ГБ | 80 ГБ | ~2 000 ГБ/с | 102 |
| H100 SXM | 80 ГБ | ~3 350 ГБ/с | 255 |
| H200 | 141 ГБ | ~4 800 ГБ/с | 534 |
Интересное следствие: RTX 3090 за 26 ₽/час по скорости генерации для одного пользователя почти не уступает RTX 4090, потому что пропускная способность у них близкая. Разница в вычислительной мощности проявляется на prefill и при больших батчах.
Примеры расчёта для популярных моделей
Посчитаем потолок и ожидаемую скорость для нескольких сочетаний.
| Модель и точность | Размер весов | Карта | Потолок, ток/с | Ожидаемо, ток/с |
|---|---|---|---|---|
| 8B, 4 бита | ~5 ГБ | RTX 3060 | ~72 | 40–55 |
| 8B, 4 бита | ~5 ГБ | RTX 4090 | ~200 | 120–160 |
| 8B, FP16 | ~16 ГБ | RTX 3090 | ~59 | 35–47 |
| 32B, 4 бита | ~19 ГБ | RTX 4090 | ~53 | 30–42 |
| 32B, 4 бита | ~19 ГБ | RTX 5090 | ~94 | 55–75 |
| 70B, 4 бита | ~40 ГБ | RTX A6000 | ~19 | 11–15 |
| 70B, 4 бита | ~40 ГБ | A100 | ~50 | 30–40 |
| 70B, FP8 | ~70 ГБ | H100 SXM | ~48 | 30–38 |
Это оценки для одного запроса без спекулятивного декодирования. Точную цифру всегда даёт замер, но формула позволяет отсеять заведомо медленные варианты ещё до аренды.
Чтобы понять, поместится ли модель в память вообще, используйте калькулятор VRAM или таблицы из статьи сколько видеопамяти нужно для LLM.
Что ещё влияет на скорость
Длина контекста. На каждый токен модель читает не только веса, но и KV-кеш всех предыдущих токенов. При контексте в десятки тысяч токенов кеш занимает гигабайты, и скорость падает. Для модели 8B разница между контекстом 1 000 и 32 000 токенов может быть заметной.
Архитектура MoE. В моделях Mixture of Experts на токен активна только часть параметров. Например, у DeepSeek R1 из 671 млрд активны около 37 млрд. В формулу подставляется размер активных весов, поэтому MoE генерирует быстрее плотной модели того же общего размера. Но в память всё равно должны поместиться все параметры. Подробнее читайте в статье как запустить DeepSeek R1.
Движок инференса. llama.cpp и Ollama удобны для одного пользователя. vLLM и SGLang эффективнее используют память и выигрывают при параллельных запросах. Разница между движками на одной карте может доходить до десятков процентов.
Несколько карт. Тензорный параллелизм делит веса между картами, и каждая читает только свою часть. Скорость растёт, но не линейно: карты обмениваются данными на каждом слое. Без NVLink, через PCIe, прирост от второй карты меньше.
Квантизация KV-кеша. Хранение кеша в 8 битах вместо 16 вдвое сокращает его объём. Это позволяет обрабатывать более длинный контекст или больше параллельных запросов на той же карте, а при длинных диалогах ещё и немного ускоряет генерацию.
Тепловой режим и лимит мощности. Карта, которая перегревается или работает с урезанным лимитом энергопотребления, снижает частоты. На скорость decode это влияет меньше, чем на prefill, но при замерах стоит проверить частоты и температуру в nvidia-smi.
Спекулятивное декодирование. Маленькая модель-черновик предлагает несколько токенов, большая проверяет их за один проход. На предсказуемых текстах это даёт ускорение в 1,5–2,5 раза.
Скорость одного запроса и пропускная способность сервиса
Важно различать две метрики.
Скорость для одного пользователя — сколько токенов в секунду видит человек в чате. Определяется формулой выше.
Пропускная способность — сколько токенов в секунду сервер выдаёт суммарно всем пользователям. При батчинге карта читает веса один раз и применяет их сразу к десяткам запросов. Поэтому суммарная скорость растёт почти линейно с размером батча, пока не упрётся в вычисления или память под KV-кеш.
Пример: модель 8B на RTX 4090 через vLLM может выдавать одному пользователю 120+ токенов в секунду, а при 32 параллельных запросах — суммарно больше тысячи, хотя каждый отдельный пользователь получит меньше.
У батчинга есть обратная сторона: память под KV-кеш. Каждый параллельный запрос хранит свой кеш, и при длинных контекстах именно он, а не веса, ограничивает число одновременных пользователей. Поэтому карта с большей памятью, например RTX 5090 с 32 ГБ вместо RTX 4090 с 24 ГБ, при одинаковой модели может обслуживать заметно больше параллельных сессий.
Для API и продакшена считайте именно пропускную способность и цену миллиона токенов. Как развернуть vLLM, описано на странице запуска vLLM.
Какая скорость нужна для разных задач
Прежде чем гнаться за максимальной скоростью, определите, сколько вам реально нужно. Переплата за запас, который никто не заметит, — частая ошибка.
| Задача | Комфортная скорость | Что важнее |
|---|---|---|
| Чат с человеком | 20–30 ток/с | Время до первого токена |
| Голосовой ассистент | 40+ ток/с | Задержка всего ответа |
| RAG по документам | 20–40 ток/с | Prefill длинного контекста |
| Рассуждающие модели | 50+ ток/с | Скорость decode |
| Агенты с цепочками вызовов | 60+ ток/с | Скорость decode и prefill |
| Пакетная обработка текстов | Не важна для одного запроса | Суммарная пропускная способность |
Для чата модель 8B на RTX 3060 уже даёт комфортную скорость, и брать RTX 4090 ради цифр в бенчмарке нет смысла. А вот для агента, который делает десять последовательных вызовов модели на каждый запрос пользователя, каждая лишняя секунда умножается на десять.
В RAG-сценариях отдельно оцените prefill. Если вы подаёте в модель 20 000 токенов контекста, время до первого токена может составить несколько секунд даже на быстрой карте. Здесь вычислительная мощность важнее пропускной способности памяти, и разница между RTX 3090 и RTX 4090 становится заметной: у второй тензорные ядра примерно вдвое производительнее.
Как замерить скорость своей модели
Точнее всего покажет короткий тест на арендованной карте.
- Арендуйте карту-кандидат, например RTX 4090, на 15–20 минут.
- Запустите модель в нужном движке и точности.
- В Ollama выполните запрос с флагом
--verbose: в конце будет строка eval rate с токенами в секунду. - Для vLLM используйте встроенный скрипт бенчмарка с нужным числом параллельных запросов.
- Повторите на второй карте и сравните цену миллиона токенов: тариф в час ÷ (токенов в секунду × 3 600) × 1 000 000.
Пример: 140 токенов в секунду на RTX 4090 за 48 ₽/час даёт около 504 000 токенов в час, то есть примерно 87 ₽ за миллион токенов для одного потока. С батчингом цена падает в разы.
Не забудьте замерить сценарий, близкий к реальному: с вашей длиной промпта, типичной длиной ответа и ожидаемым числом одновременных пользователей. Скорость на коротком запросе «привет» почти ничего не говорит о поведении модели на документе в 10 000 токенов.
Тест на 15 минут стоит 11 ₽ на RTX 4090 и 6 ₽ на RTX 3090. Это дешевле любой ошибки в выборе карты для сервиса, который будет работать месяцами.