# Rollen (SPEC-inventory §2/§3). Placement arbeitet sie nach priority ab. roles: gpu-main: priority: 1 needs: {gpu: true, engine: vllm, min_vram_gb: 16, min_cc: 7.5} prefer: largest kinds: [llm] slots: [tier1-general] gpu-flex: priority: 2 needs: {gpu: true, engine: vllm, min_vram_gb: 16, min_cc: 7.5} prefer: largest kinds: [llm] optional: true # ohne zweite große GPU: kein Fallback-Slot, Training nur nachts auf gpu-main slots: [tier1-flex] gpu-embed: priority: 3 count: 2 # redundant, damit Routing einen GPU-Ausfall übersteht needs: {gpu: true, engine: llamacpp, min_vram_gb: 3, min_cc: 5.0} prefer: smallest_fitting kinds: [embedding, reranker] cpu_fallback: true slots: [embed-default, rerank-default] gpu-small: priority: 4 needs: {gpu: true, engine: llamacpp, min_vram_gb: 4, min_cc: 5.0} prefer: smallest_fitting kinds: [llm] cpu_fallback: true slots: [verifier-small, signature-extractor] infra: priority: 5 needs: {gpu: false, min_ram_gb: 16} slots: [] tts-hq: priority: 6 share_with: gpu-flex # Qwen3-TTS auf der zweiten Ada, außerhalb der Trainingsfenster needs: {gpu: true, engine: pytorch, min_cc: 8.0} kinds: [tts] optional: true slots: [tts-de-hq] tts-cpu: priority: 7 share_with: infra # Piper läuft im Infra-LXC mit needs: {gpu: false, min_ram_gb: 8} kinds: [tts] slots: [tts-de]