Квантизация LLM: как запихнуть 70B модель в свою видюху. llm.. llm. MoE архитектура.. llm. MoE архитектура. Natural Language Processing.. llm. MoE архитектура. Natural Language Processing. Блог компании Cloud.ru.. llm. MoE архитектура. Natural Language Processing. Блог компании Cloud.ru. веса моделей.. llm. MoE архитектура. Natural Language Processing. Блог компании Cloud.ru. веса моделей. искусственный интеллект.. llm. MoE архитектура. Natural Language Processing. Блог компании Cloud.ru. веса моделей. искусственный интеллект. квантизация.. llm. MoE архитектура. Natural Language Processing. Блог компании Cloud.ru. веса моделей. искусственный интеллект. квантизация. Машинное обучение.. llm. MoE архитектура. Natural Language Processing. Блог компании Cloud.ru. веса моделей. искусственный интеллект. квантизация. Машинное обучение. оптимизация.. llm. MoE архитектура. Natural Language Processing. Блог компании Cloud.ru. веса моделей. искусственный интеллект. квантизация. Машинное обучение. оптимизация. трансформеры.

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

Сегодня в статье разберем, как работает чудо квантизации под капотом, чем отличаются PTQ и QAT, почему MoE-модели (DeepSeek-V3, Mixtral, LLaMA 4 Scout) квантизовать сложнее и как выбрать между GPTQ, GGUF и AWQ.

Материал будет полезен как мимо проходящим ИИ-любопытствующим, так и хардкорным ML-инженерам и специалистам по инференсу LLM, которые хотят запускать большие модели на ограниченном железе. Покажу, как все это гонять на практике и с кодом.

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

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

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

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

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

Вот вам наглядно LLaMA 3 70B при разной точности:

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

Для MoE-моделей типа DeepSeek-V3 671B квантизация — это вообще вопрос жизни и смерти. Без нее модель жрет 2 600+ ГБ памяти. Чтобы прикинуть объем, вернитесь наверх к КДПВ, приглядитесь и увидите на ней сравнение объема памяти для LLM при разной точности для Dense и MoE.

Модель/Точность

FP32 (4 байт/пар.)

FP16/BF16 (2 байт/пар.)

INT8 (1 байт/пар.)

INT4 (0.5 байт/пар.)

LLaMA 3 8B (8B)

~32.0 ГБ

~16.0 ГБ

~8.0 ГБ

~4.0 ГБ

Mistral 7B (7B)

~28.0 ГБ

~14.0 ГБ

~7.0 ГБ

~3.5 ГБ

LLaMA 3 70B (70B)

~280.0 ГБ

~140.0 ГБ

~70.0 ГБ

~35.0 ГБ

Mixtral 8x7B (MoE) (46.7B)

~186.8 ГБ

~93.4 ГБ

~46.7 ГБ

~23.4 ГБ

DeepSeek-V3 (MoE) (671B)

~2684.0 ГБ

~1342.0 ГБ

~671.0 ГБ

~335.5 ГБ

Qwen 3.5-235B (MoE) (235B)

~940.0 ГБ

~470.0 ГБ

~235.0 ГБ

~117.5 ГБ

Приблизительная оценка: параметры × байт/параметр. Реальное потребление может быть выше из-за KV-cache, активаций и overhead

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

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

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

FP3232 бит

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

FP1616 бит

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

BF1616 бит

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

INT8 / INT48–4 бит

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

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

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

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

  1. Находятся минимальное и максимальное значения весов в исходном формате FP32.

  2. Диапазон линейно отображается на целевой формат (например, −128…127 для INT8).

  3. Вычисляется коэффициент масштабирования (scale).

  4. Каждое значение умножается на scale и округляется до ближайшего целого.

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

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

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

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

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

Если коротко, есть два основных способа заменить тяжелые и точные числа на более компактные так, чтобы модель уменьшилась, а энергопотребление при инференсе сократилось без заметной потери качества.

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

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

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

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

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

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

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

Метод

Основное применение

Плюсы

Минусы

GPTQ

Быстрый инференс на GPU

Высокая скорость, хорошая точность

Плохая поддержка CPU

GGUF

CPU и GPU (гибридный режим)

Отличная поддержка CPU, простота

Может быть медленнее GPTQ на GPU

AWQ

Инференс на GPU

Высокая скорость и точность

Менее распространен

Короче, что выбрать

Гоняете на CPU или хотите гибрид CPU+GPU? → GGUF (llama.cpp, Ollama, LM Studio).

Нужна максимальная скорость на GPU? → GPTQ или AWQ.

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

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) дальше обрабатывают токен, остальные сидят без дела и в вычислении не участвуют.

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

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

Вот в чем засада

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

И вот мы уже имеем целый хит-парад проблем, тонкостей и нюансов:

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

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

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

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

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

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

Компонент

Точность

Обоснование

Attention

INT8

Умеренная чувствительность

Router / Gating

FP16

Критичен для маршрутизации

Shared Expert

INT8

Всегда активен

Hot Experts

INT8

Частая активация

Cold Experts

INT4

Редкая активация

Что это дает на практике

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

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

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


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 StudioGUI для людей

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

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

Суффикс

Описание

Рекомендация

Q2_K

2-битная, очень агрессивная

Только для слабого железа

Q4_K_M

4-битная, сбалансированная

Лучший выбор для большинства

Q5_K_M

5-битная, высокое качество

Если есть запас VRAM

Q8_0

8-битная, почти без потерь

Для максимального качества

Итого 🫡

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

Квантизация — это то, что делает LLM доступными не только корпорациям с лярдами на GPU. Для dense-моделей экономия памяти в 4–8 раз. Для MoE-моделей — единственный способ запустить гигантов типа DeepSeek 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

Автор: mr8bit

Источник