Токены в секунду: почему это число ничего не значит без условий
«Эта карта выдаёт три тысячи токенов в секунду» — фраза, которая звучит как характеристика железа, а на деле является характеристикой эксперимента. Поменяйте модель, длину ответа или число одновременных запросов — и число изменится в разы. Разбираем на опубликованных замерах, что нужно спрашивать, прежде чем верить цифре.
Сравнительная таблица
| Условия замера | Модель | Токенов в секунду | Первый токен |
|---|---|---|---|
| A100 80 ГБ, 50 запросов | Qwen-7B | 3 363 | 0,31 с |
| A100 80 ГБ, 300 запросов | Qwen-7B | 8 031 | 1,54 с |
| A100 80 ГБ, 50 запросов | Qwen-32B | 577 | 1,30 с |
| A100 80 ГБ, 300 запросов | Qwen-32B | 721 | 67 с |
| RTX 4090 24 ГБ, 300 запросов | Qwen2.5-3B | 7 214 | — |
| RTX 4090 24 ГБ, 300 запросов | Gemma-2-9B | 473 | — |
Число без условий — не число
Пропускная способность языковой модели зависит минимум от пяти вещей: какая модель, в какой разрядности, какой длины вход и выход, сколько запросов обрабатывается одновременно и каким инференс-сервером. Уберите любую из них — и цифру нельзя сравнить ни с чем.
Посмотрите на таблицу выше. Одна и та же карта, один и тот же фреймворк, разница только в числе одновременных запросов — и пропускная способность на семимиллиардной модели растёт с 3,4 до 8 тысяч токенов в секунду. Это не разные карты и не разные драйверы. Это разные вопросы.
Отсюда первое правило чтения замеров: сравнивать можно только строки с одинаковыми условиями. Замер соседа, снятый при других длинах и другой нагрузке, к вашему выбору отношения не имеет, каким бы авторитетным ни был источник.
Ловушка: больше токенов, мёртвый сервис
Самая поучительная пара строк в таблице — тридцатидвухмиллиардная модель на A100. При пятидесяти одновременных запросах она выдаёт 577 токенов в секунду, при трёхстах — 721. Пропускная способность выросла. Отлично?
Время до первого токена при этом выросло с 1,3 секунды до 67 секунд. Человек, задавший вопрос, больше минуты смотрит в пустой экран. Формально система стала производительнее, практически — перестала быть сервисом.
Причина простая: очередь. Запросов больше, чем карта может взять в работу, они ждут, суммарная выработка растёт за счёт плотной упаковки, а задержка каждого отдельного запроса уходит в потолок. Для пакетной обработки — разбор архива за ночь, разметка, переиндексация — это нормальный и даже желательный режим. Для живого диалога — нет.
Отсюда второе правило: рядом с пропускной способностью всегда смотрите время до первого токена. Замер, где его не приводят, отвечает только на половину вопроса.
Почему у карты поменьше бывает быстрее
Две последние строки таблицы выглядят абсурдно: на одной и той же RTX 4090 трёхмиллиардная модель выдаёт 7 214 токенов в секунду, а девятимиллиардная — 473. Разница в пятнадцать раз при разнице в размере втрое.
Дело не в вычислениях, а в памяти. Веса девятимиллиардной модели занимают 18,5 ГБ из 24 доступных. На KV-кэш — то есть на контекст и на одновременные запросы — остаётся меньше шести гигабайт. Карта физически не может держать много запросов сразу, и вся выгода от пакетной обработки исчезает.
Практический вывод, который постоянно упускают при подборе: «модель помещается» и «модель работает быстро» — разные пороги. Влезть по весам мало; нужен запас памяти под контекст и параллельные запросы. Именно поэтому память под задачу считается по архитектуре модели, а не по числу параметров.
И следствие для квантования: перевод весов в 8 или 4 бита освобождает место не только под саму модель, но и под кэш — то есть влияет на скорость сильнее, чем кажется по одной лишь экономии на весах.
Как перевести это в рубли
Токены в секунду становятся понятной величиной, когда превращаются в рубли за миллион. Арифметика простая: умножаем пропускную способность на 3 600 — получаем токенов в час; делим на миллион — получаем миллионов в час; делим на них часовую ставку аренды — получаем цену миллиона токенов.
Например, 3 363 токена в секунду это примерно 12,1 миллиона в час. При ставке 164 ₽/час миллион токенов обходится примерно в 14 ₽. Для сравнения: самый дешёвый тариф российского API стоит 65 ₽ за миллион.
Но у этой арифметики есть условие, которое перечёркивает всё, если его не выполнить: карта должна быть загружена. Ставка платится за каждый час владения, а не за обработанные токены. Карта, работающая четверть времени, даёт цену токена вчетверо выше расчётной — и легко проигрывает подписке.
И последнее, о чём забывают в сравнениях: цена токена — не цена качества. Трёхмиллиардная модель даёт самый дешёвый токен в нашей таблице и при этом решает далеко не всякую задачу. Сначала проверяется пригодность модели, и только потом считается её цена.
Что спрашивать у поставщика замера
Если вам показывают цифру производительности — свою или чужую, — вопросов ровно шесть. Какая модель и в какой разрядности. Какой длины вход и выход. Сколько одновременных запросов. Каким инференс-сервером и какой версии. Какое время до первого токена. И на какую дату снят замер.
Замер без этих ответов не является аргументом. Это не придирка: разброс, который мы разобрали выше, получен на одной карте и одном фреймворке — сменив что-то ещё, легко получить и большую разницу.
Мы собственный стенд пока не строили и берём опубликованные измерения — ровно потому, что публикации, на которые стоит опираться, эти условия приводят. Все использованные замеры перечислены на странице цены токена со ссылками, датой публикации и датой, когда мы их читали.