XYZNOT

Статьи · arXiv 2609.18063

Вторая половина «стены памяти»: инференс моделей MoE на 35B с SSD с помощью обученного предсказания маршрутизации

The Other Half of the Memory Wall: Serving 35B MoEs from SSD with Trained Routing Prediction

Опубликовано cs.AI arXivPDF

Читать с переводом и ИИ

Кратко в трёх строках

  1. 🎯 MoE класса 35B требуют ~19,5 ГБ даже в int4, превышая RAM пользовательских систем, а наивный оффлоадинг на SSD простаивает из-за задержек диска, так как маршрутизация слоя зависит от выхода предыдущего.
  2. 🔧 Edge0 загружает экспертов MoE с SSD в потоковом режиме с помощью послойного прероутера, предсказывающего маршрутизацию на 1 токен вперед («предсказание как маршрутизация»), в паре с необъединенной параллельной recovery LoRA, дистиллированной на шагах ученика.
  3. 📈 Обеспечивает инференс MoE на 35B со скоростью ~20,4 ток/с при пиковой памяти 2,9 ГиБ на Mac mini M4 Pro (24 ГБ), отставая в среднем всего на 3,9 балла в бенчмарках от учителя в fp16.

Аннотация

Инференс моделей Mixture-of-Experts (MoE) на потребительском оборудовании жестко ограничен объемом памяти под веса: модель класса 35B занимает 19,5 ГБ при квантовании в 4-бит, а разреженность уменьшает лишь объем вычислений на токен, но не количество байт, удерживаемых в памяти. Наивный оффлоадинг на SSD сам по себе не решает проблему, поскольку эксперты для слоя N+1 должны выбираться до появления выхода слоя N, из-за чего чтение с диска нельзя начать заранее, чтобы скрыть его за вычислениями. Мы представляем Edge0 — движок потокового инференса MoE, который устраняет эту задержку с помощью прероутера (prerouter): специализированный слой-классификатор предсказывает маршрутизацию для следующего слоя на один токен вперед, и это предсказание используется как сама маршрутизация. В результате подгруженный набор экспертов в точности совпадает с маршрутизируемым, и токены не сбрасываются. Необъединенная recovery LoRA, обученная на траектории ученика, компенсирует потерю качества от квантования int4 и подмены маршрутизации. На одной машине с 24 ГБ Edge0 выполняет инференс MoE на 35B со скоростью 20 ток/с при пиковом объеме активной памяти 3 ГиБ, отставая всего на несколько пунктов от учителя в fp16 на пяти публичных бенчмарках. Версия на 8B работает на том же фреймворке; архитектура, чекпоинты и адаптеры открыты в открытом доступе.

Оригинальная аннотация (англ.)

Mixture-of-experts (MoE) inference on consumer hardware is bounded by weight memory: a 35B-class model is 19.5GB at 4-bit, and sparsity shrinks the compute per token, not the bytes that must be held. Naive offloading to SSD does not help on its own, because layer N+1's experts must be chosen before layer N's output exists, so the reads cannot start early enough to hide behind compute. We present Edge0, a streaming MoE inference engine that closes the gap with a prerouter: a per-layer head predicts the next layer's routing one token ahead, and the prediction is consumed as the routing itself, so the staged expert set equals the routed set and nothing is dropped. An unmerged recovery LoRA, trained on the student path, pays back the quality lost to int4 quantization and routing replacement. On a single 24GB machine, Edge0 serves a 35B MoE at 20tok/s inside 3GiB of peak active memory, within a few points of its fp16 teacher on average across five public benchmarks. An 8B tier runs on the same framework, and the framework, checkpoints, and adapters are open source.

Разбор статьи

Проблема и мотивация

Модели со структурой Mixture-of-Experts (MoE) масштабируют общее количество параметров, сохраняя число активных параметров на токен на низком уровне (например, активируя всего ~3B параметров на токен в модели на 35B). Однако инференс на потребительском оборудовании упирается в статическую память под веса: MoE на 35B требует около 19,5 ГБ даже при квантовании в int4. На устройстве с 24 ГБ это полностью вытесняет операционную систему и KV-кэш, приводя к жесткому своппингу страниц памяти и резкому падению скорости генерации (например, до 3,9 ток/с для резидентной модели на Mac mini с M4 Pro).

Выгрузка (оффлоадинг) весов экспертов на SSD снижает объем занимаемой оперативной памяти, но наивная загрузка по требованию создает непреодолимое бутылочное горлышко сериализации: выбор экспертов для слоя зависит от выходных данных слоя . Чтение с SSD невозможно инициировать заранее, чтобы перекрыть его вычислениями, поэтому исполнение зависает на время латентности диска на каждом слое для каждого токена.

Ключевые идеи

  • SSD как уровень хранения весов: Веса экспертов MoE хранятся на SSD в формате int4 и проецируются в память (mmap) в компактный потоковый пул. Пиковый объем памяти определяется активным рабочим набором, а не общим размером параметров модели.
  • Предсказание как маршрутизация (Prediction as Routing): Вместо ожидания завершения вычислений слоя послойный прероутер прогнозирует маршрутизацию слоя на целый токен вперед. Важно, что на этапе генерации модель использует это предсказание непосредственно как саму маршрутизацию. Это полностью исключает отбрасывание токенов или аварийные дозагрузки по определению, так как подготовленный набор экспертов всегда строго равен маршрутизируемому.
  • Необъединенная LoRA восстановления (Unmerged Recovery LoRA): Квантование 4-бит и приближенная маршрутизация снижают качество модели. Edge0 обучает низкоранговый адаптер на пути маршрутизации ученика с помощью дистилляции. Поскольку слияние LoRA с базой int4 и последующее переквантование стирают большую часть дельты (на уровне логитов сохраняется лишь 18% эффекта), Edge0 запускает адаптер параллельно в виде необъединенной дельты с пренебрежимо малыми накладными расходами.

Метод

Архитектура прероутера

Каждая голова прероутера на слое запускается на токене после слоя нормализации (post-attention layer norm) и предсказывает маршрутизацию для слоя на токен . Входной вектор объединяет скрытое состояние с двумя one-hot векторами top- маршрутизации (текущего и предыдущего токенов):

Для модели 35B это . Голова вычисляет:

где — линейный остаточный путь, инициализированный весами роутера следующего слоя.

Выполнение необъединенного адаптера

Слой MoE сохраняет квантованные базовые байты и параллельно применяет LoRA-дельту:

Трехэтапное обучение

  1. Дистилляция голов прероутера: Головы прероутера обучаются имитировать истинные решения роутера следующего слоя модели-учителя при замороженной остальной части сети.
  2. SFT на траектории ученика: Адаптеры LoRA восстановления (прикрепленные к проекциям внимания, линейного внимания и общих экспертов, но не потоковых экспертов) обучаются на сгенерированном учителем тексте, при этом маршрутизация принудительно направляется через прероутер.
  3. Онлайн-дистилляция (On-Policy Distillation): Ученик генерирует текст в режиме премаршрутизации, базовый учитель в fp16 оценивает генерации, а параметры LoRA оптимизируются с помощью обратной дивергенции Кульбака — Лейблера с целевой функцией вероятностей top- с учетом «хвоста» распределения.

Результаты

  • Пропускная способность и память (Mac mini M4 Pro, 24 GB):
    • edge0-35b (): Достигает скорости генерации 20,4 ток/с, используя всего 2,9 ГиБ пиковой активной памяти из чекпоинта int4 размером 19,5 ГБ (по сравнению с 3,9 ток/с и 18,2 ГиБ при полном размещении в RAM).
    • edge0-8b (): Достигает 28,0 ток/с генерации при пиковой памяти всего 1,5 ГиБ.
  • Ускорение предвыборки (MacBook M2, 16 GB):
    • По сравнению с чисто реактивной потоковой передачей по запросу, предварительная выборка прероутером на 1 токен вперед увеличивает скорость декодирования на +80% ... +84% при различных параметрах маршрутизации (: с 4,8 до 8,6 ток/с; : с 3,5 до 6,4 ток/с; : с 1,8 до 3,3 ток/с).
    • Время блокировки основного потока при загрузке резко сокращается (например, с 244,0 мс до 101,9 мс на шаг при ).
  • Качество модели (OpenCompass):
    • По пяти бенчмаркам (AIME 2026, HumanEval, GPQA-Diamond, MMLU-Pro, IFBench) edge0-35b набирает в среднем 79,2 балла против 83,2 у базовой модели Qwen3.6 в fp16 (разрыв 3,9 балла).
    • edge0-8b достигает 69,9 против 72,7 у базовой Ling 3.0 tiny в fp16 (разрыв 2,8 балла).

Ограничения и открытые вопросы

  • Конкурентность обслуживания: Edge0 обрабатывает одиночные запросы в порядке очереди (FIFO); пакетирование (батчинг) меняет рабочий набор экспертов и динамику кэширования, что не учитывалось в однопоточных профилях.
  • Накладные расходы CPU на построение графа: Скорость декодирования упирается в накладные расходы фреймворка на стороне CPU (~44 мс/шаг при построении вычислительного графа MLX для 40 слоев), которые невозможно устранить оптимизацией SSD.
  • Снижение качества в задачах на рассуждение: Потеря производительности в основном сосредоточена на сложных бенчмарках рассуждения (например, падение на 6,1 балла на AIME для 35B и на 10,0 баллов для 8B).
  • Зависимость от оборудования: Относительный прирост скорости от прероутера зависит от задержек диска и снижается при прогретом кэше весов или при использовании сверхбыстрых хранилищ.

Ключевые термины

Edge0
Движок потокового инференса MoE, развертывающий модели с SSD за счет перекрытия чтения с диска вычислениями через предсказание маршрутизации и компенсирующий потерю качества с помощью необъединенной recovery LoRA.
prerouter (прероутер)
Легковесная послойная нейросетевая голова, которая предсказывает выбор экспертов для слоя N+1 на один токен вперед, используя скрытое состояние слоя N и недавнюю историю маршрутизации.
prediction-as-routing (предсказание как маршрутизация)
Принцип архитектуры, при котором предсказанный прероутером набор экспертов напрямую исполняется как фактическая маршрутизация слоя на этапе генерации, исключая пропуски токенов или штрафы за ошибки предсказания.
recovery LoRA (LoRA восстановления)
Низкоранговый адаптер, обученный посредством дистилляции на премаршрутизированном пути ученика и исполняемый как параллельная необъединенная ветка для компенсации ошибок квантования int4 и приближенной маршрутизации.
staged decode (поэтапное декодирование)
Режим исполнения экспертов с использованием двойной буферизации фиксированных слотов, где индексы экспертов сопоставляются через таблицу слотов на GPU во избежание выделения памяти на каждом шаге.
incremental sticky-slot stack (incr_stack, инкрементальный стек фиксированных слотов)
Механизм, обновляющий постоянные стековые тензоры экспертов на месте, перезаписывая только изменившиеся слоты экспертов за шаг вместо полной пересборки всех тензоров.
unmerged delta (необъединенная дельта)
Исполнение адаптера LoRA параллельно с квантованными базовыми весами вместо их слияния, что предотвращает потерю тонкой настройки при повторном квантовании.
memory wall (стена памяти)
Дисбаланс между вычислительной мощностью процессора и пропускной способностью/объемом DRAM, который при локальном инференсе LLM разделяется на хранение динамического состояния KV-кэша и статических весов модели.

Вопросы

Почему Edge0 использует принцип «предсказание как маршрутизация», а не воспринимает предсказания как подсказки?

Использование предсказаний в качестве подсказок требует запасных путей (fallback) или сброса токенов в рантайме в случае ошибок. Исполнение предсказания непосредственно в качестве маршрутизации гарантирует, что подготовленный набор экспертов всегда точно совпадает с вызываемым, перенося погрешность аппроксимации в офлайн-обучение, где дистилляция компенсирует качество.

Почему recovery LoRA применяется без слияния, а не встраивается в 4-битные веса?

Дельты весов LoRA имеют среднеквадратичное значение (RMS) порядка 10^-3, что меньше шага квантования 4-бит. Слияние и повторное квантование почти полностью стирают эффект адаптера (сохраняя лишь 18% на уровне логитов), тогда как параллельная необъединенная дельта обеспечивает 100% точность.

Зачем Edge0 предсказывает на один токен вперед, а не внутри одного и того же токена?

Предсказание внутри того же токена требует сброса конвейера GPU (pipeline flush) на каждом слое, что занимает от 30 до 100 мс на шаг — это дольше самого времени загрузки, которое пытаются скрыть. Опережение на целый токен позволяет предсказывать все подготовленные слои за один общий сброс батча, предоставляя целый шаг вычислений токена для скрытия операций ввода-вывода SSD.

Как Edge0 генерирует токены быстрее полностью резидентного аналога в памяти на машине с 24 ГБ?

Полностью загруженная модель размером 19,5 ГБ занимает 18,2 ГиБ RAM, практически не оставляя места операционной системе и KV-кэшу. Это приводит к сильному своппингу ОС и падению скорости генерации до 3,9 ток/с. Edge0 передает экспертов потоком с SSD в пределах всего ~2,9 ГиБ активной памяти, полностью избегая нагрузки на виртуальную память ОС и работая со скоростью 20,4 ток/с.

Обзор на этой странице написан ИИ по тексту статьи и может содержать ошибки. Подробности смотрите в самой статье.

Читать с переводом и ИИ