AirLLM — запуск 70B языковых моделей на GPU с 4 ГБ видеопамяти
📂 Исходный код на GitHubOpen-source библиотека для запуска больших языковых моделей на малом объёме видеопамяти: 70B — на 4 ГБ, Llama 3.1 405B — на 8 ГБ, DeepSeek-V3 (671B) — на ~12 ГБ, Kimi K3 (2.8T) — меньше чем на 4 ГБ. Послойная потоковая загрузка с диска, block-wise квантизация для ускорения до 3 раз, поддержка Llama, Qwen, DeepSeek, Mistral, Phi, Gemma и других.
AirLLM — запуск 70B языковых моделей на GPU с 4 ГБ видеопамяти
AirLLM — open-source Python-библиотека, которая кардинально снижает потребление видеопамяти при инференсе больших языковых моделей. 70B-модель запускается на единственной GPU с 4 ГБ VRAM — без квантизации, дистилляции и прунинга. Llama 3.1 405B работает на 8 ГБ, DeepSeek-V3 (671B) — примерно на 12 ГБ, а Kimi K3 (2.8T), крупнейшая открытая модель на момент выхода, — меньше чем на 4 ГБ.
Проект автора Gavin Li распространяется под лицензией Apache-2.0, собрал более 31 тысячи звёзд на GitHub и устанавливается одной командой через pip.
Как это работает
Традиционный инференс требует загрузить всю модель в видеопамять. AirLLM идёт другим путём: в VRAM одновременно находится только один слой модели. Слои хранятся на диске (в идеале на быстром NVMe) и потоково подгружаются по мере вычислений.
Отсюда главное следствие: объём нужной видеопамяти зависит от размера отдельного слоя, а не от модели целиком. Именно поэтому 671B-модель помещается на любительскую видеокарту.
Для разреженных MoE-моделей (Mixture of Experts) потоковый подход ещё выгоднее: вместо целого слоя загружаются только те эксперты, в которые фактически маршрутизируется текущий токен. Так Kimi K3 умудряется работать в 3.72 ГБ VRAM (замер end-to-end на одной RTX 6000 Ada).
Нюанс: при первом запуске AirLLM раскладывает оригинальную модель послойно и сохраняет shards — процесс затратен по диску, поэтому нужно следить за свободным местом в huggingface-кэше.
Быстрый старт
pip install airllm
Инференс выглядит как работа с обычной transformers-моделью — достаточно передать Hugging Face ID или локальный путь:
from airllm import AutoModel
MAX_LENGTH = 128
# just pass a hugging face repo id — works with almost any popular model:
model = AutoModel.from_pretrained("Qwen/Qwen3-32B")
# go bigger with the exact same one line:
#model = AutoModel.from_pretrained( S1 ) # 235B, runs in ~3GB
#model = AutoModel.from_pretrained( S2 ) # 671B, runs in ~12GB
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=MAX_LENGTH,
padding=False)
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=20,
use_cache=True,
return_dict_in_generate=True)
output = model.tokenizer.decode(generation_output.sequences[0])
print(output)
AutoModel автоматически определяет тип модели — указывать конкретный класс вручную не нужно. Для gated-моделей вроде meta-llama/Llama-2-7b-hf передаётся hf_token. Есть готовые Colab-ноутбуки с примерами.
Сколько нужно видеопамяти
| Модель | Размер | GPU VRAM |
|---|---|---|
| Qwen3 / Mistral / Phi (≈8B) | 8B | ~1–2 ГБ |
| Qwen3-30B / Mixtral (MoE) | 30–47B | ~1–3 ГБ |
| Qwen3-235B (MoE) | 235B | ~3 ГБ |
| Llama 3.x 70B (full precision) | 70B | ~4 ГБ |
| Llama 3.1 405B | 405B | ~8 ГБ |
| DeepSeek-V3 | 671B | ~12 ГБ |
Одна и та же строчка кода для всех моделей — специальная настройка не требуется.
Сжатие моделей: ускорение до 3 раз
Узкое место послойного подхода — чтение с диска. Чтобы его сузить, в AirLLM добавили сжатие на основе block-wise квантизации: объём загружаемых данных уменьшается, и инференс ускоряется до 3 раз при почти незаметной потере точности. Подробности и обоснование выбора block-wise квантизации — в статье авторов.
Важное отличие от классической квантизации: обычно приходится квантизовать и веса, и активации, что усложняет сохранение точности из-за выбросов во входных данных. Поскольку bottleneck здесь — загрузка с диска, достаточно квантизовать только веса.
Включается одним аргументом (потребуются bitsandbytes и airllm не ниже 2.0.0):
model = AutoModel.from_pretrained("garage-bAInd/Platypus2-70B-instruct",
compression='4bit')
Конфигурации
При инициализации модели доступны следующие опции:
- compression —
4bitили8bitдля block-wise квантизации, по умолчаниюNone - profiling_mode —
Trueдля вывода времени выполнения операций - layer_shards_saving_path — альтернативный путь для сохранения разбитой на слои модели
- hf_token — токен Hugging Face для скачивания gated-моделей
- prefetching — предзагрузка слоёв с перекрытием загрузки и вычислений; включена по умолчанию и даёт около 10% ускорения
- delete_original — удалить исходную модель после трансформации, чтобы сэкономить половину дискового пространства
Поддерживаемые модели
AirLLM работает из коробки практически с любой популярной открытой LLM — достаточно передать её Hugging Face ID в AutoModel.from_pretrained(...). Покрываются все основные семейства: Llama (2 / 3 / 3.1 / 3.3 / 4), Qwen (1 / 2 / 2.5 / 3, включая MoE и FP8), DeepSeek (V2 / V3 / R1), Mistral и Mixtral, Phi, Gemma, ChatGLM, Baichuan, InternLM, Yi — большинство новых моделей поддерживаются почти сразу после релиза.
Помимо CUDA-GPU, доступен запуск на macOS (только Apple Silicon, через mlx) и CPU-инференс.
Ограничения
Цена экономии видеопамяти — скорость: слои читаются с диска на каждом проходе, поэтому генерация значительно медленнее, чем у модели, целиком размещённой в VRAM. AirLLM уместен там, где важно просто запустить огромную модель на доступном железе, а не выжать пропускную способность: разовые эксперименты, батч-обработка, знакомство с моделью перед решением о развёртывании.
Стоит также учитывать требования к диску: и исходная модель, и её послойная разбивка должны помещаться в huggingface-кэш (частично решается delete_original=True).
Развитие проекта
Проект активно развивается с ноября 2023 года. Ключевые вехи: v2.0 с поддержкой сжатия (декабрь 2023), AutoModel и prefetching, запуск на macOS, поддержка Llama 3.1 405B и 4/8-битной квантизации (июль 2024), v3.0 с поддержкой FP8-моделей (июнь 2026) и запуск Kimi K3 в 3.72 ГБ VRAM (июль 2026). Часть кода основана на работе SimJeg из соревнования Kaggle LLM Science Exam.
Репозиторий: github.com/lyogavin/airllm, пакет на PyPI: airllm.
Источник: https://github.com/lyogavin/airllm