Triton runtime produces repetitive non-speech audio with custom F5-TTS checkpoint (SWivid default works)
#32
by
MaxViksna
- opened
Окружение
- GPU: NVIDIA GeForce RTX 4090 (24GB), CC 8.9
- ОС/контейнер: образ, собранный из
Dockerfile.serverизsrc/f5_tts/runtime/triton_trtllm - Triton Server: 2.53.0
- TensorRT: 10.7.0
- TRT-LLM: 0.16.0
- PyTorch: 2.5.1 (по логу экспорта ONNX)
- Python: 3.12
- Дополнительно: установлено
cuda-python==12.6(иначеImportError: cannot import name 'cudart', см. ссылку)
Модель
- Базовая модель из HF:
SWivid/F5-TTS— работает корректно через Tritonhttps://huggingface.co/SWivid/F5-TTS/tree/main
- Кастомная модель (русская):
- Чекпойнт:
Misha24-10/F5-TTS_RUSSIAN/F5TTS_v1_Base_v2/model_last.pt https://huggingface.co/Misha24-10/F5-TTS_RUSSIAN/tree/main/F5TTS_v1_Base_v2
- Чекпойнт:
Что хотел получить
- Тот же корректный синтез, что и при локальном запуске CLI/питон-бекенда, но через Triton runtime (TRT-LLM).
Что получил фактически
- Triton сервер стартует без ошибок, инференс идёт, но на выходе — повторяющиеся однообразные звуки без слов (полный «мусор»).
- С дефолтной моделью SWivid через Triton всё хорошо.
- С тем же кастомным чекпойнтом вне Triton (CLI/локально) синтез корректный.
Полные шаги воспроизведения
- Сборка образа:
docker build . -f Dockerfile.server -t soar97/triton-f5-tts:24.12
- Запуск контейнера:
docker run --gpus all --rm -it --net host \
-v /home/user/viksna/local-voice-ai-v2/f5-tts-assets:/assets \
-v /home/user/viksna/local-voice-ai-v2/triton_models:/out \
-v /home/user/viksna/F5-TTS:/F5-TTS \
--shm-size=2g soar97/triton-f5-tts:24.12 bash
- В контейнере:
pip3 install cuda-python==12.6
cd /F5-TTS/src/f5_tts/runtime/triton_trtllm
# подготовка и запуск:
bash run.sh 0 4 F5TTS_v1_Base_v2
- Тестовый запрос (HTTP):
python3 client_http.py \
--reference-audio=/home/user/viksna/local-voice-ai-v2/f5-tts-assets/ref_max.wav \
--reference-text="Солнце жёлтое. Море синее. Небо голубое. Космос чёрный. Кошка каричневая. Машина белая. Огонь оранжевый." \
--target-text="Солнце жёлтое. Море синее. Небо голубое. Космос чёрный. Кошка каричневая. Машина белая. Огонь оранжевый." \
--model-name="f5_tts"
Конфигурация Triton, важные моменты
model_repo/f5_tts/config.pbtxtуказывает на:model_path: ./F5-TTS/F5TTS_v1_Base_v2/model_last.ptvocab_file: ./F5-TTS/F5TTS_v1_Base/vocab.txt(я также пробовал подставлять свой точный русскийvocab.txt, используемый в рабочем CLI; см. ниже)tllm_model_dir: ./f5_trt_llm_engine- vocoder:
vocos
- Vocos план успешно экспортируется и создаётся.
- TRT-движок строится без ошибок (много warning про dtype, но без фейлов).
Что уже попробовал
- Синхронизировал
vocab.txt:- Убрал дефолтные словари и во всех местах (и в Triton, и в локальной среде) использую ровно один и тот же
vocab.txt, с которым локальный CLI даёт корректный синтез. - Проверил, что
config.pbtxtреально указывает на этот файл.
- Убрал дефолтные словари и во всех местах (и в Triton, и в локальной среде) использую ровно один и тот же
- Пробовал менять
nfe_steps(до 32) — не помогает (и ожидаемо: это влияет на качество/стабильность, но не исправляет «мусорные» токены). - Убедился, что в
model_pathиспользуетсяmodel_last.pt(EMA), а неmodel_last_inference.safetensors. - Референс-аудио/текст — ровно те же, что дают корректный результат в локальном CLI.
Логи/артефакты из запуска
- TRT-LLM build (успешно), множество предупреждений вида:
Parameter dtype is None, using default dtype: DataType.FLOAT ...Provided but not required tensors: {... text_embed.* ...}
- Triton сервер:
f5_ttsиvocoderв статусе READY, HTTP на 8000, gRPC на 8001, метрики на 8002.
- При инференсе выход — повторяющиеся однообразные звуки без слов.
Почему считаю, что дело в конвертации под TRT-LLM
- Тот же чекпойнт + тот же словарь + те же референсы локально (CLI/питон-бекенд) работают корректно.
- В Triton с дефолтной моделью SWivid звук хороший (значит сам пайплайн запросов ок).
- На стороне Triton-модели mel-спека и токенизация соответствуют стандартной конфигурации (Vocos 24k, 100 мелов, hop 256, win 1024; токены формируются из конкатенации ref+target по
vocab.txt). Если словарь правильный, и CLI на нём работает, но именно TRT-движок даёт мусор — вероятен сбой вscripts/convert_checkpoint.py/builder.
Гипотезы
- Несовместимость/особенности кастомного чекпойнта с текущим
convert_checkpoint.py(name mapping, EMA, dtype, head scaling и т.п.) — в итоге TRT-движок выдаёт некорректный mel. - Отличия в архитектурных деталях/токенизаторе у чужого дообученного чекпойнта (например, размер/состав словаря, на который не рассчитаны текущие скрипты конвертации), несмотря на то, что локальный PyTorch-инференс проходит.
возможно это будет интересно https://github.com/SWivid/F5-TTS/compare/main...CallmeZhangChenchen:F5-TTS:opt_trtllm_v1_support
возможно это будет интересно https://github.com/SWivid/F5-TTS/compare/main...CallmeZhangChenchen:F5-TTS:opt_trtllm_v1_support
не работает всё равно, как бы Я не правил model.py и config.pbtxt падение с ошибкой:
I1008 11:48:10.005858 3598 grpc_server.cc:2558] "Started GRPCInferenceService at 0.0.0.0:8001"
I1008 11:48:10.006029 3598 http_server.cc:4725] "Started HTTPService at 0.0.0.0:8000"
I1008 11:48:10.047449 3598 http_server.cc:358] "Started Metrics Service at 0.0.0.0:8002"
W1008 11:48:11.011164 3598 metrics.cc:662] "Unable to get power usage for GPU 0. Status:Success, value:0.000000"
W1008 11:48:11.011186 3598 metrics.cc:686] "Unable to get energy consumption for GPU 0. Status:Success, value:0"
W1008 11:48:12.014866 3598 metrics.cc:662] "Unable to get power usage for GPU 0. Status:Success, value:0.000000"
W1008 11:48:12.014940 3598 metrics.cc:686] "Unable to get energy consumption for GPU 0. Status:Success, value:0"
W1008 11:48:13.015869 3598 metrics.cc:662] "Unable to get power usage for GPU 0. Status:Success, value:0.000000"
W1008 11:48:13.015909 3598 metrics.cc:686] "Unable to get energy consumption for GPU 0. Status:Success, value:0"
batch 1
Signal (11) received.
0# 0x000061F0F0F06B48 in tritonserver
1# 0x000072F73C7F0330 in /lib/x86_64-linux-gnu/libc.so.6
Segmentation fault
[email protected]:/workspace/F5-TTS/src/f5_tts/runtime/triton_trtllm$ I1008 11:48:22.385673 3646 pb_stub.cc:2145] Non-graceful termination detected.
Удалось в итоге запустить? Или не стоит даже начинать?