← На главную

Опубликовано

125B на одной RTX 4090: AirLLM принес к костру модель весом 360 ГБ

Автор: Гусев Николай [портфолио]

Темы: ai-agents, benchmarks, llm-api, local-models

125B на одной RTX 4090: AirLLM принес к костру модель весом 360 ГБ

Qwen3.8-Flash-Next требует 8 ГБ VRAM, 64 ГБ RAM и очень терпеливый SSD. Разбираю, куда делись остальные сотни гигабайт и чем этот подход отличается от Colibri и FreeToken

Исходный материал - Habr 1079902, где описан запуск Qwen3.8-Flash-Next на одной RTX 4090. Это продолжение темы, о которой я писал ранее: две предыдущие статьи - про Colibri и про FreeToken - были про движки, которые запускают модели, не влезающие в память. Третья - про AirLLM, который делает то же самое на уровне целых слоев.

Полный Qwen3.8-Flash-Next запустили на одной RTX 4090 в bf16, без квантизации и дистилляции. Пик VRAM составил 5,95 ГБ. Сам checkpoint при этом весит около 360 ГБ. Нет, эти 360 ГБ не испарились в процессе установки Python-пакета. AirLLM просто перестал считать видеопамять складом для всей модели.

Это 125B MoE, из которых на один токен активны примерно 6B параметров. Рядом лежит 51B n-gram embedding, есть native vision, thinking включен по умолчанию, контекст достигает 262K токенов. По архитектуре это предварительный взгляд на Qwen4.

В GPU живет только текущий этаж

Decoder состоит из 48 гибридных слоев: Gated DeltaNet, Qwen Sparse Attention и MoE. Один MoE-слой в bf16 занимает несколько гигабайт, но целиком помещается в GPU. Поэтому AirLLM применяет layer-wise inference:

загрузить слой -> посчитать -> освободить -> загрузить следующий

Одновременно в видеопамяти находятся текущий decoder layer, activations и resident vision tower. Вся остальная модель ждет на диске своей очереди. Так пик удержали на 5,95 ГБ, практический бюджет обозначили как 8 ГБ VRAM.

Есть деталь размером 102 ГБ. N-gram embedding подключается внутри одного decoder layer, и обычная загрузка попыталась бы собрать таблицу целиком. Машина с 64 ГБ RAM ответит на это OOM. AirLLM выносит таблицу на host через mmap. CPU выбирает нужные строки, а ОС подкачивает страницы с диска. В RAM не создается полная копия таблицы.

И именно этот механизм, а не чудесное сжатие, описан в исходном разборе на Habr.

Три способа таскать слона через PCIe

Теперь у нашей серии есть три уровня стриминга.

Colibri написан на чистом C и держит плотную часть модели, около 9,9 ГБ в int4, резидентно. Еще 19 456 экспертов лежат на NVMe. Роутер заранее угадывает нужных экспертов с точностью около 71%, после чего движок тащит их с диска. Цена такой свободы видна в скорости: от 0,05 tok/s на системе с холодным кэшем и 25 ГБ RAM до 6,8 tok/s на 6 RTX 5090.

FreeToken, он же FlashML, стримит экспертов через PCIe и адаптивно делит VRAM под кэш. При префилле разреженность MoE почти исчезает: разные токены зовут разных экспертов, и узким местом становится шина. В худшем замере TTFT у FreeToken был 44 с, у llama.cpp 232 с, у KTransformers 946 с.

AirLLM стримит все 48 слоев последовательно. Не надо предсказывать эксперта с точностью 71% или вести сложный VRAM-кэш. Зато каждый проход платит за движение нескольких гигабайт. Физику не отменили, ей выдали новый адрес.

Установка без шаманского бубна, почти

Нужен AirLLM 3.3.0 под MIT и свежий transformers, где qwen4_exp уже находится in-tree. На момент описанного запуска это GitHub main:

pip install -U "airllm>=3.3.0"
pip install git+https://github.com/huggingface/transformers.git

Загрузка модели выглядит так:

from airllm import AutoModel

model = AutoModel.from_pretrained(
 "Qwen/Qwen3.8-Flash-Next",
 delete_original=True,
)

На первом запуске AirLLM разбивает checkpoint по слоям. Одновременно лежат исходные 360 ГБ и новая раскладка, поэтому нужны сотни свободных гигабайт на SSD. delete_original=True удалит исходники после split. Иначе о конце диска сообщит No space left on device.

Что мы получили на самом деле

Минимальная машина: GPU с 8 ГБ VRAM, 64 ГБ RAM и SSD на несколько сотен гигабайт. H100 не нужен. Веса остаются локальными, модель работает offline, принимает изображения и допускает fine-tuning без API.

Но 5,95 ГБ VRAM не означают, что 125B внезапно стали маленькими. Мы обменяли емкость GPU на трафик между SSD, RAM и GPU. Для интерактивной скорости decisive будут пропускная способность диска, PCIe и стоимость 48 последовательных загрузок. В исходном материале замерена память, но не опубликована скорость в tok/s, поэтому обещать производительность я не стану. У костра можно приврать про размер пойманной рыбы, в технической статье это быстро превращается в чужой бюджет на железо.

Продолжение этой линии стоит читать вместе с исходной статьей Habr 1079902, нашим разбором Colibri и второй частью про FreeToken / FlashML. Там хорошо видно, как одна и та же проблема рождает три разных ответа: стримить слои, экспертов через PCIe или экспертов прямо с NVMe.