diff --git a/vastai-template-studio-audio.md b/vastai-template-studio-audio.md new file mode 100644 index 0000000..f3d9b66 --- /dev/null +++ b/vastai-template-studio-audio.md @@ -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. diff --git a/vastai-templates-context.md b/vastai-templates-context.md new file mode 100644 index 0000000..ead15f5 --- /dev/null +++ b/vastai-templates-context.md @@ -0,0 +1,221 @@ +# Vast.ai — Guide de crĂ©ation de templates + +> RĂ©fĂ©rence condensĂ©e pour crĂ©er et configurer ses propres templates sur Vast.ai. + +--- + +## 1. Identification + +| Champ | Description | +|---|---| +| **Template Name** | Nom affichĂ© sur la carte du template. | +| **Template Description** | Description optionnelle, utile si le template est partagĂ©/public. | + +--- + +## 2. Image Docker (`Image Path:Tag`) + +Format obligatoire : `repository/image_name:tag` + +Exemples d'images compatibles : +- Images publiques DockerHub : `nginx:latest`, `postgres:14`, `python:3.11` +- Images Vast.ai : `vastai/base-image`, `vastai/pytorch` +- Registres alternatifs (chemin complet requis) : `nvcr.io/nvidia/pytorch:25.04-py3`, `ghcr.io/
`, `gcr.io/
` + +**Tag spĂ©cial `[Automatic]`** : sĂ©lectionne automatiquement l'image compatible avec la version CUDA de la machine (nĂ©cessite que le tag contienne la version CUDA, ex: `my-image-cuda-12.8`). + +--- + +## 3. Ports + +- Ajouter les ports TCP/UDP nĂ©cessaires Ă  l'accĂšs externe. +- Un port externe alĂ©atoire est assignĂ© et mappĂ© vers le port interne du container. +- Alternative via tunnel SSH : + ```bash + ssh -p [SSH_PORT] [USER]@[REMOTE_HOST] -L [LOCAL_PORT]:localhost:[REMOTE_PORT] + ``` + +--- + +## 4. Variables d'environnement + +- Ajouter les variables requises par l'image Docker. +- **Ne jamais mettre de secrets dans un template public** → utiliser les variables d'environnement du compte (`cloud.vast.ai/account/`) qui sont injectĂ©es dans toutes les instances. + +### Variables spĂ©ciales + +| Variable | RĂŽle | +|---|---| +| `PROVISIONING_SCRIPT` | URL d'un script shell exĂ©cutĂ© au dĂ©marrage de l'instance | +| `PORTAL_CONFIG` | Configure l'accĂšs aux applications via l'Instance Portal | + +--- + +## 5. Modes de lancement + +| Mode | Description | +|---|---| +| **Jupyter + SSH** | Installe Jupyter (port `8080`) et SSH (port `22`) au runtime. Entrypoint Docker ignorĂ©. | +| **SSH uniquement** | Comme ci-dessus, sans Jupyter. Entrypoint Docker ignorĂ©. | +| **docker ENTRYPOINT** | Le container s'exĂ©cute exactement comme prĂ©vu. Aucun outil supplĂ©mentaire ajoutĂ©. | + +> ⚠ En mode Jupyter ou SSH, l'entrypoint Docker original **n'est pas exĂ©cutĂ©**. Utiliser le **On-start Script** pour dĂ©marrer les services. + +--- + +## 6. On-start Script (Jupyter/SSH uniquement) + +Script Bash exĂ©cutĂ© au dĂ©marrage. Exemples : + +```bash +# ExĂ©cuter un script existant dans l'image +chmod +x /usr/local/bin/start.sh +bash /usr/local/bin/start.sh + +# Modifier un fichier de configuration +sed -i 's/-sslOnly//g' /dockerstartup/vnc_startup.sh + +# CrĂ©er un rĂ©pertoire +sudo -i -u kasm-user mkdir -p /home/kasm-user/Desktop + +# Persister les variables d'environnement +env >> /etc/environment +``` + +> Toujours appeler la commande ENTRYPOINT/CMD originale Ă  la fin du script. + +--- + +## 7. PROVISIONING_SCRIPT — Personnalisation au runtime + +**MĂ©thode la plus simple** pour personnaliser un template sans rebuilder une image Docker. + +### Configuration +1. Éditer un template (ex: `vastai/base-image` ou `vastai/pytorch`) +2. Ajouter la variable d'environnement `PROVISIONING_SCRIPT` avec une URL vers un script shell (GitHub, Gist, etc.) + +### Exemple de script +```bash +#!/bin/bash +cd /workspace/ +set -eo pipefail + +# Activer l'environnement virtuel +. /venv/main/bin/activate + +# Installer des packages +pip install your-packages + +# TĂ©lĂ©charger des fichiers +wget -P "${WORKSPACE}/" https://example.org/my-application.tar.gz +tar xvf ${WORKSPACE}/my-application.tar.gz + +# Configurer un service Supervisor +echo "my-supervisor-config" > /etc/supervisor/conf.d/my-application.conf +echo "my-supervisor-wrapper" > /opt/supervisor-scripts/my-application.sh +chmod +x /opt/supervisor-scripts/my-application.sh + +# Reconfigurer le portail +export PORTAL_CONFIG="localhost:1111:11111:/:Instance Portal|localhost:1234:11234:/:My Application" + +# Recharger Supervisor +supervisorctl reload +``` + +> Toutes les installations doivent aller dans `/workspace/` pour la persistance. + +--- + +## 8. PORTAL_CONFIG — AccĂšs aux applications + +Structure : +``` +hostname:external_port:local_port:url_path:Application Name|... +``` + +- SĂ©parateur entre applications : `|` +- SĂ©parateur entre paramĂštres : `:` +- `hostname` = toujours `localhost` dans les containers Docker +- Si `external_port ≠ local_port` → Caddy agit en reverse proxy +- Si `external_port = local_port` → Caddy ne proxifie pas (utile pour Jupyter) + +Exemple complet : +```bash +"localhost:8002:18002:/hello:MyApp|localhost:1111:11111:/:Instance Portal|localhost:8080:18080:/:Jupyter|localhost:8384:18384:/:Syncthing" +``` + +--- + +## 9. Images Docker personnalisĂ©es (build custom) + +### Option A : FROM une image Vast.ai (recommandĂ©) +```dockerfile +FROM vastai/base-image:cuda-12.6.3-cudnn-devel-ubuntu22.04-py313 +# ou +FROM vastai/pytorch:2.6.0-cuda-12.6.3-py312 + +WORKDIR /opt/workspace-internal/ +RUN . /venv/main/bin/activate && your-installation-commands +``` + +### Option B : FROM n'importe quelle image de base +Compatible avec toute image publique ou privĂ©e. + +**Étapes** : +1. Écrire le Dockerfile +2. `docker build` + `docker push` vers un registre +3. CrĂ©er un template avec le chemin de l'image personnalisĂ©e + +--- + +## 10. Authentification Docker (images privĂ©es) + +Renseigner les credentials dans la section **Docker Repository Authentication**. + +| Registre | Server Name | +|---|---| +| Docker Hub | *(laisser vide)* | +| GitHub Container Registry | `ghcr.io` | +| Google Container Registry | `gcr.io` | + +--- + +## 11. ParamĂštres supplĂ©mentaires + +| ParamĂštre | Description | +|---|---| +| **Disk Space** | Espace disque minimum pour les instances créées depuis ce template | +| **Extra Filters** | Restreindre les machines affichĂ©es (ex: CPU architecture AMD64/ARM64) | +| **Visibility** | Public (visible dans la recherche) ou PrivĂ© (accessible via URL uniquement) | + +> ⚠ Ne jamais mettre de secrets dans un template public. + +--- + +## 12. Sauvegarde et lancement + +| Bouton | Action | +|---|---| +| **Create** | Sauvegarde dans "My Templates" | +| **Create & Use** | Sauvegarde et ouvre la page des offres | + +Le template gĂ©nĂšre aussi une **commande CLI** Ă©quivalente (section lecture seule). + +--- + +## Cas d'usage courants + +**Lancer une application existante (ex: nginx)** +1. Trouver l'image officielle sur DockerHub +2. CrĂ©er un template avec l'image + ports requis +3. Sauvegarder et lancer + +**Personnaliser un template Vast recommandĂ©** +1. Éditer un template recommandĂ© +2. Ajouter `PROVISIONING_SCRIPT` pointant vers votre script +3. Voir section 7 ci-dessus + +**Construire sa propre image Docker** +1. CrĂ©er un Dockerfile (optionnellement FROM une image Vast) +2. Build + push vers un registre +3. CrĂ©er un template avec le chemin de l'image custom