12 KiB
12 KiB
🎙️ 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
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 :
# 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
#!/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
- Architecture définie (VM + Docker Compose)
- É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 |