Téléverser les fichiers vers "/"

fichiers en +
This commit is contained in:
2026-02-23 13:26:43 +00:00
parent f45829c95a
commit 2c225b436a
2 changed files with 507 additions and 0 deletions

View File

@ -0,0 +1,286 @@
# 🎙️ Template Vast.ai — Studio IA Design Sonore
> Configuration complète pour RTX 5060 Ti (16 Go VRAM) / 130 Go de stockage
---
## 📋 Paramètres du Template
| Champ | Valeur |
|---|---|
| **Template Name** | `Studio IA - Design Sonore & Composition` |
| **Template Description** | Studio de génération audio IA pour novices. Interface web ChatGPT-like alimentée par AudioCraft (MusicGen + AudioGen). Accès navigateur uniquement, aucune compétence technique requise. |
| **Image Path:Tag** | `nvidia/cuda:12.1.1-devel-ubuntu22.04` |
| **Launch Mode** | `Jupyter + SSH` |
| **Disk Space** | `130 Go` |
| **Visibility** | `Privé` |
---
## 🔌 Ports à déclarer
| Port interne | Protocole | Usage |
|---|---|---|
| `3000` | TCP | Open WebUI (interface utilisateur) |
| `7860` | TCP | AudioCraft / Gradio API |
| `22` | TCP | SSH (auto-ajouté en mode Jupyter+SSH) |
| `8080` | TCP | Jupyter (auto-ajouté en mode Jupyter+SSH) |
---
## 🌐 Variables d'environnement
| Variable | Valeur |
|---|---|
| `PROVISIONING_SCRIPT` | https://git.syoul.fr/nicoboy/VASTAI-STUDIO-AUDIO/raw/branch/main/provisioning_script.sh?token=980621d1d7f71f71a403b6c31078bf8f3734441c |
| `PORTAL_CONFIG` | localhost:3000:3000:/:OpenWebUI|localhost:7860:7860:/:AudioCraft|localhost:1111:11111:/:Portal |
| `CUDA_VISIBLE_DEVICES` | `0` |
| `PYTORCH_CUDA_ALLOC_CONF` | `max_split_size_mb:512` |
> ⚠️ Ne jamais mettre de clés API ou mots de passe ici si le template est public.
---
## ⚙️ On-start Script
```bash
#!/bin/bash
# Persister les variables d'environnement
env >> /etc/environment
```
> Le gros du travail est dans le PROVISIONING_SCRIPT ci-dessous.
---
## 📜 PROVISIONING_SCRIPT (contenu complet)
Héberger ce script sur GitHub/Gist et pointer `PROVISIONING_SCRIPT` vers l'URL raw.
```bash
#!/bin/bash
# =============================================================
# Studio IA - Design Sonore & Composition
# Provisioning Script pour RTX 5060 Ti / CUDA 12.1
# =============================================================
set -eo pipefail
echo "🎙️ Démarrage du provisioning Studio Audio IA..."
# --- 1. MISE À JOUR SYSTÈME & DÉPENDANCES ---
apt-get update -y && apt-get install -y \
python3.10 python3.10-venv python3-pip \
ffmpeg libsndfile1 sox \
ca-certificates curl gnupg lsb-release \
git wget nano screen
# --- 2. INSTALLATION DOCKER (si non présent) ---
if ! command -v docker &> /dev/null; then
echo "📦 Installation de Docker..."
curl -fsSL https://get.docker.com | bash
fi
# --- 3. LANCEMENT OPEN WEBUI ---
echo "🖥️ Lancement d'Open WebUI sur le port 3000..."
docker pull ghcr.io/open-webui/open-webui:main
docker run -d \
--name open-webui \
--restart always \
--gpus all \
-p 3000:8080 \
-v open-webui:/app/backend/data \
-e WEBUI_SECRET_KEY="vastai-studio-secret-$(date +%s)" \
-e DEFAULT_MODELS="" \
-e ENABLE_SIGNUP=true \
ghcr.io/open-webui/open-webui:main
echo "✅ Open WebUI lancé sur le port 3000"
# --- 4. ENVIRONNEMENT PYTHON POUR AUDIOCRAFT ---
echo "🐍 Création de l'environnement Python AudioCraft..."
python3.10 -m venv /workspace/venv-audiocraft
source /workspace/venv-audiocraft/bin/activate
pip install --upgrade pip
# PyTorch compatible CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# AudioCraft (MusicGen + AudioGen)
pip install git+https://github.com/facebookresearch/audiocraft.git
# Serveur API Gradio
pip install gradio fastapi uvicorn pydantic scipy soundfile
echo "✅ AudioCraft installé"
# --- 5. API AUDIOCRAFT (script serveur) ---
echo "🎵 Création du serveur API AudioCraft..."
mkdir -p /workspace/audiocraft-api
cat > /workspace/audiocraft-api/server.py << 'PYEOF'
import gradio as gr
import torch
import scipy.io.wavfile
import numpy as np
import tempfile, os
from audiocraft.models import MusicGen, AudioGen
# Chargement des modèles (une seule fois)
print("🔄 Chargement de MusicGen...")
music_model = MusicGen.get_pretrained("facebook/musicgen-small")
music_model.set_generation_params(duration=10)
print("🔄 Chargement d'AudioGen...")
audio_model = AudioGen.get_pretrained("facebook/audiogen-medium")
audio_model.set_generation_params(duration=5)
def generate_music(prompt: str, duration: int = 10):
"""Génère de la musique à partir d'un prompt textuel."""
music_model.set_generation_params(duration=duration)
wav = music_model.generate([prompt])
wav_np = wav[0, 0].cpu().numpy()
sr = music_model.sample_rate
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
scipy.io.wavfile.write(f.name, sr, (wav_np * 32767).astype(np.int16))
return f.name
def generate_sound(prompt: str, duration: int = 5):
"""Génère des bruitages et ambiances sonores."""
audio_model.set_generation_params(duration=duration)
wav = audio_model.generate([prompt])
wav_np = wav[0, 0].cpu().numpy()
sr = audio_model.sample_rate
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
scipy.io.wavfile.write(f.name, sr, (wav_np * 32767).astype(np.int16))
return f.name
# Interface Gradio
with gr.Blocks(title="🎙️ Studio Audio IA") as demo:
gr.Markdown("## 🎙️ Studio Audio IA — AudioCraft API")
with gr.Tab("🎵 Musique (MusicGen)"):
music_prompt = gr.Textbox(label="Prompt", placeholder="Calm piano music with soft strings, 120bpm...")
music_duration = gr.Slider(5, 30, value=10, step=5, label="Durée (secondes)")
music_btn = gr.Button("🎵 Générer la musique")
music_output = gr.Audio(label="Résultat")
music_btn.click(generate_music, inputs=[music_prompt, music_duration], outputs=music_output)
with gr.Tab("🔊 Bruitages (AudioGen)"):
sound_prompt = gr.Textbox(label="Prompt", placeholder="Wood cracking, cathedral reverb, horror atmosphere...")
sound_duration = gr.Slider(2, 15, value=5, step=1, label="Durée (secondes)")
sound_btn = gr.Button("🔊 Générer le son")
sound_output = gr.Audio(label="Résultat")
sound_btn.click(generate_sound, inputs=[sound_prompt, sound_duration], outputs=sound_output)
demo.launch(server_name="0.0.0.0", server_port=7860, share=False)
PYEOF
echo "✅ Serveur API AudioCraft créé"
# --- 6. LANCEMENT DU SERVEUR AUDIOCRAFT EN ARRIÈRE-PLAN ---
echo "🚀 Démarrage du serveur AudioCraft..."
source /workspace/venv-audiocraft/bin/activate
cd /workspace/audiocraft-api
# Lancement dans un écran screen pour persistance
screen -dmS audiocraft bash -c "
source /workspace/venv-audiocraft/bin/activate
cd /workspace/audiocraft-api
python server.py 2>&1 | tee /workspace/audiocraft.log
"
echo "✅ AudioCraft lancé sur le port 7860 (écran: 'audiocraft')"
# --- 7. PERSISTANCE DES VARIABLES ---
env >> /etc/environment
echo ""
echo "🎉 ============================================="
echo " Studio IA - Design Sonore prêt !"
echo " Open WebUI → port 3000"
echo " AudioCraft → port 7860"
echo " Logs → /workspace/audiocraft.log"
echo "============================================="
```
---
## 🤖 System Prompt Open WebUI (à importer manuellement)
Après connexion à Open WebUI (port 3000), créer un nouveau modèle/assistant avec ce prompt :
```
Tu es un Ingénieur du Son expert et pédagogue. Ton rôle est d'aider des novices complets à créer des sons et de la musique grâce à l'IA.
RÈGLES FONDAMENTALES :
1. Utilise un langage simple, jamais de jargon technique sans explication.
2. Si l'utilisateur est vague (ex: "un son de forêt"), pose des questions précises :
- Veut-il de la pluie ? Des oiseaux ? Une ambiance nocturne ?
- Quel usage ? (jeu vidéo, film, méditation, musique...)
- Quelle durée ? (quelques secondes, une boucle de 30s...)
3. Traduis les envies en descriptions techniques claires pour AudioCraft.
4. Propose toujours 2-3 variations du prompt pour offrir des choix.
5. Explique ce que tu vas générer AVANT de le faire.
EXEMPLES DE TRADUCTION :
- "Un son qui fait peur" → "Deep drone with low rumble, distant whispers, reverb, horror cinematic atmosphere"
- "Musique joyeuse pour enfants" → "Playful xylophone melody, cheerful, bright, 120bpm, children cartoon style"
- "Ambiance de forêt" → "Dense forest ambience, birds chirping, wind through leaves, morning atmosphere, gentle stream"
FORMAT DE RÉPONSE :
1. Reformule ce que l'utilisateur veut (pour valider)
2. Propose le prompt technique que tu vas utiliser
3. Demande confirmation avant de lancer la génération
4. Après génération : propose des ajustements (plus d'écho, plus grave, etc.)
Tu es patient, encourageant, et passionné par le design sonore. Chaque création est une collaboration artistique.
```
---
## 🔁 PORTAL_CONFIG — Accès simplifié
```
localhost:3000:3000:/:Open WebUI|localhost:7860:7860:/:AudioCraft API|localhost:1111:11111:/:Instance Portal|localhost:8080:18080:/:Jupyter
```
---
## ✅ Checklist de déploiement
- [ ] Héberger le provisioning script sur GitHub/Gist et copier l'URL raw
- [ ] Coller l'URL dans la variable `PROVISIONING_SCRIPT`
- [ ] Vérifier que les ports 3000 et 7860 sont bien ajoutés
- [ ] Sauvegarder avec **Create & Use**
- [ ] Attendre ~10-15 min (téléchargement des modèles AudioCraft ~8 Go)
- [ ] Accéder à l'interface via le port mappé 3000
- [ ] Créer un compte admin dans Open WebUI
- [ ] Importer le System Prompt ci-dessus
- [ ] Tester une génération audio
---
## ⚡ Commande CLI équivalente
```bash
vastai create instance \
--image "nvidia/cuda:12.1.1-devel-ubuntu22.04" \
--disk 130 \
--ports "3000/tcp 7860/tcp 8080/tcp 22/tcp" \
--env "PROVISIONING_SCRIPT=https://raw.githubusercontent.com/VOTRE_REPO/main/studio-audio-provisioning.sh" \
--env "PORTAL_CONFIG=localhost:3000:3000:/:Open WebUI|localhost:7860:7860:/:AudioCraft API|localhost:1111:11111:/:Instance Portal" \
--env "CUDA_VISIBLE_DEVICES=0" \
--env "PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512"
```
---
## 📝 Notes RTX 5060 Ti
- **16 Go VRAM** : suffisant pour faire tourner MusicGen-small + AudioGen-medium simultanément.
- Si manque de VRAM : passer à `musicgen-melody` et charger les modèles à la demande (unload entre générations).
- Les modèles AudioCraft totalisent ~6-8 Go sur disque — les 130 Go sont confortables.
- Temps de génération estimé : 5-15 secondes pour 10s de musique sur RTX 5060 Ti.