Назад к блогу

Две малые модели под разные задачи: синхронный перевод и локальный ассистент

Две малые модели под разные задачи: синхронный перевод и локальный ассистент

Вышли две специализированные модели, решающие противоположные задачи: Hy-SimulMT от Tencent переводит речь синхронно, по мере поступления аудио, с сохранением голоса говорящего, а Nemotron-3.5-Bolt от NVIDIA — компактная модель для локальных голосовых ассистентов на устройстве. Обе поставляются в нескольких форматах с разными инфраструктурными требованиями, и именно эти детали развёртывания определяют, насколько просто их встроить в продакшен.

Вышли две модели, которые решают несовместимые на первый взгляд задачи. Tencent Hunyuan опубликовала Hy-SimulMT — модель синхронного перевода речь-в-речь между китайским и английским с клонированием голоса, которая работает по мере поступления аудио. NVIDIA выпустила Nemotron-3.5-Bolt-E4B-4GB — малую языковую модель для локальных голосовых и устройственных ассистентов. У обеих несколько форматов поставки и собственный набор инфраструктурных требований, и именно эти детали определяют, как их ставить в прод.

Что именно выпущено

Hy-SimulMT. Основной чекпоинт — tencent/Hy-SimulMT-30B-A3B-FP8 в формате FP8. Модель непрерывно принимает входящее аудио и переводит по мере речи говорящего, выдавая и текст, и речь. Для инференса через SimulInfer используется GGUF-файл hymt-A3b-tgt_only-1019-Q8_0.gguf с MODEL_TYPE=target_only и serve_llamacpp.py: режим target_only означает модель, выдающую только перевод, в отличие от source_target, где на выходе и исходный текст, и перевод, а serve_llamacpp.py поднимает сервер llama.cpp с этой GGUF-моделью.

Nemotron Bolt. nvidia/NVIDIA-Nemotron-3.5-Bolt-E4B-4GB — SLM, дообученная NVIDIA из Gemma-4-E4B-it. Точность Q4_K_M, 8B общих параметров при 4B эффективных, архитектура Gemma-4-E4B, контекст до 64K токенов на вход и выход, текстовый ввод и вывод. Файл модели — Nemotron-3.5-Bolt-E4B-Q4_K_M.gguf, для спекулятивного декодирования прилагается DFlash drafter Nemotron-3.5-Bolt-E4B-DFlash-BF16.gguf. Полнопрецизионная версия — NVIDIA-Nemotron-3.5-Bolt-E4B-BF16.

Помимо весов, в релиз Hy-SimulMT входят репозитории SimulInfer, SimulTrain и sgl-project/sglang-omni (последний ставится через uv в окружение Python 3.12). Для Nemotron указана дата публикации на Build.NVIDIA.com — 10/23/2026, версия GA с той же датой.

Как устроен пайплайн Hy-SimulMT

Пайплайн состоит из двух частей: vLLM и веб/API-сервиса SimulInfer. SimulInfer даёт веб-страницу, загрузку аудиофайлов, real-time WebSocket и опциональный TTS.

deploy.sh --install-server ставит зависимости в изолированных окружениях, готовит модель, запускает vLLM и только потом поднимает веб/API-сервис. При первом запуске команда скачивает зависимости, а при использовании Hugging Face ID — и модель; процесс должен оставаться запущенным. Если совместимое окружение vLLM уже есть, используется оно, а для веб-сервиса создаётся отдельное окружение — это вариант для кастомных сборок vLLM/CUDA.

Порты по умолчанию: веб/API — 8080, локальный порт модели — 8800. Файлы складываются в SimulInfer/.simulinfer/ (config.toml, app.log, model.log). При включённом TTS возвращённая речь сохраняется в outputs/translated.wav, документация API доступна по /docs.

Альтернативный путь — SGLang-Omni: отдельный многоступенчатый runtime, который обслуживает модель через OpenAI-совместимые HTTP-эндпоинты и realtime WebSocket. Его устанавливают через uv в виртуальное окружение Python 3.12. Сервер запускается командой sgl-omni serve с параметрами:

sgl-omni serve \
  --model-path tencent/Hy-SimulMT-30B-A3B \
  --mem-fraction-static 0.75 \
  --enable-realtime \
  --port 8000

--mem-fraction-static 0.75 задаёт долю статически выделяемой памяти, --port 8000 — web/API-порт (отличается от 8080 у SimulInfer). Флаг --enable-realtime нужен только для потокового WebSocket. По умолчанию включены Decode CUDA graphs и отключена Torch-компиляция. Эта интеграция покрывает только чекпойнт BF16 с выводом одного перевода: речь и клонирование голоса требуют отдельного TTS-сервиса, а чекпойнты FP8, GGUF и Interleave ею не поддерживаются.

Вызов перевода и транскрипции

Потоковый перевод идёт через /translate/stream с параметром direction (например, en-zh) и прикреплённым файлом. OpenAI-совместимые эндпоинты — /v1/audio/translations и /v1/audio/transcriptions — принимают файл, language и response_format=json.

Параметр language задаёт исходный язык (zh или en) и его нужно передавать явно: в чекпоинте нет токенов определения языка. При пропуске по умолчанию используется перевод с китайского на английский. Один запрос принимает файл не длиннее 30 секунд; более длинное аудио отклоняется, а не обрезается. Добавление -F stream=true к любому из эндпоинтов включает потоковую выдачу событий transcript.text.delta с завершающим transcript.text.done.

Как устроен запуск Nemotron Bolt

Запуск начинается с переменных окружения: MODEL_REPO и MODEL_FILE задают репозиторий и имя GGUF-файла основной модели, DRAFTER_REPO и DRAFTER_FILE — драфтера, MODEL_DIR — локальный каталог для скачивания. Обе модели скачиваются утилитой hf download в этот каталог.

Без драфтера llama.cpp-сервер поднимается через docker run с образом ghcr.io/ggml-org/llama.cpp:server-cuda13-b11459, монтированием MODEL_DIR в /models только для чтения и флагом -m "/models/$MODEL_FILE". Дополнительно задаются --alias nemotron-bolt, --host 0.0.0.0, --port 8000, -c 65536, -ngl 999 и --jinja.

С драфтером к той же команде добавляются --spec-draft-model "/models/$DRAFTER_FILE" и --spec-draft-ngl 999 — так включается спекулятивное декодирование. Флаг --spec-draft-model указывает файл драфтера, а --spec-draft-ngl 999 задаёт, сколько слоёв драфтера выгружать на GPU.

Управление рассуждениями и режимами

Рассуждения управляются через kwargs шаблона чата: включённое рассуждение (по умолчанию), отключённое для прямых ответов и настраиваемый бюджет рассуждений во время выполнения. Для vLLM к любой serve-команде нужно добавить три флага: --enable-auto-tool-choice, --tool-call-parser gemma4 и --reasoning-parser gemma4 — парсер gemma4 используется и для вызовов инструментов, и для рассуждений.

Есть разговорный режим (conversational mode): при включении модель отвечает кратко и с меньшим объёмом текстового форматирования, что подходит для голосовых приложений. Режим переключается.

Асинхронные инструменты

Модель обрабатывает асинхронные вызовы через немедленное подтверждение: в ответ на вызов возвращается сообщение с ролью tool, содержащее статус pending, идентификатор задачи и имя функции. Результат приходит отдельным сообщением с ролью user, начинающимся с «TOOL UPDATE:», со статусом completed, тем же task_id, функцией и ответом.

Правила размещения обновлений состояния зависят от ситуации. Если user-сообщение обусловлено обновлением состояния, это обновление (в виде user- или system-сообщения) должно идти до ответа пользователя. Если передаётся состояние, возникшее после выполнения инструмента, обновление идёт после ответа о выполнении.

Почему это сделали

Авторы Hy-SimulMT формулируют задачу синхронного перевода как компромисс: ожидание дополнительной информации помогает точнее передать смысл, но заставляет слушателей ждать дольше; более ранняя речь повышает требования к инкрементальному пониманию и генерации. Модель нацелена на баланс — переводить по мере поступления непрерывного аудиопотока, чтобы слушатели получали информацию своевременно при максимально точной передаче смысла.

Задержку измеряют метрикой StreamLAAL. Hy-SimulMT достигла StreamLAAL около 3 секунд — наименьшего среди показанных систем. Балл GEMBA (качество перевода, больше — лучше) превысил баллы сравниваемых открытых моделей и четырёх из пяти коммерческих API. По качеству модель достигает уровня экспертных синхронистов-людей, часто отвечая быстрее. Сопоставление проводилось на 18 аудиозаписях на китайском и английском примерно по 6 минут с шестью синхронистами: трое с CATTI Level 1, трое с CATTI Level 2, для каждого уровня брался лучший балл из трёх.

Авторы Nemotron решают другую задачу — быстрые локальные голосовые и устройственные ассистенты, интерактивные персонажи и встраиваемые интерфейсы с акцентом на многоходовое использование инструментов, следование инструкциям и заземление на входные данные. Модель спроектирована для работы с низкой памятью и низким TTFT, чтобы агенты отвечали быстро и оставался запас ресурсов для приложений или смежных конвейеров моделей.

Что это меняет на практике

Эксплуатация Hy-SimulMT. Зависимости ставятся в раздельных окружениях — это позволяет держать веб-сервис отдельно от модели. При наличии совместимого окружения vLLM используется оно, а для веб-сервиса создаётся отдельное — вариант для кастомных сборок vLLM/CUDA. Подключение к уже запущенному API модели идёт через --backend-url (например, bash deploy.sh --backend-url http://model-host:8800/v1), и в этом режиме запускается только SimulInfer. GPU задаются параметром --gpus, параллелизм — --tensor-parallel-size:

bash deploy.sh --install-server --model /path/to/model \
  --gpus 0,1 --tensor-parallel-size 2

Порт и каталог времени выполнения тоже настраиваются: bash deploy.sh --backend-url http://model-host:8800/v1 --port 8081 --runtime-dir .simulinfer-alt.

Совместимость Nemotron. Для вызова инструментов через vLLM три флага обязательны — без них авто-выбор инструментов и парсинг рассуждений не заработают. Клиентские примеры используют OpenAI-совместимый клиент с base_url="http://localhost:8000/v1", api_key="EMPTY" и моделью nemotron-bolt. Рекомендуемые параметры сэмплирования — Temperature 1.0 и Top_P 0.95 в обоих режимах рассуждений.

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

Hy-SimulMT. Чекпоинт не содержит токенов определения языка, поэтому язык источника нужно передавать явно. Оценка качества ограничена по масштабу: результаты относятся только к использованным образцам, участникам-переводчикам и настройкам оценки и не являются всесторонней оценкой. SGLang-Omni покрывает только чекпойнт BF16 с выводом только перевода — FP8, GGUF и Interleave этой интеграцией не поддерживаются; для речи и клонирования голоса нужен отдельный TTS-сервис.

Nemotron Bolt. Авторы советуют проводить систематические прогоны распределения токенов на стандартных оценочных промптах до установки параметров развёртывания. Ограниченные выделения токенов могут обрывать процесс рассуждения на полуслове.

Лицензии и доверенный ИИ. Использование Nemotron регулируется OpenMDW License Agreement версии 1.1; модель дообучена на Google Gemma 4, использование которой регулируется Apache License версии 2.0. NVIDIA заявляет, что доверенный ИИ — общая ответственность, и советует разработчикам работать со своей внутренней командой модели, чтобы она соответствовала требованиям отрасли и случая использования. Обходить встроенные защитные ограничения без аналогичной замены не рекомендуется. Обратную связь по качеству модели, рискам, уязвимостям безопасности или вопросам NVIDIA AI предлагается оставлять по указанной в источнике ссылке.

Данные об обучении. Синтетические данные создаются дистилляцией траекторий, решений и переводов из сильных учителей и агентных систем. В таблице публичных датасетов указаны периоды сбора (SWE-Gym и WildChat-1M — 10/2/2025, LMSYS-Chat-1M — 4/23/2025), EDGAR помечен как Legacy Download, Turing Math Data Pack — как seed с размером Undisclosed. Для Synthetic Agentless SWE указан размер 242,536. Число «4 ГБ» в имени Nemotron как отдельный количественный результат не раскрывается — в дереве моделей квант Q4_K_M указан как 6.18 GB.

Источники

Похожее