AirLLM обещает запуск 70B моделей на 4GB GPU без квантизации. Разбираем, как это работает, реальную скорость и стоит ли использовать. Читайте!
AirLLM утверждает, что позволяет запускать модели с 70B параметров на видеокарте с 4GB памяти без квантизации, дистилляции и прунинга. Звучит невероятно, но давайте проверим: действительно ли это работает, как настроить и, главное, стоит ли оно того?
Трансформер — это стек слоёв, которые выполняются последовательно: вход → слой 1 → слой 2 → … → слой 80 → выход. Когда вычисляется слой 1, все остальные слои просто занимают место в VRAM, ничего не делая. Обычный инференс загружает все 80 слоёв в память GPU, потому что это быстро. AirLLM задаёт очевидный вопрос: а что если не загружать все сразу? Загрузили слой 1, выполнили, выбросили, загрузили слой 2, выполнили, выбросили.
Теперь требование к VRAM — не размер модели, а размер самого большого слоя. Для 70B модели в FP16 это примерно 1.75GB на слой, что помещается в 4GB с запасом. Сама модель весит 140GB, но живёт на диске, а не в GPU, и потоково подаётся по одному слою за раз. Вот и вся идея, и она действительно работает.
Да, с оговоркой размером с саму модель. Разберём по пунктам.
Математика сходится (~1.75GB на слой в FP16), и это воспроизведено независимыми пользователями. Споров нет.
Это самая интересная часть. Большинство трюков для запуска больших моделей на слабом железе работают за счёт ухудшения модели — сжатия весов с 16 до 4 бит, что снижает точность. AirLLM этого не требует: вы получаете оригинальную, немодифицированную модель в полной точности. Квантизация здесь опциональна — можно передать compression='4bit' для ускорения, но это не обязательно.
Таблица масштабирования из README выглядит абсурдно, но следует той же логике:
Заметили странность? Модель с 2.8 триллионами параметров требует меньше VRAM, чем 671B. Это не ошибка: это Mixture-of-Experts (MoE) модели. В MoE-слое сотни «экспертных» подсетей, но каждый токен обращается только к нескольким из них. Например, Kimi K3 имеет 896 экспертов на слой, но каждый токен использует только 16. Полный слой экспертов занимает ~55GB, но для одного токена нужно всего ~1GB. AirLLM загружает только нужных экспертов, а не весь слой. Разреженная модель → меньше рабочее множество → меньше VRAM. Контринтуитивно, но верно.
Из официальных заметок к релизу v3.1.0 (замеры на RTX 6000 Ada):
Это значит, что ответ из 100 токенов займёт более 8 часов. Автор честно публикует эти цифры, но они не в маркетинговой строке.
Для типичных конфигураций сообщество сообщает: 70B на хорошем NVMe — 5–35 секунд на токен; 70B на MacBook — ~0.07 токенов/сек (~14 с/токен). Для сравнения, llama.cpp с квантизированной 70B на RTX 4090 выдаёт 8–15 токенов в секунду.
Честная формулировка: AirLLM не делает 70B быстрой на 4GB GPU, он делает её возможной.
Чтобы сгенерировать один токен, модель должна прогнать все слои. Значит, AirLLM должен прочитать всю модель с диска для каждого токена. Отсюда формула:
секунд на токен ≈ размер модели на диске ÷ скорость чтения дискаДля 70B в FP16 (~140GB):
Ваш диск — это движок инференса. GPU почти простаивает, ожидая данные. Отсюда два следствия:
compression='4bit' — это уменьшает объём данных для чтения в ~4 раза. README обещает ускорение до 3 раз, и теперь понятно почему: дело не в скорости вычислений, а в объёме перемещаемых данных.Дисковое пространство — главная проблема. AirLLM скачивает модель, затем разбивает её на послойные шарды. Какое-то время на диске лежат обе копии. Для 70B FP16 нужно: ~140GB (оригинал) + ~140GB (шарды) = ~280GB свободного места. Самая частая ошибка в FAQ — safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer — почти всегда означает, что закончилось место на диске.
Также понадобятся: NVMe SSD (не SATA, точно не HDD), как можно больше системной RAM, токен Hugging Face для gated-моделей (например, Llama), и терпение.
pip install airllmДля ускорения с 4-битной квантизацией (рекомендуется):
pip install -U bitsandbytesfrom airllm import AutoModel
model = AutoModel.from_pretrained(
"Qwen/Qwen3-32B",
compression='4bit', # ~3x быстрее; пропустите для полной точности
delete_original=True, # удаляет оригинал после разбиения — экономит ~50% диска
profiling_mode=True, # логирует время по слоям, чтобы видеть узкое место
)
input_text = ['What is the capital of United States?']
input_tokens = model.tokenizer(
input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=128,
padding=False, # избегает частой ошибки токенизатора
)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=20,
use_cache=True,
return_dict_in_generate=True,
)
print(model.tokenizer.decode(generation_output.sequences[0]))Весь API — это. Переключение на 671B модель — одна строка:
model = AutoModel.from_pretrained("deepseek-ai/DeepSeek-V3") # 671B, ~12GB VRAMНачните с малого: сначала запустите 8B модель, чтобы проверить настройку, прежде чем выделять 280GB и несколько часов на скачивание 70B.
compression: '4bit' или '8bit' — блочная квантизация, главный рычаг скоростиdelete_original: удаляет оригинальную загрузку после разбиения — вдвое уменьшает использование дискаlayer_shards_saving_path: сохранить шарды на другой (более быстрый/большой) дискprofiling_mode: логирует время на каждый слойhf_token: для gated-моделей (Llama и др.)prefetching: перекрывает загрузку и вычисления (~10% прирост), включено по умолчаниюMetadataIncompleteBuffer — закончилось место на диске, почти всегда401 Client Error... Repo is gated — передайте hf_token='...'Asking to pad but the tokenizer does not have a padding token — установите padding=FalseValueError: max() arg is an empty sequence — используйте AutoModel, а не конкретный класс моделиmlx и torch, убедитесь, что Python нативный (не Rosetta). В остальном код тот же.Зависит от вашей ситуации.
Интерактивный чат требует ~20+ токенов в секунду, а AirLLM даёт секунды-минуты на токен. Разговора не получится.
Каждый токен читает десятки гигабайт с SSD. Потребительские NVMe рассчитаны на конечное число терабайт записи, а постоянные полные чтения модели и перезапись шардов — не то, для чего они созданы. Кроме того, машина будет практически непригодна для других задач во время работы.
Это реальный сценарий использования. Ключевая идея: дорого загружать слой, а не использовать его. Если загрузить слой 1 и прогнать через него 50 промптов, стоимость загрузки амортизируется на 50 запросов. Один из бенчмарков: 35 с/токен для одного промпта против 5.3 с/токен при батче из 50 — ускорение в 6.6 раза бесплатно. Если нужно классифицировать 10 000 документов за ночь и нет бюджета на GPU, AirLLM — легитимный инструмент. Задержка не важна, когда никто не ждёт.
Исследования эффектов квантизации, численная воспроизводимость, оценка модели как опубликованной — случаи, где 4-битное приближение ломает суть. AirLLM — почти единственный способ сделать это на своём железе.
Заявление реально: 70B на 4GB VRAM, полная точность, без обмана. Инженерная работа умная, стриминг экспертов в MoE впечатляет. Проблема в формулировке: «Запустите 70B на 4GB GPU» подразумевает быстрые ответы на дешёвом железе. На деле вы получаете ответы 70B-качества, но со скоростью минут на токен, где движок — ваш SSD, а GPU простаивает. AirLLM не убирает стоимость запуска большой модели, он переносит её из VRAM во время и дисковый ввод-вывод. Хорош ли такой обмен — зависит от того, чего у вас больше: времени или денег.
Попробуйте AirLLM на небольшой модели, замерьте скорость на своём диске и поделитесь результатами в комментариях — сообществу не хватает данных.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →