--- license: apache-2.0 tags: - voice - stt - tts - sglang - vllm - arabic - blackwell - vast --- # Dual-5090 voice stack (STT + LLM + TTS) Bootstrap scripts that bring up a known-good Arabic voice stack on **2× RTX 5090** (Vast.ai / similar). Tuned for Blackwell (sm_120): no FP8 KV / ngram on the LLM, Moss TTS forced to SDPA, CUDA graphs off, HF cache on `/dev/shm` when disk is tight. | Service | Port | GPU | Model | Runtime | |---------|------|-----|-------|---------| | LLM | `8000` | 0 (shared w/ STT) | `ibm-granite/granite-4.1-8b` | SGLang | | STT | `8002` | 0 (shared w/ LLM) | `CohereLabs/cohere-transcribe-arabic-07-2026` | vLLM 0.19 | | TTS | `8003` | 1 (dedicated) | `Rabe3/Moss-Saudi-3` | sglang-omni | ## One-time setup on a new machine ```bash # 1) HF token (write/read for this private repo; also needed for gated STT) export HF_TOKEN=hf_... # 2) Clone this private repo (replace USER with your HF username) git clone https://USER:$HF_TOKEN@huggingface.co/USER/vast-voice-stack ~/agent-deploy cd ~/agent-deploy chmod +x *.sh # 3) Disk: need ~40G+ free for two CUDA envs, OR leave HF cache on /dev/shm # (default in common.sh). Prefer a host volume / larger disk when possible. # 4) Launch (sequential install — do not parallelize first boot) ./deploy_all.sh ``` Upload from a machine that already has the scripts: ```bash export HF_TOKEN=hf_... # token for the target account ./push_to_hf.sh # creates private USER/vast-voice-stack and uploads ``` Health checks: `curl -sf localhost:8000/health` / `:8002` / `:8003`. Restart clean: ```bash ./deploy_all.sh restart-clean ``` ## Load test (Locust) ```bash ./run_locust_ui.sh --local-only # or without flag to expose via Vast portal port 10100 ``` Custom metrics: `llm_ttfb`, `tts_ttfa`, `stt_ttfb`, `pipe_e2e`. On this layout TTS is the concurrency ceiling (~5–6 RPS full-WAV), not the LLM. ## What these scripts already fix - **Disk**: sequential env install, `PIP_NO_CACHE_DIR`, shared `~/sglang-env` for LLM+TTS, HF cache → `/dev/shm/hf_home` when overlay is ~32G. - **sglang-omni**: not on PyPI — clone + `uv pip install -e` with protobuf override. - **STT**: transformers from git for `cohere_asr`; prefer local HF snapshot if present. - **GPU1 budget**: TTS dedicated at `MEM_FRACTION=0.72` (colocated Moss OOM’d at 0.85). - **GPU0 budget**: STT `MEM_UTIL=0.18` + LLM `MEM_FRACTION=0.68`. - **LLM on Blackwell**: bf16 KV, no ngram speculative decoding (FP8/ngram caused device asserts). - **Moss on Blackwell**: patch FA→SDPA in vocoder + audio tokenizer; `cuda_graph: false`. Load test: ```bash ./run_loadtest.sh # TTS + pipeline concurrency ramp (stream+pcm) ./run_loadtest.sh pipe # pipeline only ./run_locust_ui.sh # interactive UI ``` ## Env knobs | Variable | Default | Meaning | |----------|---------|---------| | `HF_TOKEN` | — | Required for gated STT download | | `MODEL` | per-script | Override model id or local path | | `PORT` | 8000/8002/8003 | Bind port | | `MEM_FRACTION` / `MEM_UTIL` | see scripts | GPU memory share | | `LOG_DIR` | `~/agent-logs` | Server logs | ## Layout ``` common.sh # toolchain, HF home, venvs, omni + Blackwell patches start_stt.sh / start_llm.sh / start_tts.sh deploy_all.sh moss_tts_local_blackwell.yaml # Moss pipeline config for 5090 locustfile.py / run_locust_ui.sh ``` ## Notes - Models are **not** vendored here (~30G). Scripts pull them via Hugging Face Hub. - `/dev/shm` HF cache is **lost on reboot** — re-download or point `HF_HOME` at a persistent volume. - TTS returns full WAV (not streaming); latency grows under load even when LLM TTFT stays low.