Multi-GPU AI Orchestrator v3.0
Date: 07/02/2026 17:35
Status: TERMINE
Objectif
Permettre 2 outils IA simultanes sur 2 GPUs differents (RTX 3090 + RTX 2070 Super) dans l'ai-orchestrator, avec smart routing Ollama et dashboard live.
Modifications effectuees
ai-orchestrator/app/main.py (v2.0.0 → v3.0.0)
- GPU_CONFIG : constantes GPU (id, nom, VRAM) pour RTX 3090 (0) et RTX 2070 Super (1)
- Tool.gpu_id : champ pour assigner chaque outil a un GPU
- GPU 0 : ollama, comfyui, fooocus, wan21
- GPU 1 : applio, bark, musicgen, sadtalker, facefusion, triposr, ollama-gpu1
- active_tools : dict per-GPU
{0: None, 1: None} remplace active_tool
- GPUStatus : enrichi avec
gpu_id, gpu_name
- get_all_gpu_status() : requete nvidia-smi multi-GPU
- start_tool() : conflit uniquement sur meme GPU, CUDA_VISIBLE_DEVICES wrapper, skip cmd /c pour .bat
- stop_tool() : cleanup per-GPU
- GET /api/gpu : retourne
{gpus: [...], active_tools: {...}}
- ollama-gpu1 : 2e instance Ollama sur port 11435, GPU 1
- Smart routing : round-robin petits modeles (~50/50 GPU 0/1), gros modeles GPU 0 only
- Detection auto : si health check OK → met a jour active_tools (survit aux restarts container)
win11
C:\Users\gouro\start_ollama_gpu1.bat : set CUDA_VISIBLE_DEVICES=1 + OLLAMA_HOST + ollama serve
mcp-claude-tools/server.py
ai_status() : parse nouveau format multi-GPU /api/gpu
- Fix cles cassees (memory_used → vram_used, etc.)
dashboard-33800 (monitoring)
- 19-ai-orchestrator.sh : 2 sections GPU cote a cote, badges GPU par outil, donnees live (JS fetch au load + 15s)
- 20-ai-jobs.sh : ligne GPU compacte sous les 4 stats, donnees live (JS fetch au load + 5s)
- Plus de curl API au build - tout est live via JS
Bugs rencontres et corriges
- schtasks guillemets imbriques :
cmd /c "set ... && exe" dans /TR "..." casse le parsing → fix: .bat dedie + skip wrapping pour .bat
- active_tools non mis a jour : health check OK mais start_tool jamais appele → fix: update state quand tool deja running
- generate.sh ecrase les modifs directes : HTML modifie directement, regen par generate.sh → fix: modifier le script generateur, pas le HTML
- Tous les jobs sur GPU 1 : smart routing "prefer GPU 1" envoyait 100% sur GPU 1 → fix: round-robin hash(job_id) % 2
Deploiement
- ai-orchestrator : 6 commits, pipelines #838-#844, toutes success
- mcp-claude-tools : 1 commit, push manuel (pas de CI/CD)
- dashboard-33800 : 3 commits, push GitLab + deploy O2switch via generate.sh
Verification
GET /api/gpu : 2 GPUs avec VRAM/temp/util correctes
GET /api/tools : 11 outils avec gpu_id/gpu_name
- 2 outils simultanes : ollama GPU 0 + ollama-gpu1 GPU 1
- Dashboard live : donnees actualisees sans generate.sh
- Smart routing : logs round-robin GPU0/GPU1 en alternance