Sakhanda Wire
NVDA $217.23 -1.84% MSFT $539.44 +1.08% GOOGL $349.22 +0.45% META $736.72 -0.11% AMZN $254.76 +0.27%
← К новостям

Представляем Welcome Muse Spark Open: передовую мультимодальную модель архитектуры mixture-of-experts с открытыми весами от Meta

Представляем Muse Spark Open: мультимодальную модель Mixture-of-Experts с открытыми весами от Meta
Опубликовано 15 октября 2026 года
Обновить на GitHub
Muse Spark Open — это модель Meta с открытыми весами. Модель Mixture-of-Experts объединяет текст, изображения, аудио и видео в одной системе примерно с 816 миллиардами параметров, из которых около 42 миллиардов активны для каждого токена; размер контекстного окна достигает одного миллиона токенов. Модель генерирует текст, предоставляя разработчикам единый интерфейс для вопросов о разных типах входных данных.

После Muse Glimmer в Muse Spark Open впервые реализована архитектура Mixture-of-Experts значительно большего масштаба. Это самая мощная американская модель с открытыми весами на сегодняшний день.

Meta обучала Muse Spark Open для агентного программирования: чтения кодовой базы, написания и отладки кода, а также вызова инструментов. Модель также принимает изображения, аудио и видео, поэтому может одновременно изучать снимок экрана, прослушивать голосовую заметку или смотреть запись экрана во время работы с кодом. В этой статье показано, как запускать и дообучать модель и что мы с ней создали. Все модели доступны здесь.

Общие возможности и архитектура

Meta описывает Muse Spark Open как модель, оптимизированную для программирования и обученную на реальных рабочих процессах разработчиков, включая рефакторинг нескольких файлов и длительные сессии отладки. Muse Spark Open ориентирована на агентную работу: она планирует, действует, наблюдает и самостоятельно исправляет ошибки в ходе длительных задач, включая просмотр веб-страниц с изображениями.

Характеристика Muse Spark Open
Размер модели ~816 млрд параметров всего; ~42 млрд активных для каждого токена
Маршрутизация экспертов 256 экспертов на слой MoE; для каждого токена выбираются 8
Входные данные Текст, изображения, аудио и видео
Выходные данные Текст
Контекстное окно До 1 млн токенов
Форматы контрольных точек BF16 и NVFP4

Репозитории контрольных точек называются Muse-Spark-Open-816B-A42B и Muse-Spark-Open-816B-A42B-NVFP4.

схема модели

Muse Spark Open — полноразмерная модель семейства Muse. Muse Glimmer, выпущенная Meta в августе, представляет собой небольшую плотную модель того же семейства, оптимальную для локального запуска. Обе модели используют один и тот же токенизатор и словарь. Шаблон чата основан на шаблоне Muse Glimmer с дополнениями для новых модальностей. В Muse Spark Open входные эмбеддинги и выходной слой являются отдельными матрицами примерно по 1,66 млрд параметров каждая.

Mixture of Experts

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

Muse Glimmer использует одну плотную нейросеть прямого распространения в каждом слое. Muse Spark Open заменяет эту сеть блоком Mixture-of-Experts (MoE). Каждый блок MoE содержит 256 экспертов, а маршрутизатор выбирает 8 экспертов для каждого токена. Каждый эксперт — это сеть прямого распространения, проецирующая размерность с 8192 до 4096 и обратно до 8192, после чего применяющая собственную нормализацию выхода. На экспертов приходится около 97% всех параметров модели.

Для каждого токена запускаются только 8 экспертов, поэтому вычисления используют около 42 млрд параметров. Все 256 экспертов остаются в памяти, поэтому для развёртывания требуется память модели с 816 млрд параметров, но скорость работы соответствует модели с 42 млрд параметров. Контрольная точка BF16 занимает около 1,5 ТБ в формате safetensors. Контрольная точка NVFP4 хранит параметры в 4-битной точности с пренебрежимо малой потерей качества и предназначена для графических процессоров NVIDIA Blackwell. В transformers контрольная точка BF16 запускается на 4 узлах по 8 H200 с тензорным параллелизмом (TP=32), а NVFP4 — на одном узле B200. Для развёртывания Muse Spark Open ознакомьтесь с рецептами для llama.cpp, vLLM и SGLang ниже.

Энкодер восприятия

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

схема обработки изображений

Muse Glimmer 30B использует энкодер с такой же архитектурой. Дизайн основан на работе Meta Perception Encoder. Видеовход обрабатывается тем же энкодером, что и изображения.

Аудиоэнкодер

схема аудиоэнкодера

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

Длинный контекст

При выводе контекстное окно составляет 1 млн токенов. Параметр конфигурации max_position_embeddings равен 1 048 576. В это окно входят токены изображений, видео и аудио вместе с текстом.

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

Поддержка вывода

Transformers

Реализация Muse Spark Open предоставляет 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",  
    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)

Вывод только текста

Подготовьте диалог, затем передайте сообщения в processor.apply_chat_template, включив add_generation_prompt=True, tokenize=True, return_dict=True и return_tensors="pt". Передайте результат процессора в model.generate и декодируйте только новые токены, исключив входной префикс. Процессор позволяет задавать интенсивность рассуждений, сопоставляя символические уровни (low/medium/high/xhigh) с целыми значениями, которые принимает сама модель (16, 64, 256, 512). Отключить рассуждения в Muse Spark Open нельзя, поэтому для простых задач используйте уровень “low”, чтобы расходовать меньше токенов. Числовой уровень можно задать строкой Reasoning strength: 1 в системном запросе.

messages = [
    {"role": "system", "content": "You should only answer with a number."},
    {"role": "user", "content": "What is 17 * 23?"},
]

inputs = processor.apply_chat_template(
    messages,
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    reasoning_effort="high", 
).to(model.device).to(model.dtype)

output = model.generate(**inputs, max_new_tokens=2000)
generated_tokens = output[0][inputs["input_ids"].shape[1] :]
print(processor.decode(generated_tokens, skip_special_tokens=False))

Изображения и текст

Процессор Muse Spark Open заменяет каждый маркер изображения числом патч-токенов, необходимым для обработанного изображения, и окружает их токенами границ изображения. Это сохраняет соответствие текстовых позиций визуальным признакам, передаваемым модели. Процессор также поддерживает несколько изображений в одном запросе.

image_url = (
    "https://huggingface.co/datasets/merve/vl-test-suite/"
    "resolve/main/pills.jpg"
)
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": image_url,
            },
            {
                "type": "text",
                "text": "Do any of the components in this supplement interact?",
            },
        ],
    },
]

inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    reasoning_effort="medium",
    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)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)

processor.parse_response(response)

Вывод для видео

Видео-запросы включают временные метки кадров и визуальное содержимое. Процессор работает с видео, содержащим аудио, что является улучшением по сравнению с Muse Glimmer благодаря аудиоэнкодеру. Он уменьшает частоту кадров и аудио так, чтобы синхронизировать кадры. По умолчанию видео обрабатывается с частотой 2 FPS, максимум 96 кадров. Это можно изменить, задав параметр fps видеообработчика:

processor.video_processor.fps = 4.0

Как правило, видео представляет собой последовательность кадров во времени: чем сильнее уменьшение частоты, тем больше кадров между событиями теряется. Поэтому для более точной генерации следует сохранять высокую частоту кадров. Однако это требует больше памяти и увеличивает задержку предварительного заполнения. Кадры чередуются с текстовыми метками времени (например, “Time: 3.5s”). Чтобы передавать видео вместе с аудио, укажите load_audio_from_video=True в apply_chat_template.

При подготовке входных данных сохраняйте метаданные видео с помощью return_metadata=True, чтобы процессор мог определить правильную частоту кадров.

Вывод для аудио

Аудиобашня Muse Spark Open принимает необработанную форму волны. Процессор ожидает моно-аудио с частотой 24 кГц и дополняет форму волны до числа сэмплов, кратного 1 920, что соответствует одному аудиоэмбеддингу на 80 миллисекунд. Аудио с другой частотой дискретизации сначала нужно пересэмплировать. Для этого можно использовать утилиту load_audio из transformers. Она применяет бэкенды torchcodec, librosa или torchaudio, поэтому перед запуском вывода установите один из них локально.

Если вы просто используете apply_chat_template с сообщениями, всё это автоматически выполняется внутри:

import torch
  from transformers import AutoProcessor, AutoModelForMultimodalLM

  model_id = "meta-models/Muse-Spark-Open-816B-A42B"
"

  processor = AutoProcessor.from_pretrained(model_id)

  model = AutoModelForMultimodalLM.from_pretrained(
      model_id,
        ).eval()

  messages = [
      {
          "role": "user",
          "content": [
              {
                  "type": "audio",
                  "url": "https://huggingface.co/buckets/huggingface/audio-samples/resolve/bbaudio_question_39.mp3",
              },
              {
                  "type": "text",
                  "text": "Answer the question.",
              },
          ],
      }
  ]

  # Downloads the audio, decodes it as mono, resamples it to 24 kHz, pads it, creates input_values_mask, and expands the audio placeholders.
  inputs = processor.apply_chat_template(
      messages,
      add_generation_prompt=True,
      tokenize=True,
      return_dict=True,
      return_tensors="pt",
      load_audio_backend="auto",
  ).to(model.device).to(model.dtype)

  with torch.inference_mode():
      output_ids = model.generate(
          **inputs,
          max_new_tokens=128,
          do_sample=False,
      )

  # Decode only newly generated tokens
  prompt_length = inputs["input_ids"].shape[1]
  generated_text = processor.batch_decode(
      output_ids[:, prompt_length:],
      skip_special_tokens=True,
  )

  print(generated_text[0])

Процессор вставляет соответствующее число аудиотокенов между маркерами границ аудио. Он также возвращает маску, обозначающую реальные сэмплы, чтобы модель могла исключить дополненные аудиоэмбеддинги.

Вызов инструментов

Muse Spark Open поддерживает вызов инструментов как в текстовом, так и в мультимодальном режиме. Вызвать инструменты можно следующим образом.


from transformers import AutoProcessor, AutoModelForMultimodalLM

MODEL_ID = "meta-models/Muse-Spark-Open-816B-A42B"

Muse Spark Open использует шаблон чата на основе каналов (Harmony, впервые представленный в gpt-oss). Знать внутреннее устройство необязательно, но полезно проверять каналы, через которые маршрутизируется модель, если качество вывода низкое. В приведённом ниже входном сообщении:

<|begin_of_text|>
  <|start|>system<|message|>
  You are a helpful AI assistant.
  Knowledge cutoff: 2026-01-04.
  Current date: ...
  ...
  <|eot|>
  <|start|>user<|message|>...
  <|eot|>
  <|start|>assistant

<|start|>assistant намеренно оставляется открытым: именно модель выбирает получателя с помощью to=. У модели есть разные получатели; например, self просит модель рассуждать:

to=self<|message|>the model reasons here<|eom|> # reasoning
<|start|>assistant to=user<|message|>final answer<|eot|> # final answer

self используется для рассуждений, commentary — для комментариев до и между вызовами инструментов, видимых конечному пользователю, а user — для финального ответа.
Маршрутизация вызова инструмента разбирается следующим образом (если вы передали tools в apply_chat_template):

<|start|>assistant to=weather.get<|message|>
  <atem:function_calls>
  <atem:invoke name="weather.get">
  <atem:parameter name="city">San Francisco</atem:parameter>
  </atem:invoke>
  </atem:function_calls>
  <|eot|>

Llama.cpp

Muse Spark в 2-битном формате, работающая на Llama Server

Muse Spark Open интегрирована в llama.cpp и доступна в готовых бинарных файлах. Установить её можно следующей командой:

curl -LsSf https://llama.app/install.sh | sh

Запустить сервер можно следующим образом, добавив суффикс квантования к идентификатору модели:


llama serve -hf ggml-org/Muse-Spark-Open-816B-A42B-GGUF:Q2_K

Репозиторий с квантованными версиями находится здесь. После запуска сервера откройте localhost:9931, чтобы общаться со встроенным WebUI. В веб-интерфейсе можно добавлять аудио и изображения для вывода и менять уровень рассуждений.
Отключить рассуждения в Muse Spark Open нельзя, поэтому для простых задач используйте уровень “low”, чтобы расходовать меньше токенов.
Мы тестировали квантованные версии на Mac M3 Ultra (512 ГБ). Квантование 2-bit, откалиброванное с помощью imatrix, работает со скоростью 18 токенов/с, оставляя достаточно места для KV-кэша (модель использует 304 ГБ).

Запрос к серверу можно отправить следующим образом. Дополнительную информацию о мультимодальности, вызовах инструментов и прочем см. в справочнике API.

SGLang

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

Из среды интеграции SGLang скачайте контрольную точку из Hugging Face Hub и запустите сервер.

vLLM

Эталонная интеграция Muse Spark Open с vLLM поддерживает текстовые и графические входные данные с контрольной точкой NVFP4, для которой требуются GPU серии Blackwell.

После установки эталонного плагина и зависимостей скачайте контрольную точку из Hugging Face Hub и запустите сервер.

MLX

Muse Spark Open уже доступна в oMLX и mlx-lm. Кванты oQ, оптимизированные для oMLX, доступны в вариантах 3-bit и 4-bit и готовы к использованию.

Мы протестировали квантование oQ3e на M3 Ultra (512 ГБ). Модель занимает около 344 ГБ, оставляя место для KV-кэша, и работает со скоростью примерно 225 токенов/с при предварительном заполнении и 21 токен/с при генерации с запросом на 1024 токена и 128 сгенерированными токенами.

После загрузки модели через интерфейс oMLX можно общаться с ней во встроенном чате. В интерфейсе можно добавлять изображения и менять уровень рассуждений на лету — от low до xhigh. Рассуждения модели отображаются в сворачиваемом блоке, отдельно от финального ответа.

Отключить рассуждения нельзя, а значение по умолчанию (Auto) использует xhigh. Для простых задач установите “low”, чтобы использовать меньше токенов.

Развёртывание Muse Spark Open с помощью Inference Endpoints

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

Для развёртывания выполните одну команду через Hugging Face CLI:

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

Либо откройте endpoints.huggingface.co/new/meta-models/Muse-Spark-Open-816B-A42B-NVFP4 и выберите Create Endpoint.

Эндпоинт предоставляет совместимый с OpenAI API: Chat Completions по адресу /v1/chat/completions и Responses API по адресу /v1/responses.

Дообучение с TRL Quentin Gallouédec Ben Burtenshaw

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

Сначала нужно распределить модель между 64 GPU. Из-за большого размера модели требуется параллелизация по нескольким осям. Мы используем параллелизм тензоров, данных и экспертов через DistributedConfig, который сообщает transformers, как разделить модель при загрузке.

В приведённом выше фрагменте fsdp_size=64 распределяет модель между всеми 64 GPU с помощью FSDP2, а ep_size=8 делит 256 экспертов каждого слоя на 8 групп. Transformers отправляет каждый токен на GPU, содержащий соответствующего эксперта, поэтому каждый GPU обучается на собственной части пакета.

Теперь можно настроить SFTConfig для обучения. Здесь мы выполнили простую задачу адаптации шаблона чата модели на наборе данных с открытым исходным кодом, но этот подход можно применить к собственному сценарию.

Ключевой параметр — packing=True, объединяющий примеры в последовательности по 2048 токенов без дополнения. Блочно-диагональная маска сохраняет разделение примеров. save_only_model=True сохраняет адаптер без состояния оптимизатора, поскольку trainer не может возобновить работу с моделью, разделённой при загрузке. LoraConfig нацелен на четыре проекции внимания, а 256 экспертов каждого слоя остаются замороженными.

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

Демонстрации

Muse Spark Open — модель для программирования и агентной работы. Чтобы проверить это на практике, мы попробовали мультимодальные и агентные задачи, использующие входные данные изображений и аудио. Всё описанное ниже можно запустить или скопировать.

Генератор 3D-объектов

Мы объединили Muse Spark Open в 2-битном формате (работающую на llama.cpp) с агентом программирования Pi, чтобы создавать и постепенно улучшать 3D-объекты в Three.js. Запрос доступен здесь; поскольку модель квантована, ей требуется немного больше направляющих указаний. На Mac Ultra llama.cpp достигает 18 токенов/с.

Сначала мы описываем объект, после чего Pi использует модель для генерации кода Three.js, отображает результат в браузере и делает снимки с разных углов. Затем он отправляет изображения той же модели на llama server для визуальной обратной связи, использует её для редактирования кода и повторяет процесс.

Взаимодействие с браузером через OpenEnv и Hugging Face Sandbox

Мы протестировали Spark на задачах компьютерного управления и были впечатлены результатами, поэтому создали компактную демонстрацию, которая также показывает, как работает агент компьютерного управления. Её можно дополнительно настроить под свои задачи. Это одновременно учебный пример и приложение, запускаемое несколькими строками кода. Он доступен здесь.

Браузерный агент Muse Spark NVFP4 с OpenEnv и HF Sandboxes

Hugging Face Sandboxes — это песочницы на базе Hugging Face Jobs для удобного выполнения кода. Демонстрация состоит из трёх компонентов:

  1. Muse Spark Open, развёрнутая с помощью Inference Endpoints;
  2. OpenEnv, оборачивающий действия веб-драйвера с helium и selenium (нажатие, ввод текста, прокрутка и т. д.) и определяющий интерфейс сброса, шага, наблюдения и завершения браузерной среды;
  3. веб-браузер Chromium

Удалённая песочница содержит среду и браузер, как показано ниже.

Попробовать демонстрацию можно за несколько шагов, описанных в примере. Запустите Inference Endpoint с Muse Spark Open, добавьте URL эндпоинта в переменную окружения, опубликуйте сервер OpenEnv в Spaces и укажите его, после чего запустите цикл агента. Muse Spark Open видит предыдущие действия, системный запрос, URL и снимок браузера, чтобы выбрать действие, и ничего больше — ни DOM, ни HTML-код. Это действительно мультимодальная демонстрация браузерного агента.

Позвоните своему браузеру

Наконец, мы решили максимально проверить агентные мультимодальные возможности Spark и создали этот Space, объединяющий аудио, изображения и агентные свойства модели в браузерном агенте. Мы сообщаем модели общее описание необходимого товара, а она взаимодействует со встроенным браузером и ищет варианты на Amazon.

Muse Spark Open принимает голосовой запрос, рассуждает о типе товара, соответствующем описанию, ищет его на Amazon и выбирает наиболее подходящий вариант по заданным критериям.

Итоги

Muse Spark Open — полноразмерная модель с открытыми весами из семейства Muse. Начните с контрольной точки BF16 или NVFP4 либо попробуйте один из качественных квантов llama.cpp. Если вы создадите что-либо с Muse Spark Open, поделитесь этим и расскажите нам в обсуждениях репозитория.

Модели, упомянутые в этой статье 2

Наборы данных, упомянутые в этой статье 1

Статьи, упомянутые в этой статье 1

Коллекции, упомянутые в этой статье 1

Сообщество

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

· Зарегистрируйтесь или войдите, чтобы оставить комментарий

Модели, упомянутые в этой статье 2

Наборы данных, упомянутые в этой статье 1

Статьи, упомянутые в этой статье 1

Коллекции, упомянутые в этой статье 1

Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.

Впервые опубликовано изданием Hugging Face

Читать оригинал на Hugging Face ↗

Текст и изображения принадлежат Hugging Face и приводятся здесь с указанием авторства и ссылкой на оригинальную публикацию.

← К новостям

Ещё новости

Все последние новости