3.0 KiB
3.0 KiB
tts-server containerizzato (Qwen3-TTS, backend Vulkan)
Containerizza il server TTS (qwentts.cpp) con accelerazione GPU Vulkan, portabile su qualsiasi host con GPU AMD/Intel (Mesa RADV) o NVIDIA (ICD Vulkan).
Architettura
- Multi-stage build: builder con Vulkan SDK (glslc da LunarG) → runtime
minimale con
mesa-vulkan-drivers(RADV userspace). - Nessun driver kernel nel container: l'host possiede l'hardware; il
container monta solo
/dev/dri/renderD128(node render, least-privilege). GGML_NATIVE=OFF: binario portabile tra CPU diverse.- Voci clonate (
.spk/.rvq) registrate all'avvio daregister_voices.py(scansione ricorsiva di/voices; ref_text dal.txtomonimo o*_batch_ref.txt).
Requisiti host
- Docker Engine + Docker Compose v2
- GPU con driver Vulkan funzionante: verificare con
vulkaninfo --summary - Node render:
ls -l /dev/dri/renderD128(su Debian/Ubuntu serve il grupporender; su Fedora è world-writable)
Build & avvio
cd docker/tts-server
export RENDER_GID=$(getent group render | cut -d: -f3) # GID gruppo render
docker compose up -d --build
Il compose monta ../models e ../voices (relativi al file compose, cioè la
root del repo) e pubblica la porta 8881.
Verifica
curl http://localhost:8881/health # {"status":"ok"}
curl http://localhost:8881/v1/audio/voices # elenco voci registrate
Configurazione (variabili d'ambiente)
| Variabile | Default | Descrizione |
|---|---|---|
MODEL_PATH |
/models/qwen-talker-1.7b-base-Q8_0.gguf |
Modello talker |
CODEC_PATH |
/models/qwen-tokenizer-12hz-Q8_0.gguf |
Codec audio |
TTS_LANG |
auto |
Lingua (es. Italian) |
MODEL_ALIAS |
— | Alias esposto da /v1/models |
PORT |
8881 |
Porta di ascolto |
VOICE_DIR |
/voices |
Directory voci clonate |
GGML_BACKEND |
Vulkan0 |
Backend ggml |
NO_FA / CLAMP_FP16 / MAX_BATCH / ecc. |
— | Flag avanzati tts-server |
Portabilità su altre macchine
- AMD/Intel: nessuna modifica — il container usa Mesa RADV dal
mesa-vulkan-driversdell'immagine. Serve solo il node render. - NVIDIA: aggiungere il runtime nvidia al servizio:
(richiede
runtime: nvidia environment: NVIDIA_VISIBLE_DEVICES: allnvidia-container-toolkitsull'host) — oppure usare il targetcudadel Dockerfile principale del progetto. - Modelli: montare la directory con i
.gguf(talker + codec) come/models:ro. - Voci: montare la directory con
.spk/.rvq/.txtcome/voices:ro.
Troubleshooting
- Host:
vulkaninfo --summarydeve vedere la GPU. - Container:
docker exec tts-server vulkaninfo --summary(sevulkan-toolsinstallato) o controllare i log:docker logs tts-server. - Se Vulkan non vede la GPU: verificare
--device /dev/dri/renderD128e ilgroup_add(GID del grupporenderdell'host). - Non bind-mountare librerie host (
/usr/lib, ICD JSON): causa mismatch loader/driver. L'immagine ha già RADV.