Все статьи
· 9 мин чтения

Квантизация LLM: Как запихнуть 70B модель в твою видюху 🫡

Разбираю квантизацию LLM по полочкам — от FP32 до INT4, GPTQ, AWQ, GGUF, MoE и практические примеры. Без воды, с кодом и шизой.

Квантизация LLM: Как запихнуть 70B модель в твою видюху 🫡

Квантизация LLM: Как запихнуть 70B модель в твою видюху 🫡

Ну чё, малютки, думаете что для запуска LLaMA 3 70B вам нужна серверная стойка за лярд рублей? Поздравляю, вас обманули маркетологи GPU-вендоров. Модели с сотнями миллиардов параметров — LLaMA 3 70B, DeepSeek-V3 с его 671 лярдом параметров — жрут VRAM как не в себя. Но есть способ запихнуть это всё в обычную потребительскую видюху.

🔥 Суть за 5 секунд

Квантизация — сжимаем модель в 4–8 раз, теряем минимум качества. Это как JPEG для нейросетей — выглядит почти так же, весит в разы меньше. Без этого трюка LLM на обычном железе — фантастика.

Короче, в этом посте я разложу по полочкам: что такое квантизация, как она работает под капотом, какие форматы существуют, почему MoE-модели — это отдельная головная боль, и покажу как всё это гонять на практике с кодом.


Что за квантизация и нахуя она нужна?

Смотри, малютки. Каждый параметр модели — это число. По дефолту оно хранится как FP32 (32-битное число с плавающей запятой) — 4 байта на один параметр. Квантизация — это когда мы берём и говорим: «а давай хранить это число не в 32 битах, а в 8 или даже 4». Точность падает, но модель продолжает работать. Магия? Нет, математика.

💡 Аналогия для тех, кто не в теме

Представь, что ты сжимаешь фотку в JPEG. Пиксели теряют часть цветовой информации, файл весит в 10 раз меньше, а глазом разницу хрен заметишь. Квантизация — то же самое, только для весов нейросети.

Сколько памяти это реально экономит?

Малютки, вот вам наглядно — LLaMA 3 70B при разной точности:

FP32 (полная точность) 280 ГБ
FP16 (половинная) 140 ГБ
INT8 70 ГБ
INT4 35 ГБ

Для MoE-моделей типа ДикойПсины (DeepSeek-V3, 671B) квантизация — это вообще вопрос жизни и смерти. Без неё модель жрёт 2600+ ГБ памяти. Кек.

Сравнение объёма памяти для LLM при разной точности (Dense vs MoE)

🧮 Калькулятор VRAM
Требуется VRAM:~280.0 ГБ
* Приблизительная оценка: параметры × байт/параметр. Реальное потребление может быть выше из-за KV-cache, активаций и overhead.

Как это работает под капотом?

Ладно, малютки, давайте разберёмся что там внутри. Сначала — форматы данных, без них никуда.

Форматы данных: от жирного FP32 до худого INT4

FP32 32 бит

Жирный дефолт. 4 байта на параметр. Максимальная точность, максимальный жор памяти. Для инференса — оверкилл.

FP16 16 бит

Вдвое легче. Диапазон поменьше, но для инференса хватает за глаза. Стандарт для большинства тачек.

BF16 16 бит

Хитрый формат — сохраняет динамический диапазон FP32, жертвуя точностью. Любимец тех, кто обучает модели.

INT8 / INT4 8–4 бит

Максимальное сжатие. Тут уже нужны спецтехники, чтобы модель не превратилась в мусор. Но если всё сделать правильно — годнота.

Форматы представления чисел в нейронных сетях

Как именно происходит сжатие

Окей, малютки, теперь самое вкусное. Квантизация — это маппинг диапазона значений из FP32 в более компактный формат. Самый базовый метод — линейная квантизация:

1 Находятся минимальное и максимальное значения весов в исходном формате FP32
2 Диапазон линейно отображается на целевой формат (например, −128…127 для INT8)
3 Вычисляется коэффициент масштабирования (scale)
4 Каждое значение умножается на scale и округляется до ближайшего целого

Процесс квантизации из FP32 в INT8

⚠️ ⚠️ Ошибка квантизации

Процесс необратимый — информация теряется. Чем меньше бит, тем больше потери. Современные методы типа GPTQ и AWQ используют хитрые алгоритмы, чтобы минимизировать эту ошибку, но полностью избежать её нельзя. Такова цена дешёвого инференса.

Ошибка квантизации при разной точности


PTQ vs QAT: два подхода, две судьбы

Post-Training Quantization (PTQ) Быстро и дёшево

Берём готовую модель → конвертим веса в INT8/INT4. Не нужно переобучение, не нужны тачки с кучей GPU. Минус — при агрессивном сжатии до 4 бит качество может просесть. Но для большинства задач — топ.

Quantization-Aware Training (QAT) Дорого, но точно

Модель учится жить с низкой точностью прямо во время тренировки. Нужны GPU, время и терпение. Зато на выходе — лучшее качество при том же уровне сжатия. Если есть ресурсы — однозначно стоит.

Сравнение подходов PTQ и QAT


Форматы квантизации: GPTQ, GGUF, AWQ — что выбрать?

Ладно, малютки, теория — это хорошо, но на практике вам придётся выбирать между конкретными форматами. Вот что есть:

МетодОсновное применениеПлюсыМинусы
GPTQБыстрый инференс на GPUВысокая скорость, хорошая точностьПлохая поддержка CPU
GGUFCPU и GPU (гибридный режим)Отличная поддержка CPU, простотаМожет быть медленнее GPTQ на GPU
AWQИнференс на GPUВысокая скорость и точностьМенее распространён
Короче, что выбрать

Гоняешь на CPU или хочешь гибрид CPU+GPU? → GGUF (llama.cpp, Ollama, LM Studio). Нужна максимальная скорость на GPU? → GPTQ или AWQ. Не усложняй.

Сравнение методов квантизации


MoE-модели: отдельная головная боль 🗑️🔥

Малютки, если вы думали что квантизация dense-моделей — это сложно, то добро пожаловать в мир Mixture of Experts (MoE). Это когда модель содержит кучу специализированных «экспертных» подсетей, но для каждого токена активирует только парочку из них. Звучит эффективно? Ну, есть нюансы.

💡 Кто использует MoE

Mixtral 8x7B (Mistral AI), DeepSeek-V3 (671B, активно ~37B), Qwen3.5-235B (активно ~22B), LLaMA 4 Scout (109B, активно ~17B) — все топовые модели последнего года.

Как работает эта штука

В каждом слое трансформера вместо одного FFN-блока — набор экспертов и Router (маршрутизатор). Router смотрит на токен и решает: «тебе к эксперту №3 и №7». Top-K экспертов обрабатывают токен, остальные сидят без дела.

Архитектура MoE: маршрутизация токенов через экспертов

Почему квантизация MoE — это боль

🔥 Вот в чём засада

MoE активирует только часть экспертов, но ВСЕ веса ВСЕХ экспертов должны сидеть в памяти одновременно. ДикаяПсина V3 с 671 лярдом параметров — все 671 лярд должны быть в VRAM. Квантизация тут не опция, а единственный шанс на жизнь.

🔥 Неравномерная активация Проблема

Одни эксперты пашут как проклятые (hot), другие сидят без дела (cold). Если агрессивно квантизовать «горячих» — качество просядет непропорционально. Решение — mixed-precision: hot → INT8, cold → INT4.

🎯 Router — не трогай! Проблема

Router принимает дискретные решения: «этот токен — к эксперту №5». Даже мелкая ошибка квантизации может отправить токен не к тому эксперту. Поэтому Router не квантизуют — оставляют в FP16.

📊 Калибровка — лотерея Проблема

PTQ требует калибровочный датасет. Но если редкий эксперт не встретился в выборке — его коэффициенты будут мусором. Решение — per-expert sampling, но это доп. геморрой.

📐 Каждый слой — уникальная снежинка Нюанс

Даже внутри одного MoE-блока разные линейные слои по-разному переносят квантизацию. Оптимум — разная битность для каждой матрицы весов. Да, это сложно. Да, это работает.

Квантизация MoE: частота активации и стратегия назначения точности

Моя шпаргалка по квантизации MoE

КомпонентТочностьОбоснование
AttentionINT8Умеренная чувствительность
Router / GatingFP16Критичен для маршрутизации
Shared ExpertINT8Всегда активен
Hot ExpertsINT8Частая активация
Cold ExpertsINT4Редкая активация
Что это даёт на практике

Экономия памяти 60–70% при минимальной потере качества. ДикаяПсина V3 в INT4 — ~336 ГБ вместо 2684 ГБ в FP32. Разница в 8 раз. Это уже реально запустить на кластере из нескольких тачек, а не на целом дата-центре.


Хватит теории — давай код 🔥

Ну чё, малютки, хватит лекций. Самый простой способ пощупать квантизацию руками — bitsandbytes + transformers от Hugging Face. Три строчки конфига — и модель жмётся в 4 бита.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

model_id = "mistralai/Mistral-7B-Instruct-v0.2"

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
)

tokenizer = AutoTokenizer.from_pretrained(model_id)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=quantization_config,
    device_map="auto",
)

prompt = "Расскажи мне короткую историю о роботе, который мечтал стать художником."
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

outputs = model.generate(**inputs, max_new_tokens=150)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
Что получаем

Mistral 7B с NF4-квантизацией влезает в ~5–6 ГБ VRAM вместо ~28 ГБ в FP32. Это RTX 3060, малютки. Обычная геймерская видюха.

Для MoE-моделей — всё то же самое:

model_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=quantization_config,
    device_map="auto",
)
# Без квантизации: ~94 GB VRAM (FP16)
# С INT4 квантизацией: ~24 GB VRAM

Ставим зависимости:

pip install transformers bitsandbytes accelerate

Где брать готовые квантизованные модели?

Лень квантизовать самому? Понимаю. Вот где взять готовое:

🤗 Hugging Face Hub Главный склад

Ищи репозитории от TheBloke — этот чел наквантизовал практически все популярные модели в GGUF, GPTQ и AWQ. Самый большой каталог готовых квантов в открытом доступе. Просто бери и гоняй.

🦙 Ollama Для ленивых

ollama run mixtral — одна команда и модель уже работает. Встроенная библиотека с готовыми квантами. Идеально, если не хочешь разбираться в форматах и конфигах.

🖥️ LM Studio GUI для людей

Графический интерфейс — скачал, запустил, общаешься с моделью. Встроенный поиск по Hugging Face, управление моделями и чат. Для тех, кто не хочет открывать терминал.

Как читать названия файлов (чтобы не скачать мусор)

СуффиксОписаниеРекомендация
Q2_K2-битная, очень агрессивнаяТолько для слабого железа
Q4_K_M4-битная, сбалансированнаяЛучший выбор для большинства
Q5_K_M5-битная, высокое качествоЕсли есть запас VRAM
Q8_08-битная, почти без потерьДля максимального качества

Итого, малютки 🫡

🔥 Главный вывод

Квантизация — это то, что делает LLM доступными не только корпорациям с лярдами на GPU. Для dense-моделей — экономия памяти в 4–8 раз. Для MoE-моделей — единственный способ запустить гигантов типа ДикойПсины V3 на чём-то, что не стоит как квартира в Москве.

Если честно, квантизация — одна из самых недооценённых тем в ML. Все гонятся за новыми архитектурами и лярдами параметров, а реальный прорыв в доступности LLM — вот он, в умном сжатии весов. Разобрались в форматах, поняли нюансы MoE, знаете где брать готовое — теперь можете гонять модели на своём ноутбуке. Вперёд, малютки.


Источники

  1. A Visual Guide to Quantization — Maarten Grootendorst
  2. Quantization for Large Language Models — DataCamp
  3. What new challenges does the MoE architecture introduce for LLM quantization? — Medium
  4. Examining Post-Training Quantization for Mixture-of-Experts — arXiv
  5. TheBloke on Hugging Face