diff --git a/ARCHITECTURE-STUDIO-AI.md b/ARCHITECTURE-STUDIO-AI.md index 3273c36..0df6155 100644 --- a/ARCHITECTURE-STUDIO-AI.md +++ b/ARCHITECTURE-STUDIO-AI.md @@ -1,263 +1,426 @@ # 🎙️ Studio IA Multimodal — Architecture & Spécifications -## Version 2026 — État de l'art +## Version 3 — VM Vast.ai + Docker Compose --- -## 1. Architecture générale +## 1. Principe général + +Sur Vast.ai, utiliser le mode **VM** (Virtual Machine) au lieu du mode Container. +Cela donne un accès root complet à une vraie machine, avec Docker Engine installé nativement. +Chaque modèle IA tourne dans son propre container Docker, orchestré par Docker Compose. ``` -[Utilisateur navigateur] - ↓ -[Open WebUI — port 3000] - ↓ -[Ollama — Mistral Medium] - ↓ (Tools/Functions) - ┌────┴────┬──────────┬──────────┐ -[Audio] [Voix] [Foley] [Image] -port 7860 port 7861 port 7862 port 8188 +┌─────────────────────────────────────────────────┐ +│ VM Vast.ai (RTX A4000 16Go / 130Go SSD) │ +│ │ +│ ┌─────────────┐ ┌─────────────┐ │ +│ │ open-webui │ │ ollama │ │ +│ │ :3000 │ │ :11434 │ │ +│ └──────┬──────┘ └─────────────┘ │ +│ │ Tools API │ +│ ┌──────┴──────────────────────────────┐ │ +│ │ Docker Network │ │ +│ └──────┬──────┬──────┬──────┬─────────┘ │ +│ ┌──────┴─┐ ┌──┴───┐ ┌┴─────┐ ┌──────┐ ┌─────┐ │ +│ │ace-step│ │heart │ │zonos │ │index │ │huny │ │ +│ │ :7860 │ │:7861 │ │:7862 │ │:7863 │ │:7864│ │ +│ └────────┘ └──────┘ └──────┘ └──────┘ └─────┘ │ +│ ┌──────────────────┐ │ +│ │ comfyui │ │ +│ │ :8188 │ │ +│ └──────────────────┘ │ +└─────────────────────────────────────────────────┘ ``` --- -## 2. Pile logicielle — État de l'art 2026 +## 2. Template Vast.ai — Mode VM -### 🎵 Génération Musicale -| Modèle | Forces | VRAM | Vitesse | -|---|---|---|---| -| **Heart Mula** (Jan 2026) ⭐ | Morceaux 6 min, structure complète, qualité Suno | 12-16 Go | Lente | -| **ACE-Step 1.5** | Ultra-rapide, cohérence harmonique, idéal novices | 8-12 Go | Très rapide | -| ~~MusicGen (Meta)~~ | Boucles 30s seulement — dépassé | 8 Go | Rapide | - -> **Choix recommandé :** ACE-Step 1.5 pour les novices (rapidité), Heart Mula pour la qualité maximale +| Paramètre | Valeur | +|---|---| +| **Type** | VM (Virtual Machine) | +| **GPU** | RTX A4000 16 Go | +| **Disk** | 130 Go minimum (200 Go recommandé) | +| **Launch mode** | VM | +| **OS** | Ubuntu 22.04 | +| **PROVISIONING_SCRIPT** | URL Gitea → installe Docker + lance compose | --- -### 🎤 Voix Off (TTS) -| Modèle | Forces | VRAM | -|---|---|---| -| **Zonos-v0.1** (Zyphra) ⭐ | 44kHz natif, tags émotion, clone voix 10s | 8-12 Go | -| **IndexTTS-2** ⭐ | Contrôle milliseconde de durée, sync animation | 8 Go | +## 3. Structure du dépôt Gitea -> **Choix recommandé :** Les deux sont complémentaires et indispensables -> - Zonos pour la narration et les voix expressives -> - IndexTTS-2 pour la sync animation et le lip-sync +``` +VASTAI-STUDIO-AUDIO/ +├── docker-compose.yml ← Orchestration principale +├── provisioning_script.sh ← Installation Docker + lancement +├── .env ← Variables (ports, tokens...) +│ +├── services/ +│ ├── open-webui/ +│ │ └── Dockerfile +│ ├── ace-step/ +│ │ ├── Dockerfile +│ │ └── server.py +│ ├── heart-mula/ +│ │ ├── Dockerfile +│ │ └── server.py +│ ├── zonos/ +│ │ ├── Dockerfile +│ │ └── server.py +│ ├── indextts/ +│ │ ├── Dockerfile +│ │ └── server.py +│ ├── hunyuan-foley/ +│ │ ├── Dockerfile +│ │ └── server.py +│ └── comfyui/ +│ └── Dockerfile +│ +└── models/ ← Scripts de téléchargement + ├── download_audio.sh + ├── download_tts.sh + └── download_image.sh +``` --- -### 🔊 Bruitages & Foley -| Modèle | Forces | VRAM | -|---|---|---| -| **HunyuanVideo-Foley** ⭐ | Analyse vidéo → son synchronisé, révolutionnaire | 12-16 Go | -| ~~AudioGen (Meta)~~ | Texte seulement, pas de sync vidéo — dépassé | 8 Go | +## 4. docker-compose.yml -> **Choix recommandé :** HunyuanVideo-Foley uniquement — Meta est dépassé sur ce segment +```yaml +version: '3.8' + +networks: + studio-network: + driver: bridge + +volumes: + ollama-data: + openwebui-data: + models-audio: + models-image: + models-tts: + outputs: + +services: + + # ─── INTERFACE & LLM ─────────────────────────── + + ollama: + image: ollama/ollama:latest + container_name: ollama + runtime: nvidia + environment: + - NVIDIA_VISIBLE_DEVICES=all + volumes: + - ollama-data:/root/.ollama + ports: + - "11434:11434" + networks: + - studio-network + restart: unless-stopped + + open-webui: + image: ghcr.io/open-webui/open-webui:main + container_name: open-webui + depends_on: + - ollama + environment: + - OLLAMA_BASE_URL=http://ollama:11434 + - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY} + - ENABLE_SIGNUP=true + volumes: + - openwebui-data:/app/backend/data + ports: + - "3000:8080" + networks: + - studio-network + restart: unless-stopped + + # ─── GÉNÉRATION MUSICALE ─────────────────────── + + ace-step: + build: ./services/ace-step + container_name: ace-step + runtime: nvidia + environment: + - NVIDIA_VISIBLE_DEVICES=all + volumes: + - models-audio:/models + - outputs:/outputs + ports: + - "7860:7860" + networks: + - studio-network + restart: unless-stopped + + heart-mula: + build: ./services/heart-mula + container_name: heart-mula + runtime: nvidia + environment: + - NVIDIA_VISIBLE_DEVICES=all + volumes: + - models-audio:/models + - outputs:/outputs + ports: + - "7861:7861" + networks: + - studio-network + restart: unless-stopped + + # ─── VOIX OFF ────────────────────────────────── + + zonos: + build: ./services/zonos + container_name: zonos + runtime: nvidia + environment: + - NVIDIA_VISIBLE_DEVICES=all + volumes: + - models-tts:/models + - outputs:/outputs + ports: + - "7862:7862" + networks: + - studio-network + restart: unless-stopped + + indextts: + build: ./services/indextts + container_name: indextts + runtime: nvidia + environment: + - NVIDIA_VISIBLE_DEVICES=all + volumes: + - models-tts:/models + - outputs:/outputs + ports: + - "7863:7863" + networks: + - studio-network + restart: unless-stopped + + # ─── FOLEY ───────────────────────────────────── + + hunyuan-foley: + build: ./services/hunyuan-foley + container_name: hunyuan-foley + runtime: nvidia + environment: + - NVIDIA_VISIBLE_DEVICES=all + volumes: + - models-audio:/models + - outputs:/outputs + ports: + - "7864:7864" + networks: + - studio-network + restart: unless-stopped + + # ─── GÉNÉRATION IMAGE ────────────────────────── + + comfyui: + build: ./services/comfyui + container_name: comfyui + runtime: nvidia + environment: + - NVIDIA_VISIBLE_DEVICES=all + volumes: + - models-image:/root/ComfyUI/models + - outputs:/outputs + ports: + - "8188:8188" + networks: + - studio-network + restart: unless-stopped +``` --- -### 🖼️ Génération Image -| Modèle | Forces | VRAM | -|---|---|---| -| **Flux.1** | Meilleure qualité actuelle | 12-16 Go | -| **SDXL** | Rapide, bon écosystème LoRA | 8-12 Go | +## 5. Dockerfile type par service ---- - -### 💬 Chat & Code -| Modèle | Forces | VRAM | -|---|---|---| -| **Mistral Medium** (Ollama) | Chat général, orchestration outils | 8-12 Go | -| **CodeLlama** (Ollama) | Génération de code | 8 Go | - ---- - -## 3. Ports & Services - -| Service | Port | Technologie | -|---|---|---| -| Open WebUI | 3000 | Interface unifiée | -| Ollama | 11434 | LLM (Mistral + CodeLlama) | -| Musique | 7860 | ACE-Step 1.5 + Heart Mula via ComfyUI | -| Voix Off | 7861 | Zonos-v0.1 + IndexTTS-2 | -| Foley | 7862 | HunyuanVideo-Foley | -| Images | 8188 | ComfyUI (Flux.1 + SDXL) | - ---- - -## 4. Image Docker de base - -**Nom cible :** `nicoboy/studio-ai:latest` - -### Dockerfile (à construire avec Gemini) +Chaque service a son propre Dockerfile avec ses dépendances exactes. +Exemple pour ACE-Step : ```dockerfile -FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 +# services/ace-step/Dockerfile +FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 ENV DEBIAN_FRONTEND=noninteractive -ENV PYTHONUNBUFFERED=1 -# Python 3.11 -RUN apt-get update && \ - apt-get install -y software-properties-common && \ - add-apt-repository ppa:deadsnakes/ppa && \ - apt-get update && \ - apt-get install -y \ - python3.11 \ - python3.11-venv \ - python3.11-distutils \ - python3.11-dev +RUN apt-get update && apt-get install -y \ + python3.11 python3.11-pip python3.11-venv \ + ffmpeg libsndfile1 git wget -# Dépendances système -RUN apt-get install -y \ - ffmpeg libsndfile1 sox \ - git wget curl nano screen \ - nodejs npm \ - libgl1 libglib2.0-0 - -# pip pour Python 3.11 -RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 RUN python3.11 -m pip install --upgrade pip -# PyTorch CUDA 12.1 +# Dépendances spécifiques ACE-Step RUN python3.11 -m pip install \ - torch torchvision torchaudio \ + torch==2.2.0 torchaudio==2.2.0 \ --index-url https://download.pytorch.org/whl/cu121 -# Open WebUI -RUN python3.11 -m pip install open-webui +RUN python3.11 -m pip install ace-step gradio fastapi uvicorn -# Ollama -RUN curl -fsSL https://ollama.ai/install.sh | sh +COPY server.py /app/server.py +WORKDIR /app -# Dépendances audio communes -RUN python3.11 -m pip install \ - gradio \ - fastapi \ - uvicorn \ - scipy \ - soundfile \ - transformers \ - accelerate \ - diffusers - -# ComfyUI dépendances -RUN python3.11 -m pip install \ - einops \ - kornia \ - spandrel - -WORKDIR /root +EXPOSE 7860 +CMD ["python3.11", "server.py"] ``` -### ⚠️ Points critiques pour Gemini -1. **Python 3.11 obligatoire** — Open WebUI refuse Python 3.10 -2. **Ne pas inclure les modèles** — trop lourds, téléchargés via provisioning script -3. **Image sur DockerHub public** — nécessaire pour Vast.ai -4. **CUDA 12.1** — compatible A4000 et RTX 4060 Ti -5. **Tester** : `docker build -t nicoboy/studio-ai .` puis `docker push nicoboy/studio-ai:latest` +Même structure pour chaque service, avec les versions exactes requises par chaque modèle. --- -## 5. Provisioning Script (1er lancement ~30-45 min) +## 6. Provisioning Script VM ```bash #!/bin/bash +# ============================================================= +# Studio IA — Provisioning Script VM Vast.ai +# ============================================================= set -eo pipefail -# --- MUSIQUE --- -# ACE-Step 1.5 -pip install ace-step -# Heart Mula via ComfyUI (custom node) -git clone https://github.com/[repo]/heart-mula /root/ComfyUI/custom_nodes/heart-mula +echo "🚀 Installation de Docker..." +curl -fsSL https://get.docker.com | bash +systemctl enable docker +systemctl start docker -# --- VOIX OFF --- -# Zonos -pip install zonos -# IndexTTS-2 -git clone https://github.com/index-tts/indextts /root/indextts -pip install -r /root/indextts/requirements.txt +echo "🎮 Installation NVIDIA Container Toolkit..." +curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \ + gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg +curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ + sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ + tee /etc/apt/sources.list.d/nvidia-container-toolkit.list +apt-get update && apt-get install -y nvidia-container-toolkit +nvidia-ctk runtime configure --runtime=docker +systemctl restart docker -# --- FOLEY --- -# HunyuanVideo-Foley -git clone https://github.com/Tencent/HunyuanVideo-Foley /root/hunyuan-foley -pip install -r /root/hunyuan-foley/requirements.txt +echo "📦 Clonage du dépôt Studio IA..." +git clone https://git.syoul.fr/nicoboy/VASTAI-STUDIO-AUDIO.git /root/studio-ai +cd /root/studio-ai -# --- IMAGES --- -git clone https://github.com/comfyanonymous/ComfyUI /root/ComfyUI -pip install -r /root/ComfyUI/requirements.txt -# Télécharger Flux.1 -wget -P /root/ComfyUI/models/checkpoints/ [URL_FLUX1] +echo "📥 Téléchargement des modèles..." +bash models/download_audio.sh +bash models/download_tts.sh +bash models/download_image.sh -# --- LLM --- -ollama serve & -sleep 5 -ollama pull mistral -ollama pull codellama +echo "🏗️ Build et lancement des containers..." +docker compose up -d --build -# --- LANCEMENT DES SERVICES --- -screen -dmS openwebui open-webui serve --port 3000 -screen -dmS ollama ollama serve -screen -dmS audio python3.11 /root/audio-api/server.py -screen -dmS comfyui python3.11 /root/ComfyUI/main.py --listen 0.0.0.0 --port 8188 - -env >> /etc/environment +echo "" echo "✅ Studio IA prêt !" +echo " Open WebUI → http://[IP]:3000" +echo " ComfyUI → http://[IP]:8188" +echo " ACE-Step → http://[IP]:7860" ``` --- -## 6. Configuration Open WebUI (à faire avec Claude) +## 7. Modèles — État de l'art 2026 -> Cette partie sera traitée après le build Docker. +### 🎵 Musique +| Modèle | VRAM | Qualité | Vitesse | +|---|---|---|---| +| **ACE-Step 1.5** | 8-12 Go | ⭐⭐⭐⭐ | Très rapide | +| **Heart Mula** | 12-16 Go | ⭐⭐⭐⭐⭐ | Lente | -### 6.1 Tools à créer -- `generate_music(prompt, duration, model)` → ACE-Step ou Heart Mula -- `generate_voice(text, emotion, duration)` → Zonos ou IndexTTS-2 -- `generate_foley(video_path, prompt)` → HunyuanVideo-Foley -- `generate_image(prompt, width, height)` → ComfyUI/Flux.1 -- `generate_code(prompt, language)` → CodeLlama +### 🎤 Voix Off +| Modèle | VRAM | Spécialité | +|---|---|---| +| **Zonos-v0.1** | 8-12 Go | Émotion, clone voix 10s, 44kHz | +| **IndexTTS-2** | 8 Go | Sync animation, contrôle durée ms | -### 6.2 System Prompt assistant -``` -Tu es un assistant créatif expert en production multimédia. -Tu guides les novices et utilises les outils appropriés : -- generate_music : composition musicale complète -- generate_voice : voix off avec émotion contrôlée -- generate_foley : bruitages synchronisés avec vidéo -- generate_image : génération d'images -- generate_code : écriture de code +### 🔊 Foley +| Modèle | VRAM | Spécialité | +|---|---|---| +| **HunyuanVideo-Foley** | 12-16 Go | Analyse vidéo → son synchronisé | -Tu poses des questions précises avant de générer, -et tu proposes des ajustements après chaque création. -``` +### 🖼️ Image +| Modèle | VRAM | Qualité | +|---|---|---| +| **Flux.1** | 12-16 Go | ⭐⭐⭐⭐⭐ | +| **SDXL** | 8-12 Go | ⭐⭐⭐⭐ | --- -## 7. Estimation disque production +## 8. Estimation disque | Élément | Taille | |---|---| -| Image Docker | ~15 Go | +| Images Docker (tous services) | ~20 Go | | Modèles LLM (Mistral + CodeLlama) | ~12 Go | -| Modèles Audio (ACE-Step, Heart Mula, Zonos, IndexTTS-2) | ~15 Go | +| Modèles Audio (ACE-Step, Heart Mula) | ~10 Go | +| Modèles TTS (Zonos, IndexTTS-2) | ~8 Go | | HunyuanVideo-Foley | ~8 Go | -| ComfyUI + Flux.1 | ~15 Go | -| Données utilisateurs + outputs | ~10 Go | -| **Total** | **~75 Go** | +| ComfyUI + Flux.1 + SDXL | ~20 Go | +| Outputs utilisateurs | ~10 Go | +| **Total** | **~88 Go** | -> ✅ 130 Go = confortable -> ⚠️ Si on ajoute SDXL + LoRA : prévoir 200 Go +> ✅ **130 Go = juste suffisant** +> ⭐ **200 Go = recommandé pour être à l'aise** --- -## 8. Checklist projet +## 9. Configuration Open WebUI (à faire avec Claude) -- [x] Architecture définie +### 9.1 Connexions à configurer +- Ollama : `http://ollama:11434` +- ACE-Step : `http://ace-step:7860` +- Heart Mula : `http://heart-mula:7861` +- Zonos : `http://zonos:7862` +- IndexTTS : `http://indextts:7863` +- HunyuanVideo : `http://hunyuan-foley:7864` +- ComfyUI : `http://comfyui:8188` + +> Sur le réseau Docker interne, les services se parlent par nom de container. + +### 9.2 Tools à créer (Functions Open WebUI) +- `generate_music(prompt, duration, model)` +- `generate_voice(text, emotion, speaker_sample)` +- `generate_foley(video_path, prompt)` +- `generate_image(prompt, width, height, model)` +- `generate_code(prompt, language)` + +### 9.3 System Prompt +``` +Tu es un assistant créatif expert en production multimédia. +Tu disposes des outils suivants : +- generate_music : composition musicale (ACE-Step ou Heart Mula) +- generate_voice : voix off avec contrôle émotionnel (Zonos ou IndexTTS) +- generate_foley : bruitage synchronisé vidéo (HunyuanVideo-Foley) +- generate_image : génération d'images (Flux.1 ou SDXL) +- generate_code : écriture de code (CodeLlama) + +Avant chaque génération, tu clarifies la demande. +Après chaque génération, tu proposes des ajustements. +``` + +--- + +## 10. Checklist projet + +- [x] Architecture définie (VM + Docker Compose) - [x] État de l'art 2026 intégré -- [ ] **Dockerfile → Gemini** -- [ ] Build + push DockerHub -- [ ] Mise à jour template Vast.ai -- [ ] Provisioning script final +- [ ] **Dockerfiles × 7 → Gemini** +- [ ] **docker-compose.yml final → Gemini** +- [ ] Build + push DockerHub (image par service) +- [ ] Test VM Vast.ai + Docker Compose +- [ ] Scripts téléchargement modèles - [ ] **Configuration Open WebUI → Claude** -- [ ] **Tools AudioCraft/Foley/TTS → Claude** +- [ ] **Tools API (Functions) → Claude** - [ ] **System Prompts → Claude** -- [ ] Tests utilisateur \ No newline at end of file +- [ ] Tests utilisateur finaux + +--- + +## 11. Avantages de cette architecture + +| Critère | Venv unique | VM + Docker Compose | +|---|---|---| +| Isolation dépendances | ⚠️ Partielle | ✅ Totale | +| Conflits de versions | ❌ Fréquents | ✅ Impossibles | +| Mise à jour d'un modèle | ❌ Risqué | ✅ Indépendante | +| Un service plante | ❌ Tout plante | ✅ Les autres continuent | +| Maintenabilité | ❌ Difficile | ✅ Simple | +| Coût Vast.ai | ✅ Une instance | ✅ Une VM | \ No newline at end of file