ci / test (push) Successful in 24s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
81 lines
2.8 KiB
YAML
81 lines
2.8 KiB
YAML
# Rolle "gpu-main" / "gpu-flex" (VM mit durchgereichter RTX 4000 Ada): vLLM mit Multi-LoRA.
|
||
name: knaster-gpu-vllm
|
||
|
||
services:
|
||
vllm:
|
||
image: vllm/vllm-openai:${VLLM_TAG:-v0.10.0} # Engine-Updates laufen als Lifecycle-Kandidat
|
||
container_name: vllm
|
||
restart: unless-stopped
|
||
labels: {autoheal: "true"}
|
||
ipc: host
|
||
env_file: [{path: .env, required: false}]
|
||
environment:
|
||
VLLM_ALLOW_RUNTIME_LORA_UPDATING: "True" # Adapter per /v1/load_lora_adapter nachladen
|
||
command:
|
||
- --model=${VLLM_MODEL:?VLLM_MODEL fehlt}
|
||
- --served-model-name=${SLOT_ALIAS:?SLOT_ALIAS fehlt}
|
||
- --max-model-len=${MAX_MODEL_LEN:-32768}
|
||
- --gpu-memory-utilization=${GPU_MEM_UTIL:-0.90}
|
||
- --enable-lora
|
||
- --max-loras=${MAX_LORAS:-4}
|
||
- --max-lora-rank=${MAX_LORA_RANK:-64}
|
||
- --host=0.0.0.0
|
||
- --port=8000
|
||
volumes:
|
||
- ${MODELS_DIR:-/srv/models}:/root/.cache/huggingface
|
||
- ${ADAPTERS_DIR:-/srv/adapters}:/adapters:ro
|
||
ports: ["8000:8000"]
|
||
deploy:
|
||
resources:
|
||
reservations:
|
||
devices: [{driver: nvidia, count: 1, capabilities: [gpu]}]
|
||
healthcheck:
|
||
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=4)"]
|
||
interval: 30s
|
||
timeout: 5s
|
||
retries: 3
|
||
start_period: 300s # Laden großer Modelle
|
||
|
||
# Qwen3-TTS (ADR-0006) – nur auf gpu-flex, Profil "tts". Server muss OpenAI-kompatibles
|
||
# /v1/audio/speech anbieten (z. B. ein Wrapper um faster-qwen3-tts); Image-Wahl beim Deployment.
|
||
qwen-tts:
|
||
image: ${QWEN_TTS_IMAGE:-knaster/qwen-tts:unset}
|
||
container_name: qwen-tts
|
||
profiles: ["tts"]
|
||
restart: unless-stopped
|
||
labels: {autoheal: "true"}
|
||
environment:
|
||
TTS_MODEL: ${QWEN_TTS_MODEL:-Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice}
|
||
volumes:
|
||
- ${MODELS_DIR:-/srv/models}:/root/.cache/huggingface
|
||
ports: ["8091:8091"]
|
||
deploy:
|
||
resources:
|
||
reservations:
|
||
devices: [{driver: nvidia, count: 1, capabilities: [gpu]}]
|
||
|
||
gpu-exporter:
|
||
image: utkuozdemir/nvidia_gpu_exporter:1.2.1
|
||
restart: unless-stopped
|
||
ports: ["9835:9835"]
|
||
deploy:
|
||
resources:
|
||
reservations:
|
||
devices: [{driver: nvidia, count: all, capabilities: [gpu, utility]}]
|
||
|
||
node-exporter:
|
||
image: prom/node-exporter:v1.8.1
|
||
restart: unless-stopped
|
||
command: ["--path.rootfs=/host", "--collector.textfile.directory=/textfile"]
|
||
pid: host
|
||
volumes:
|
||
- /:/host:ro,rslave
|
||
- /var/lib/node_exporter/textfile:/textfile:ro
|
||
ports: ["9100:9100"]
|
||
|
||
autoheal:
|
||
image: willfarrell/autoheal:1.2.0
|
||
restart: unless-stopped
|
||
environment: {AUTOHEAL_CONTAINER_LABEL: autoheal, AUTOHEAL_START_PERIOD: "300"}
|
||
volumes: ["/var/run/docker.sock:/var/run/docker.sock"]
|