ZeroQuant и квантование: как сжатие модели меняет выбор GPU
Одна и та же модель на 70 миллиардов параметров требует то ста сорока гигабайт видеопамяти, то тридцати пяти. Разница — в разрядности, в которой хранятся её веса. Квантование переводит «нужен кластер» в «хватит одной карты», и поэтому решение о нём принимается раньше, чем решение о железе, а не после.
Сравнительная таблица
| Разрядность | Байт на параметр | Память под 70B, ориентир |
|---|---|---|
| FP16 | 2 | около 140 ГБ |
| INT8 / FP8 | 1 | около 70 ГБ |
| INT4 | 0,5 | около 35 ГБ |
Два разных «ZeroQuant», и это стоит развести сразу
ZeroQuant — метод квантования нейросетей, разработанный в Microsoft, вместе с продолжениями ZeroQuant-V2 и ZeroQuant-FP. Это программная работа: она о том, как сжать большую языковую модель, потеряв при этом как можно меньше качества.
ЗероКвант — этот сайт. Мы алгоритм не разрабатываем и к нему отношения не имеем. Совпадение названий оказалось удобным по существу: квантование напрямую решает, какой ускоритель вам нужен, а это и есть наш предмет.
Дальше в статье речь о квантовании как приёме, а не о конкретной реализации: практический вывод от неё не зависит.
Что такое квантование простыми словами
Нейросеть хранит веса числами. По умолчанию это FP16 — два байта на число. Квантование переводит их в более грубый формат: INT8 или FP8 — байт, INT4 — половина байта. Модель занимает в два-четыре раза меньше памяти и считается быстрее.
Плата за это — точность. При аккуратном методе потеря невелика и на большинстве задач незаметна, но она есть, и «незаметна» — не то же самое, что «отсутствует». На задачах, где важен разбор длинных документов или строгие рассуждения, разницу проверяют на своём материале, а не принимают на слово.
Отсюда правило, которое стоит держать в голове: квантование — это размен качества на железо. Спор о том, стоит ли он того, решается замером на вашей задаче, а не общими словами.
Почему это вопрос о железе, а не только о софте
Объём видеопамяти — главное ограничение при запуске языковой модели. Грубый ориентир под веса считается умножением: число параметров на число байт в разрядности.
Модель на 70 миллиардов параметров в FP16 — это около 140 ГБ, то есть несколько карт и сервер под них. В INT8 — около 70 ГБ. В INT4 — около 35 ГБ, и она помещается на одну-две карты. Одно решение о разрядности меняет проект целиком: сумму, срок поставки, требования к питанию и охлаждению.
Обратное тоже верно. Если нужна полная разрядность — из-за требований к точности или потому что модель ещё предстоит дообучать, — требование к памяти и числу карт растёт, и никакая экономия на ускорителе этого не отменит.
Память под веса по разрядности
Ориентир ниже — только под веса. Реальное требование выше: к весам добавляется память под контекст (KV-кэш), и на длинном контексте с несколькими одновременными пользователями она обгоняет сами веса.
Именно поэтому «модель на 8 миллиардов влезет в карту на 24 ГБ» верно для одного человека и неверно для отдела. Расчёт под конкретную модель, длину контекста и число пользователей считается в каталоге открытых моделей — там архитектура известна точно, а не угадывается по числу параметров.
Как это использовать при выборе оборудования
Порядок действий, который экономит больше всего денег, обратный привычному. Сначала решается, в какой разрядности вы будете работать, потом считается память под неё, и только потом выбирается карта — а не наоборот.
Если планируется квантованный инференс, гнаться за флагманом не нужно: подойдёт ускоритель с меньшим объёмом памяти, и стоимость проекта падает кратно. Если нужна полная разрядность или обучение — считать надо сразу под несколько карт.
И прежде чем покупать что-либо, стоит посмотреть на первый способ запуска: чужой API вместо своей карты. Он не требует ни закупки, ни квантования вовсе — модель работает у поставщика, а вы платите за токены.