← На главную

Салфеточный расчёт: токен на NVIDIA B200 стоит от $6k до $133 на юзера

16.06.2026 18:57 · hackernews

Посчитать, во сколько обходится генерация одного токена в LLM, можно буквально «на салфетке» — если знать характеристики GPU и архитектуру модели. Автор разбирает математику шаг за шагом.

Любое матричное умножение (matmul) — это пара уравнений: количество обращений к памяти и число операций с плавающей точкой. Для произведения матриц (A_{N \times d}) и (B_{d \times M}) оба значения равны (2NMd). С оптимизацией tiling число чтений памяти падает примерно до (d(N+M)).

Дальше — attention. На каждом слое модели хранятся матрицы (W_Q, W_K, W_V): вход (X) умножается на них, затем считаются (Q \cdot K^T), применяется softmax, результат умножается на (V). Когда модель обрабатывает длинные диалоги (до 200k токенов), без трюков нагрузка бешеная: на один токен уходит 26 трлн операций и 1,7 млрд чтений памяти. Это в десятки тысяч раз больше вычислений, чем загрузок — GPU простаивает.

Спасает KV Cache. LMM авторегрессионны: каждый новый токен начинается с пересчёта всей истории. Если кешировать пары (K) и (V) для каждого слоя, то на каждом шаге обрабатывается только последний токен. Математика резко меняется: на один токен — 52,4 млн операций и 26,2 млн чтений памяти. Всего два вычисления на байт.

Автор берёт эталон — NVIDIA B200. Его характеристики: пропускная способность памяти 8 TB/s, вычислительная мощность 4500 TFLOP/s. Чип может делать 562 операции на каждый загруженный байт. Чтобы нагрузить его полностью, нужно (\text{2B} = 562), то есть (B = 331) пользователь одновременно. Это теоретический потолок.

На практике всё упирается в VRAM. 32B-модель весит 32 GB. Для контекста в 200k токенов, 64 слоёв и размерности (d=8192) KV Cache занял бы 210 GB. Оптимизация Grouped-Query-Attention сжимает его в 8 раз — до ~26 GB на один диалог. После вычета весов остаётся 160 GB: всего 6 параллельных контекстов. Это удручающе мало.

Здесь в игру вступает PagedAttention — техника, которую использует движок vLLM. Она разбивает KV Cache на блоки и выделяет их по мере роста длины диалога. «Холодные» сессии выгружаются. С учётом реальной длины разговоров (4–40k токенов) один B200 обслуживает 40–60 пользователей. Но люди в чатах часто читают, а не генерируют — duty cycle GPU падает до 20%. Это даёт уже 300–800 пользователей на чип в комфортном режиме.

Скорость генерации: один проход двигает 190 GB данных из VRAM в регистры за 23,75 мс и вычисляет за 0,5 мс. За секунду выходит ~40 токенов на пользователя — больше скорости чтения. Стоимость: при покупке B200 ($40 000) lifetime cost на пользователя — от $6k при полной утилизации до $133 при 300 пользователях. Аренда — $4/час, или $0,013 в час на пользователя, то есть примерно $9,36 в месяц.

Оценка консервативная: не учтены агентные циклы с высоким duty cycle. Для моделей на нескольких GPU логика та же, но на салфетке считать уже не стоит.

Читать оригинал →