Повечето хора оразмеряват inference сървър по TFLOPS. После моделът не се побира, или се побира и върви на една трета от очакваната скорост. И двата провала идват от едно и също място: inference опира в паметта, не в изчислителната мощ.
Ето сметката — и частта от нея, която оценките обикновено пропускат.
Стъпка 1: теглата
Теглата на модела искат параметри × байта на параметър:
| точност | байта/параметър | 7B | 13B | 34B | 70B |
|---|---|---|---|---|---|
| FP16 / BF16 | 2 | 14 GB | 26 GB | 68 GB | 140 GB |
| INT8 | 1 | 7 GB | 13 GB | 34 GB | 70 GB |
| INT4 | 0.5 | 3.5 GB | 6.5 GB | 17 GB | 35 GB |
При тази таблица планирането обикновено спира. Не бива.
Стъпка 2: KV кешът — това, което всички забравят
Всеки токен, който моделът вече е видял, се пази като key/value тензор, за да не се пресмята наново. Този кеш расте с дължината на контекста и с колко заявки обслужваш едновременно:
KV_байта = 2 × слоеве × KV_глави × head_dim × контекст × batch × байта
Двойката е за K и V. За модел от класа 70B с 80 слоя, 8 KV глави (grouped-query attention) и head_dim 128, при FP16:
- 8k контекст, batch 1 → ~2.6 GB
- 32k контекст, batch 1 → ~10 GB
- 32k контекст, batch 16 → ~168 GB
Последният ред съсипва планове. Теглата бяха 140 GB и изглеждаха като целия проблем; шестнайсет едновременни потребителя при дълъг контекст повече от удвояват изискването.
Практическото следствие: решаваш дължината на контекста и едновременността преди да избереш карта. Сървър, оразмерен за batch 1, е демонстрация, не услуга.
Стъпка 3: добави режийните
Фреймуъркът, CUDA контекстът, активациите и фрагментацията заемат реално място. Заложи 10–15% отгоре върху тегла + KV. Ако резултатът излезе в рамките на няколко гигабайта от капацитета на картата, приеми, че не се побира — разликата ще я платиш при първия дълъг prompt.
Защо лентата на паметта тежи повече от TFLOPS
За всеки генериран токен активните тегла се четат изцяло от паметта. При batch 1 това е доминиращият разход, а таванът е:
токени/секунда ≈ лента_на_паметта / активни_байта_на_токен
Модел от 70B в INT8 чете около 70 GB на токен. На карта с ~1400 GB/s лента това опира в около 20 токена/секунда — независимо колко TFLOPS пише на спецификацията. Изчислителните ядра стоят и чакат паметта.
Затова при inference числото за лента заслужава повече внимание от числото за FLOPS. На собствената ни сглобка измерихме 1396.4 GB/s — числото е в казуса за верификацията във Vast.ai, заедно с това какво още проверява платформата.
Batching-ът променя картината: при много едновременни заявки едно и също прочитане на теглата обслужва няколко токена и изчислителната мощ пак започва да значи. Точно затова едновременността е част от решението за оразмеряване, а не бележка под линия.
Изборът на карта
VRAM на карта бие общия VRAM. Две карти по 48 GB не са една от 96 GB. Разделен между GPU-та модел праща всеки токен през interconnect-а, а tensor-parallel режийните са реални. Ако можеш — побери модела в една карта.
- RTX 5090, 32 GB — удобна за 7B–13B при FP16 или ~30B при INT8, при умерен контекст. Отлични токени на евро, докато моделът се побира.
- RTX PRO 6000 Blackwell, 96 GB — държи 70B в INT8 с място за истински KV кеш, на една карта. От този размер нагоре 70B на една карта спира да е компромис.
- Няколко карти — необходими над това, или при много едновременни потоци с дълъг контекст. Планирай interconnect-а, не само броя карти.
Хостът не е подробност
GPU-то става тясното място само ако хостът му позволи. Заложи:
- Системна RAM ≥ VRAM. Моделите се зареждат през хост паметта; недостигът тук превръща всеки старт в swap буря.
- NVMe, не SATA. Модел от 140 GB от бавен диск са минути зареждане при всеки рестарт.
- Процесорни нишки за предварителна обработка. Токенизацията, декодирането и обработката на заявки са работа за процесора. Недохранен хост кара скъпо GPU да чака.
- Мрежа, ако обслужваш други: 10 GbE е разумният под.
Разгърнат пример
Обслужване на 70B модел в INT8, 16k контекст, до 8 едновременни заявки:
тегла 70 GB
KV кеш (16k × 8) ~42 GB
режийни (~12%) ~13 GB
───────────────────────────
общо ~125 GB
Това не се побира в една карта от 96 GB. Вариантите: слизане до INT4 (~35 GB тегла, общо ~90 GB — побира се), намаляване на едновременността до 4 (~104 GB — още е на ръба), или две карти. Решението за оразмеряване и решението за квантизация са едно и също решение — затова не бива да се вземат от различни хора в различно време.
Сметни своя случай
Прекарай своя модел, контекст и едновременност през сметката по-горе, преди да правиш списък с хардуер. Ако излезе в полза на покупката, конфигурирай сървър и до 24 часа се връщаме със спецификация и цена. Ако още решаваш дали изобщо да притежаваш хардуера, пречупната точка между наем и покупка е текстът преди този, а GPU ROI калкулаторът смята това с живи пазарни цени.
Накрая една уговорка, защото ръководствата за оразмеряване обичат да обещават твърде много: това са планови стойности. Реалната пропускливост зависи от твоя фреймуърк, качеството на квантизацията, планировчика на batch-овете и формата на prompt-а. Ползвай ги, за да отхвърлиш конфигурации, които явно не могат да работят — и бенчмаркни тази, която оцелее.