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

12 KiB
Raw Permalink Blame History

🎙️ 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