Files
esh-pfi-infrastructure/stacks/cosyvoice/compose.yaml
T
vh 1a67370138 parakeet + cosyvoice: add stacks + deploy to irv-ml1
Two new speech stacks on irv-ml1, both on the /worktank/<stack>/
pattern, no tnet (irv-ml1 is local-endpoints-only for now).

parakeet — ASR via Shadowfita/parakeet-tdt-0.6b-v2-fastapi:
  - docker buildx git context pinned to SHA 31c5652; no source
    vendored. Rebuild on SHA bump.
  - GPU-capable FastAPI + Silero VAD + WS streaming.
  - API: POST /transcribe, WS /ws/transcribe, GET /healthz. Not the
    literal OpenAI `/v1/audio/transcriptions` path — note in README.
  - HF cache at /worktank/parakeet/models/ (excluded from restic).
  - Build ~158s first time; steady-state start ~40s.

cosyvoice — TTS via neosun/cosyvoice:v1.3.2 shipping
Fun-CosyVoice3-0.5B-2512 (CosyVoice 3, chosen over v2 for the
expanded 5,000-hour instruction-following data covering emotions,
speed, tones, dialects, accents, role-playing; ~150ms streaming
TTFB matches v2). API: /v1/audio/speech (OpenAI drop-in),
/v1/voices/create (cloning), /health.
  - Host port 8190 (container 8188; host 8188 already taken by comfyui).
  - /worktank/cosyvoice/{voices,input,output}/; voices include in
    restic (precious — reproducing a clone needs the original ref
    audio), input+output excluded (scratch).
  - Model weights (~2-3 GB) live inside image layer; re-download on
    tag bump, persist across `compose up -d`.

Both healthy on first deploy.
2026-04-23 23:40:36 -07:00

61 lines
2.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CosyVoice — multilingual expressive TTS with voice cloning.
#
# Ships the Fun-CosyVoice3-0.5B-2512 model from FunAudioLLM (latest
# as of 2026-04). Streaming PCM chunks with ~150 ms TTFB. Emotional
# control via either XML tags (<angry>text</angry>) or instruction
# prompts (`You are a helpful assistant. <|endofprompt|>` syntax).
#
# Runs on irv-ml1 (dual GPU). Both GPUs exposed via
# NVIDIA_VISIBLE_DEVICES=all; image reads CUDA_VISIBLE_DEVICES if
# you later want to pin.
#
# Path split:
# /worktank/cosyvoice/voices → /data/voices cloned speaker profiles
# /worktank/cosyvoice/input → /data/input scratch for uploaded source audio
# /worktank/cosyvoice/output → /data/output synthesized clips
#
# Models (~23 GB) download on first run into the image's internal
# pretrained_models/ path. Not bind-mounted (the image expects an
# exact layout we don't have authoritative docs for); recreating the
# container without the cached image will re-download. Cached image
# layer persists through `compose up -d` recreates.
#
# API routes (OpenAI-compatible where marked):
# POST /v1/audio/speech — OpenAI drop-in for TTS
# POST /v1/voices/create — voice cloning (reference audio in)
# GET /v1/voices — list cloned voices
# GET /health — health probe
#
# All tunables live in .env — edit that, not this file.
services:
cosyvoice:
image: neosun/cosyvoice:${COSYVOICE_VERSION}
container_name: cosyvoice
restart: unless-stopped
runtime: nvidia
ports:
- "${COSYVOICE_BIND:-0.0.0.0}:${COSYVOICE_PORT}:8188"
environment:
- NVIDIA_VISIBLE_DEVICES=all
- MODEL_DIR=${COSYVOICE_MODEL_DIR:-pretrained_models/Fun-CosyVoice3-0.5B}
- PORT=8188
- GPU_IDLE_TIMEOUT=${COSYVOICE_GPU_IDLE_TIMEOUT:-600}
volumes:
- ${COSYVOICE_VOICES_DIR}:/data/voices
- ${COSYVOICE_INPUT_DIR}:/data/input
- ${COSYVOICE_OUTPUT_DIR}:/data/output
healthcheck:
test: ["CMD-SHELL", "curl -fsS http://localhost:8188/health >/dev/null || exit 1"]
interval: 30s
timeout: 10s
retries: 3
# First boot pulls ~23 GB of model weights.
start_period: 300s
labels:
- homepage.group=AI Systems
- homepage.name=CosyVoice
- homepage.icon=mdi-account-voice
- homepage.description=Expressive multilingual TTS + cloning (irv-ml1)
- homepage.href=http://10.100.79.3:${COSYVOICE_PORT}