Files
VASTAI-STUDIO-AUDIO/ARCHITECTURE-STUDIO-AI.md

426 lines
12 KiB
Markdown
Raw Permalink 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.

# 🎙️ Studio IA Multimodal — Architecture & Spécifications
## Version 3 — VM Vast.ai + Docker Compose
---
## 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.
```
┌─────────────────────────────────────────────────┐
│ 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. Template Vast.ai — Mode VM
| 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 |
---
## 3. Structure du dépôt Gitea
```
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
```
---
## 4. docker-compose.yml
```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
```
---
## 5. Dockerfile type par service
Chaque service a son propre Dockerfile avec ses dépendances exactes.
Exemple pour ACE-Step :
```dockerfile
# services/ace-step/Dockerfile
FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
python3.11 python3.11-pip python3.11-venv \
ffmpeg libsndfile1 git wget
RUN python3.11 -m pip install --upgrade pip
# Dépendances spécifiques ACE-Step
RUN python3.11 -m pip install \
torch==2.2.0 torchaudio==2.2.0 \
--index-url https://download.pytorch.org/whl/cu121
RUN python3.11 -m pip install ace-step gradio fastapi uvicorn
COPY server.py /app/server.py
WORKDIR /app
EXPOSE 7860
CMD ["python3.11", "server.py"]
```
Même structure pour chaque service, avec les versions exactes requises par chaque modèle.
---
## 6. Provisioning Script VM
```bash
#!/bin/bash
# =============================================================
# Studio IA — Provisioning Script VM Vast.ai
# =============================================================
set -eo pipefail
echo "🚀 Installation de Docker..."
curl -fsSL https://get.docker.com | bash
systemctl enable docker
systemctl start docker
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
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
echo "📥 Téléchargement des modèles..."
bash models/download_audio.sh
bash models/download_tts.sh
bash models/download_image.sh
echo "🏗️ Build et lancement des containers..."
docker compose up -d --build
echo ""
echo "✅ Studio IA prêt !"
echo " Open WebUI → http://[IP]:3000"
echo " ComfyUI → http://[IP]:8188"
echo " ACE-Step → http://[IP]:7860"
```
---
## 7. Modèles — État de l'art 2026
### 🎵 Musique
| Modèle | VRAM | Qualité | Vitesse |
|---|---|---|---|
| **ACE-Step 1.5** | 8-12 Go | ⭐⭐⭐⭐ | Très rapide |
| **Heart Mula** | 12-16 Go | ⭐⭐⭐⭐⭐ | Lente |
### 🎤 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 |
### 🔊 Foley
| Modèle | VRAM | Spécialité |
|---|---|---|
| **HunyuanVideo-Foley** | 12-16 Go | Analyse vidéo → son synchronisé |
### 🖼️ Image
| Modèle | VRAM | Qualité |
|---|---|---|
| **Flux.1** | 12-16 Go | ⭐⭐⭐⭐⭐ |
| **SDXL** | 8-12 Go | ⭐⭐⭐⭐ |
---
## 8. Estimation disque
| Élément | Taille |
|---|---|
| Images Docker (tous services) | ~20 Go |
| Modèles LLM (Mistral + CodeLlama) | ~12 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 + SDXL | ~20 Go |
| Outputs utilisateurs | ~10 Go |
| **Total** | **~88 Go** |
> ✅ **130 Go = juste suffisant**
> ⭐ **200 Go = recommandé pour être à l'aise**
---
## 9. Configuration Open WebUI (à faire avec Claude)
### 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é
- [ ] **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 API (Functions) → Claude**
- [ ] **System Prompts → Claude**
- [ ] 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 |