Одна команда deploy.sh поднимает модельный сервер и веб-интерфейс, но грабли начинаются на версии vLLM, портах и TTS. Разбираем установку по шагам — с проверками после каждого этапа.
Hy-SimulMT запускается в два слоя: модельный сервер (vLLM ≥ 0.31 с поддержкой HYV3ForCausalLM) и оркестратор SimulInfer, который даёт веб-страницу, загрузку файлов и WebSocket-микрофон. Ниже — рабочий порядок: проверка железа, установка одной командой, проверка через curl, затем опциональная озвучка.
| Вариант | Вес | Память GPU под веса | Когда выбирать |
|---|---|---|---|
| BF16 | 60,9 ГБ | ~57 GiB + KV-кэш | эталонное качество, H200/H100 |
| FP8 | 32,2 ГБ | ~30 GiB + KV-кэш | одна карта 48–80 ГБ, продакшен |
| Q8_0 (GGUF) | 33,3 ГБ | ~33 ГБ | llama.cpp с патчем, почти без потерь |
| Q4_K_M (GGUF) | 19,8 ГБ | ~20 ГБ | эксперимент на одной карте 24 ГБ |
Выбор по этим цифрам простой: если нужен продакшен с vLLM — берите FP8 (32 ГБ), если нужно «посмотреть, как это работает» на одной карте — GGUF Q4_K_M, но с готовностью патчить llama.cpp. BF16 имеет смысл только когда есть H200/H100 и важна эталонная точность.
Команда запускается из каталога SimulInfer/. Флаг --install-server создаёт изолированные окружения, готовит шаблон инференса и поднимает оба сервиса. Первый запуск скачивает зависимости и, если передан HF-ID, сам чекпойнт — это десятки гигабайт.
git clone https://github.com/Tencent-Hunyuan/Hy-SimulMT.git cd Hy-SimulMT cd SimulInfer
bash deploy.sh --install-server \ --model tencent/Hy-SimulMT-30B-A3B-Interleave
Ready: http://127.0.0.1:8080/
curl -N http://127.0.0.1:8080/translate/stream \ -F direction=en-zh -F file=@audio.wav
http://SERVER_IP:8080/
Для своей сборки vLLM или CUDA окружение модели можно переиспользовать: поставьте в него пакет simulst без зависимостей и передайте путь к интерпретатору через --server-python. Если модельный сервер уже работает отдельно, SimulInfer поднимается один — флагом --backend-url.
Путаница с портами — самая частая причина «страница открывается, но перевода нет». У каждого пути запуска свои номера, и они не совпадают между vLLM, llama.cpp и SGLang.
| Компонент | Порт | Что отдаёт | Путь запуска |
|---|---|---|---|
| SimulInfer web/API | 8080 | страница, /translate/stream, /translate/ws, /docs | deploy.sh |
| vLLM модель | 8800 | OpenAI-совместимый API | deploy.sh (внутри) |
| llama.cpp мост | 8094 | веб-страница моста для GGUF | serve_llamacpp.py |
| llama.cpp модель | 8080 | загруженный GGUF | llama-server с патчем |
| TTS Qwen3-TTS | 8091 | синтез речи и клонирование | simulinfer-tts-omni |
| SGLang-Omni | 8000 | /v1/audio/translations и realtime WS | sgl-omni serve |
PORT для моста и LLAMA_URL для адреса модели. Иначе получите «порт занят» или тихое подключение не к тому сервису.Сама модель отдаёт текст. Чтобы получить «перевод голосом», нужен TTS, и в документации предлагается Qwen3-TTS-12Hz-0.6B-Base через vLLM-Omni: он поднимается отдельным процессом и получает от SimulInfer текст вместе с эмбеддингом голоса говорящего.
simulinfer-tts-omni \ --model Qwen/Qwen3-TTS-12Hz-0.6B-Base \ --host 0.0.0.0 --port 8091
cp deploy.example.toml deploy.toml bash deploy.sh --config deploy.toml
.simulinfer/app-env/bin/simulinfer-client audio.wav \ --url http://127.0.0.1:8080
Почти все сбои на старте сводятся к четырём причинам: несовместимая версия vLLM, пустой шаблон инференса, занятый порт и отсутствие аудио-зависимостей. Первые три видны в логах сразу, четвёртая — только при попытке загрузить файл.
| Симптом | Причина | Что делать |
|---|---|---|
| Модель не грузится, ошибка архитектуры | vLLM старше/новее требуемого или без HYV3ForCausalLM | поставить vLLM ≥ 0.31 из чистого окружения |
| Модель отвечает не по формату | не выполнен simulinfer-prepare-model | прогнать подготовку и перезапустить vLLM |
| Порт занят при старте | висят прошлые процессы или llama.cpp на 8080 | сменить --port/--model-port, убить старые процессы |
| Файл загружается, перевода нет | нет аудио-зависимостей или VAD | поставить simulst[audio] и [vad] |
| Микрофон не работает на удалённой машине | нет HTTPS | использовать HTTPS-адрес или туннель с поддержкой WebSocket |
| Речь не синтезируется | TTS не подключён | поднять TTS на 8091 и указать его в deploy.toml |
Отдельно про качество: модель может переписывать уже сказанное. Если вы пишете субтитры в реальном времени, рассчитывайте на правки в предыдущих строках — это не баг, а заявленная стратегия «сказать раньше, уточнить позже». Для протокола встречи берите Interleave-чекпойнт: он отдаёт и оригинал, и перевод, и правки видны в контексте.