42 lines
1.5 KiB
Bash
42 lines
1.5 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Container-Entrypoint: startet den vLLM-Omni TTS-Server und feuert nach
|
||
|
|
# Erreichen von /health einmalig einen Warmup-Request ab. Dieser absorbiert
|
||
|
|
# die einmalige torch.compile/CUDA-Graph-Kompilierung (~38 s), damit kein
|
||
|
|
# echter Nutzer-Request sie je trifft. Läuft bei JEDEM Containerstart
|
||
|
|
# (Reboot, Crash-Restart, manuell).
|
||
|
|
set -e
|
||
|
|
|
||
|
|
MODEL="Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice"
|
||
|
|
PORT=8091
|
||
|
|
|
||
|
|
# --- Server im Hintergrund starten ---
|
||
|
|
vllm-omni serve "$MODEL" \
|
||
|
|
--omni \
|
||
|
|
--host 0.0.0.0 \
|
||
|
|
--port "$PORT" \
|
||
|
|
--deploy-config /deploy/qwen3_tts.yaml \
|
||
|
|
--gpu-memory-utilization 0.10 \
|
||
|
|
--trust-remote-code &
|
||
|
|
SERVER_PID=$!
|
||
|
|
|
||
|
|
# --- Warmup im Hintergrund, sobald der Server gesund ist ---
|
||
|
|
(
|
||
|
|
for _ in $(seq 1 150); do
|
||
|
|
if curl -sf "http://localhost:${PORT}/health" >/dev/null 2>&1; then
|
||
|
|
echo "[warmup] Server gesund — sende Warmup-Request (kompiliert CUDA-Graphen)..."
|
||
|
|
t0=$SECONDS
|
||
|
|
curl -sf -X POST "http://localhost:${PORT}/v1/audio/speech" \
|
||
|
|
-H 'Content-Type: application/json' \
|
||
|
|
-d "{\"model\":\"${MODEL}\",\"input\":\"System wird aufgewärmt.\",\"voice\":\"Ryan\",\"language\":\"German\",\"response_format\":\"wav\"}" \
|
||
|
|
-o /dev/null \
|
||
|
|
&& echo "[warmup] fertig nach $(( SECONDS - t0 ))s — Server ist jetzt heiß." \
|
||
|
|
|| echo "[warmup] fehlgeschlagen (Server läuft trotzdem)."
|
||
|
|
break
|
||
|
|
fi
|
||
|
|
sleep 2
|
||
|
|
done
|
||
|
|
) &
|
||
|
|
|
||
|
|
# --- Auf den Server-Prozess warten (PID 1 Signalweiterleitung) ---
|
||
|
|
wait "$SERVER_PID"
|