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