Добро пожаловать в Muse Spark Open: мультимодальная модель с открытыми весами и смесью экспертов от Meta

Источник: Hugging Face•

Добро пожаловать в Muse Spark Open: мультимодальная модель с открытыми весами и смесью экспертов от Meta

Мы стремимся развивать и демократизировать искусственный интеллект с помощью открытого исходного кода и открытой науки.

Muse Spark Open — это модель с открытыми весами от Meta. Эта модель на основе смеси экспертов объединяет текст, изображения, аудио и видео в единую систему с примерно 816 миллиардами параметров, из которых около 42 миллиардов активны на каждый токен, и окном контекста до одного миллиона токенов. Она генерирует текст, предоставляя разработчикам общий интерфейс для решения задач с использованием различных типов входных данных.

Вслед за Muse Glimmer, Muse Spark Open представляет архитектуру смеси экспертов гораздо большего масштаба и является на сегодняшний день самой мощной моделью с открытыми весами в США.

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

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

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

Репозитории с контрольными точками называются 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-norm). Каждый блок объединяет входные и выходные данные через обученный остаточный вентиль, а не через простое суммирование.

Muse Glimmer использует одну плотную полносвязную сеть в каждом слое. Muse Spark Open заменяет эту плотную сеть блоком смеси экспертов (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 использует кодировщик с такой же архитектурой. Дизайн соответствует работе Perception Encoder от Meta. Видеовход проходит через тот же кодировщик, что и изображения.

Аудиокодировщик

Muse Spark Open принимает аудио в качестве входных данных через свой аудиокодировщик. Аудиотокенизатор преобразует аудио в токены, а шаблон чата отмечает положение аудио токенами <|audio|>. Кодировщик выдает один аудиотокен каждые 80 мс, что дает 12,5 токенов в секунду. Таким образом, если у вас есть аудио длительностью 10 секунд, количество входных аудиотокенов составит 125. Сам кодировщик представляет собой сверточную пирамиду, где каждый этап состоит из патч-эмбеддера с различными размерами патчей и 2 сверточных блоков 1D-ядер размера 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 — количество устройств, по которым распределены эксперты.

Вы можете инициализировать модель и процессор следующим образом.

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

Подготовьте диалог, затем передайте сообщения в 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 в системный промпт.

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

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

Вывод видео

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

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

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

Аудиовывод (Audio Inference)

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

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

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

Вызов инструментов (Tool Calling)

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

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

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

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

Llama.cpp

Muse Spark 2-bit работает на Llama Server

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

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

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

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

Команда llama.cpp поставляет различные квантованные версии. Мы протестировали Q2_K, Q4_K_S и Q_8 на чипах Apple Silicon. Вы можете запустить каждую квантованную версию, добавив идентификатор квантования в качестве суффикса, llama serve -hf ggml-org/Muse-Spark-Open-816B-A42B:Q2_K.

SGLang

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

Из среды интеграции SGLang загрузите чекпоинт из Hugging Face Hub и запустите сервер:

Чекпоинт включает чат-шаблон, который мы передаем явно. Загрузчик настраивает парсеры рассуждений и вызовов инструментов Muse.

Отправьте запрос через API, совместимый с OpenAI:

Ответ разделяет трассировку рассуждений в reasoning_content и окончательный ответ в content.

vLLM

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

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

Эта конфигурация устанавливает контекст обслуживания в 128 тысяч токенов. Плагин предоставляет реализацию модели, загрузчик чекпоинтов, а также парсеры рассуждений и вызовов инструментов.

Отправьте запрос, используя тот же ID модели из Hub:

MLX

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

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

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

Обратите внимание, что отключение рассуждений в Muse Spark Open невозможно, а значение по умолчанию (Auto) использует xhigh. Установите значение «low», если хотите использовать меньше токенов для более простых задач.

Языковая модель также доступна в этом PR официального репозитория mlx-lm. Вы можете запустить ее на той же высококачественной квантованной модели oQ3e следующим образом:

Это большая модель, даже 3-битное квантование требует более 256 ГБ оперативной памяти, как объяснялось выше. Вы также можете запустить распределенный вывод на нескольких компьютерах, пожалуйста, обратитесь к документации для получения подробной информации.

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

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

Для развертывания выполните одну команду с помощью Hugging Face CLI:

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

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

Любой клиент, совместимый с OpenAI, работает с тем же URL и вашим токеном Hugging Face в качестве ключа API.

Тонкая настройка с помощью TRL Quentin Gallouédec Ben Burtenshaw

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

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

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

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

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

Затем мы можем запустить эту команду на каждом узле:

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

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

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

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

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

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

Взаимодействие с браузером с помощью OpenEnv и Hugging Face Sandbox

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

Браузерный агент Muse Spark NVFP4 с OpenEnv и песочницами HF

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

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

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

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

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

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

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

Заключение

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

О чём эта статья