Muse Spark Open: открытая MoE-модель Meta на 816B параметров

Meta выложила в открытый доступ Muse Spark Open — мультимодальную модель на архитектуре смеси экспертов (MoE). Она принимает текст, изображения, аудио и видео, а на выходе выдаёт текст, давая разработчикам единый интерфейс для вопросов о разного рода входных данных. Это самая крупная модель серии Muse и, как заявляет Meta, наиболее способная открытая модель с открытыми весами из выпущенных в США на сегодня.

Muse Spark Open — полноразмерная модель серии, продолжение Muse Glimmer, 30B-модели Meta с открытыми весами. Обе используют один токенизатор и словарь, а шаблон чата Muse Spark Open следует шаблону Glimmer с дополнениями под новые модальности.

Что внутри: 816 млрд параметров и 42 млрд активных

Заявленные характеристики модели:

  • Размер: около 816 млрд параметров всего, около 42 млрд активных на токен.
  • Маршрутизация экспертов: 256 экспертов на слой MoE, 8 выбираются на токен.
  • Входы: текст, изображения, аудио, видео.
  • Выход: текст.
  • Контекстное окно: до 1 млн токенов.
  • Форматы чекпоинтов: BF16 и NVFP4.

Репозитории чекпоинтов — Muse-Spark-Open-816B-A42B и Muse-Spark-Open-816B-A42B-NVFP4.

Языковая часть состоит из 62 слоёв со скрытой размерностью 8192. В каждом слое 128 голов запроса и 16 голов ключ-значение (grouped-query attention), по 64 измерения на голову. Блок внимания имеет выходной гейт и слой выходной нормализации, нормализация применяется и к запросам, и к ключам (QK-norm). Каждый блок объединяет вход и выход через обучаемый residual-гейт, а не простым суммированием.

Входной эмбеддинг и выходной слой — отдельные матрицы примерно по 1,66 млрд параметров каждая. Каждый MoE-блок содержит 256 экспертов, роутер выбирает 8 из них на токен. Каждый эксперт проецирует из 8192 в 4096 измерений и обратно, затем применяет собственную нормализацию к выходу. На экспертов приходится около 97% всех параметров модели.

Поскольку на токен работают только 8 экспертов, вычисления идут на скорости модели с 42 млрд параметров, но все 256 экспертов должны находиться в памяти — то есть для развёртывания нужен объём памяти под 816 млрд параметров. Чекпоинт BF16 занимает около 1,5 ТБ в формате safetensors. NVFP4 хранит параметры в 4-битной точности с пренебрежимо малой потерей точности и предназначен для GPU NVIDIA Blackwell.

Энкодеры изображений и звука

Восприятие изображений и видеокадров обеспечивает энкодер на 1,8 млрд параметров: 50 слоёв, скрытая размерность 1536, 16 голов внимания. Каждое изображение разбивается на патчи 14×14, признаки имеют размерность 4096. Позиционная информация берётся из обучаемых абсолютных эмбеддингов и 2D RoPE. Сеть прямого распространения в каждом слое использует LayerNorm и GELU. Каждый четвёртый слой и последний слой применяют полное внимание, остальные — разреженное. Видео проходит через тот же энкодер, что и изображения.

Аудио приходит через отдельный энкодер: аудиотокенизатор превращает звук в токены, а шаблон чата помечает позицию аудио токенами <|audio|>. Энкодер выдаёт один аудиотокен каждые 80 мс — это 12,5 токена в секунду. Для десятисекундной записи на входе получится 125 аудиотокенов. Сам энкодер — свёрточная пирамида, где каждая ступень состоит из патч-эмбеддера своего размера патча и двух свёрточных блоков с одномерными ядрами размера 7 и шагом 1; ступени повторяются для размеров патча [16, 6, 5, 4]. В конце временные кадры проходят через блок RMSNorm → линейная проекция → RMSNorm.

Контекст в миллион токенов и цена KV-кэша

Окно контекста на инференсе — 1 млн токенов, параметр max_position_embeddings выставлен в 1 048 576. В это же окно попадают токены изображений, видео и аудио вместе с текстом.

Grouped-query attention удерживает KV-кэш небольшим для модели такого размера: каждый токен добавляет 2 × 16 голов × 64 измерения × 62 слоя = 126 976 значений в кэш. В BF16 это около 250 КБ на токен и примерно 266 ГБ на полный контекст в 1 млн токенов.

Как запустить: transformers, llama.cpp, SGLang, vLLM, MLX

В transformers реализация предоставляет MuseSparkForConditionalGeneration для генерации текста из мультимодальных входов и MuseSparkProcessor для подготовки диалогов. Процессор объединяет токенизатор, обработчики изображений и видео, экстрактор аудиопризнаков и шаблон чата. Параллелизм настраивается через DistributedConfig: tp_size — число устройств, на которые шардируются плотные слои, ep_size — число устройств для распределения экспертов.

import os
from transformers import AutoModelForMultimodalLM, AutoTokenizer, DistributedConfig

distributed_config = DistributedConfig(
    tp_size=int(os.environ["WORLD_SIZE"]),
    ep_size=int(os.environ["WORLD_SIZE"]),
)

tokenizer = AutoTokenizer.from_pretrained("meta-models/Muse-Spark-Open-816B-A42B")
model = AutoModelForMultimodalLM.from_pretrained(
    "meta-models/Muse-Spark-Open-816B-A42B",
    distributed_config=distributed_config,
)

messages = [
    {"role": "user", "content": "Explain in one sentence why the sky is usually blue."},
]
inputs = tokenizer.apply_chat_template(
    messages,
    reasoning_effort="medium",  # default: xhigh, options: low/medium/high/xhigh
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
).to(model.device).to(model.dtype)

input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=2000)

В BF16 чекпоинт запускается на 4 узлах по 8 GPU H200 с тензорным параллелизмом (TP=32), а NVFP4 — на одном узле B200.

llama.cpp. Модель интегрирована в llama.cpp и поставляется в готовых бинарниках:

curl -LsSf https://llama.app/install.sh | sh
llama serve -hf ggml-org/Muse-Spark-Open-816B-A42B-GGUF:Q2_K

После запуска сервера WebUI доступен на localhost:9931. На Mac M3 Ultra (512 ГБ) 2-битный imatrix-квант выдаёт 18 токенов в секунду, модель занимает 304 ГБ, остаётся запас под KV-кэш.

SGLang. Интеграция поддерживает текст, изображения, аудио и видео; эталонная конфигурация NVFP4 работает на четырёх GPU GB300:

export MODEL_ID=meta-models/Muse-Spark-Open-816B-A42B-NVFP4
export CKPT="$(hf download "$MODEL_ID")"

SGLANG_FLASHINFER_NVFP4_PER_TOKEN_ACTIVATION=1 \
uv run sglang_meta serve \
  --model-path "$CKPT" \
  --served-model-name "$MODEL_ID" \
  --quantization modelopt_fp4 \
  --moe-runner-backend flashinfer_trtllm \
  --tp-size 4 \
  --ep-size 4 \
  --port 30000

vLLM. Эталонная интеграция поддерживает текст и изображения с NVFP4-чекпоинтом и требует GPU серии Blackwell:

export MODEL_ID=meta-models/Muse-Spark-Open-816B-A42B-NVFP4
export CKPT="$(hf download "$MODEL_ID")"

VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 \
VLLM_PLUGINS=musespark1x_models,ptq_nvfp4 \
vllm serve "$CKPT" \
  --served-model-name "$MODEL_ID" \
  --tokenizer-mode musespark1x \
  --config-format auto \
  --load-format internal_safetensor \
  --tensor-parallel-size 4 \
  --enable-expert-parallel \
  --max-model-len 131072 \
  --gpu-memory-utilization 0.92 \
  --reasoning-parser musespark1x \
  --tool-call-parser musespark1x \
  --enable-auto-tool-choice \
  --port 8000

Эта конфигурация задаёт сервисный контекст в 128K токенов.

MLX. Модель доступна в oMLX и mlx-lm. Кванты oQ под oMLX есть в 3-битном и 4-битном вариантах. На M3 Ultra (512 ГБ) квант oQ3e занимает около 344 ГБ и выдаёт примерно 225 токенов в секунду на префилле и 21 токен в секунду на генерации при промпте в 1024 токена и 128 сгенерированных. Даже 3-битный квант требует больше 256 ГБ RAM.

Развёртывание через Inference Endpoints

Muse Spark Open можно развернуть на Inference Endpoints по проверенному рецепту SGLang для NVFP4: он работает либо на 8 × NVIDIA RTX Pro 6000 98 ГБ с контекстом 131072, либо на 8 × NVIDIA H200 141 ГБ, если нужен контекст 1 048 576. Развернуть можно одной командой:

hf endpoints catalog deploy --repo meta-models/Muse-Spark-Open-816B-A42B-NVFP4 --name muse-spark

Эндпоинт предоставляет OpenAI-совместимый API: Chat Completions по /v1/chat/completions и Responses API по /v1/responses. Если разворачивать такой сервер самому, пригодится опыт кластерной оркестрации GPU — например, из материала про открытую платформу NVIDIA Run:ai.

Тонкая настройка: LoRA на 64 GPU H100

Полный 816B-чекпоинт дообучается через SFTTrainer из TRL. В примере Meta обучали LoRA-адаптеры на слоях внимания на 8 узлах по 8 GPU H100, эксперты оставались замороженными:

from transformers.distributed import DistributedConfig

distributed_config = DistributedConfig(fsdp_size=64, ep_size=8)

Здесь fsdp_size=64 шардирует модель по всем 64 GPU через FSDP2, а ep_size=8 делит 256 экспертов каждого слоя на 8 групп. Конфигурация обучения:

import torch
from datasets import load_dataset
from peft import LoraConfig
from trl import SFTConfig, SFTTrainer

train_dataset = load_dataset("allenai/tulu-3-sft-mixture", split="train[:500000]")

training_args = SFTConfig(
    output_dir="muse-spark-lora-sft",
    model_init_kwargs={"dtype": torch.bfloat16, "distributed_config": distributed_config},
    per_device_train_batch_size=1,
    max_steps=500,
    max_length=2048,
    packing=True,
    save_only_model=True,
    logging_steps=1,
    report_to="trackio",
)

trainer = SFTTrainer(
    model="meta-models/Muse-Spark-Open-816B-A42B",
    args=training_args,
    train_dataset=train_dataset,
    peft_config=LoraConfig(r=16, lora_alpha=32, target_modules=["q_proj", "k_proj", "v_proj", "o_proj"]),
)
trainer.train()

packing=True склеивает примеры в последовательности по 2048 токенов без паддинга, блочно-диагональная маска разделяет примеры. save_only_model=True сохраняет адаптер без состояния оптимизатора. Запуск по узлам:

torchrun --nnodes 8 --nproc_per_node 8 --rdzv_backend c10d --rdzv_endpoint "$MASTER_IP:29700" sft_muse_spark.py

Обучение шло 500 шагов примерно 2 часа на 64 GPU H100 со скоростью около 8 000 токенов в секунду. Средняя точность по токенам выросла с 72% до 84%, loss упал с 1,26 до 0,57.

Что собрали на модели

Meta показала несколько примеров использования. В генераторе 3D-ассетов 2-битный квант Muse Spark Open на llama.cpp соединили с кодинг-агентом Pi: агент генерирует код Three.js, рендерит результат в браузере, снимает скриншоты с нескольких ракурсов и отправляет их обратно модели для визуальной обратной связи, после чего правит код и повторяет цикл. Похожий подход к агентам, которые правят код и запускают инструменты, разобран в материале про агента Muse for Mac.

В браузерном агенте на OpenEnv и Hugging Face Sandboxes модель видит предыдущие действия, системный промпт, URL и скриншот браузера — и ничего больше, без DOM и HTML. Действия веб-драйвера обёрнуты через helium и selenium (клик, ввод, прокрутка), а Chromium работает в удалённой песочнице.

Третий пример объединяет аудио, изображения и агентные свойства: модель принимает голосовой ввод, рассуждает о типе нужного товара, ищет его на Amazon и выбирает наиболее подходящий по критериям.

Частые вопросы

Кого касается выпуск Muse Spark Open?

Команд, которые разворачивают крупные открытые модели на своём железе или в облаке, и разработчиков агентных и мультимодальных приложений: модель принимает текст, изображения, аудио и видео, а на выходе даёт текст.

Сколько памяти нужно для запуска?

Чекпоинт BF16 занимает около 1,5 ТБ, все 256 экспертов должны быть в памяти. 2-битный квант на Mac M3 Ultra (512 ГБ) занимает 304 ГБ, 3-битный квант oQ3e — около 344 ГБ, а для 3-битного кванта нужно больше 256 ГБ RAM.

На каком железе запускается BF16-версия?

В transformers BF16-чекпоинт идёт на 4 узлах по 8 GPU H200 с тензорным параллелизмом TP=32. NVFP4-версия помещается на один узел B200.

Чем NVFP4 отличается от BF16?

NVFP4 хранит параметры в 4-битной точности с пренебрежимо малой потерей точности и предназначен для GPU NVIDIA Blackwell. BF16 — обычный 16-битный формат, чекпоинт в safetensors.

Можно ли отключить режим рассуждений?

Нет. Отключить рассуждения у Muse Spark Open нельзя. Если задача простая и нужно меньше токенов, ставьте уровень «low»; по умолчанию используется xhigh. Уровни low/medium/high/xhigh отображаются в числа 16, 64, 256, 512, а числовую силу можно задать строкой Reasoning strength: 1 в системном промпте.

Какой у модели контекст и сколько занимает KV-кэш?

Окно — 1 млн токенов (max_position_embeddings = 1 048 576), включая токены изображений, видео и аудио. В BF16 KV-кэш занимает около 250 КБ на токен и примерно 266 ГБ на полный миллион токенов.

Поддерживается ли вызов инструментов?

Да, модель умеет вызывать инструменты как в текстовом, так и в мультимодальном режиме. Шаблон чата построен на каналах Harmony: модель сама выбирает получателя через to=, а маршрутизация вызовов инструментов разбирается процессором.

Как дообучить модель на своих данных?

Через SFTTrainer из TRL с LoRA на слоях внимания (q_proj, k_proj, v_proj, o_proj), эксперты при этом заморожены. В примере Meta обучение заняло 500 шагов, около 2 часов на 64 GPU H100.

Можно ли запустить модель на Mac?

Да. Помимо квантов llama.cpp, модель доступна в oMLX и mlx-lm с 3-битными и 4-битными квантами oQ. На M3 Ultra (512 ГБ) квант oQ3e выдаёт около 225 токенов в секунду на префилле и 21 токен в секунду на генерации. Можно также распределить инференс по нескольким компьютерам.

Сколько стоит развернуть модель в облаке?

Тарифы не приводятся. Известно, что Inference Endpoints предлагает проверенный рецепт SGLang для NVFP4: 8 × NVIDIA RTX Pro 6000 98 ГБ с контекстом 131072 или 8 × NVIDIA H200 141 ГБ с контекстом 1 048 576.

Источник: huggingface.co