AirLLM — запуск 70B языковых моделей на GPU с 4 ГБ видеопамяти

· 2 мин чтения
llm inference python open-source local-ai
📂 Исходный код на GitHub

Open-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 — запуск 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')

Конфигурации

При инициализации модели доступны следующие опции:

  • compression4bit или 8bit для block-wise квантизации, по умолчанию None
  • profiling_modeTrue для вывода времени выполнения операций
  • 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