From 9dc27ded531f69d2a4eace00ff026684a17d61a6 Mon Sep 17 00:00:00 2001 From: nicoboy Date: Sun, 22 Feb 2026 13:59:44 +0000 Subject: [PATCH] Actualiser provisioning_script.sh --- provisioning_script.sh | 131 ++++++++++++----------------------------- 1 file changed, 38 insertions(+), 93 deletions(-) diff --git a/provisioning_script.sh b/provisioning_script.sh index 264bd43..dce853a 100644 --- a/provisioning_script.sh +++ b/provisioning_script.sh @@ -1,74 +1,40 @@ #!/bin/bash # ============================================================= # Studio IA - Design Sonore & Composition -# Provisioning Script pour RTX 5060 Ti / CUDA 12.1 +# Version sans Docker - natif dans le container Vast.ai # ============================================================= set -eo pipefail echo "🎙️ Démarrage du provisioning Studio Audio IA..." -# --- 1. MISE À JOUR SYSTÈME & DÉPENDANCES --- +# --- 1. DÉPENDANCES SYSTÈME --- 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 + git wget nano screen python3-pip -# --- 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 +# --- 2. OPEN WEBUI (pip depuis GitHub) --- +echo "🖥️ Installation d'Open WebUI..." +pip install 'open-webui==0.5.20' --extra-index-url https://pypi.org/simple/ -# --- 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 +# --- 3. PYTORCH + AUDIOCRAFT --- +echo "🐍 Installation de PyTorch CUDA 12.1..." pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 -# AudioCraft (MusicGen + AudioGen) +echo "🎵 Installation d'AudioCraft..." pip install git+https://github.com/facebookresearch/audiocraft.git +pip install gradio scipy soundfile -# Serveur API Gradio -pip install gradio fastapi uvicorn pydantic scipy soundfile +# --- 4. CRÉATION DU SERVEUR AUDIOCRAFT --- +mkdir -p /root/audiocraft-api -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' +cat > /root/audiocraft-api/server.py << 'PYEOF' import gradio as gr import torch import scipy.io.wavfile import numpy as np -import tempfile, os +import tempfile 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) @@ -77,70 +43,49 @@ 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.""" +def generate_music(prompt, duration=10): 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)) + scipy.io.wavfile.write(f.name, music_model.sample_rate, (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.""" +def generate_sound(prompt, duration=5): 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)) + scipy.io.wavfile.write(f.name, audio_model.sample_rate, (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) + gr.Markdown("## 🎙️ Studio Audio IA") + with gr.Tab("🎵 Musique"): + p1 = gr.Textbox(label="Prompt") + d1 = gr.Slider(5, 30, value=10, step=5, label="Durée (s)") + b1 = gr.Button("Générer") + o1 = gr.Audio(label="Résultat") + b1.click(generate_music, inputs=[p1, d1], outputs=o1) + with gr.Tab("🔊 Bruitages"): + p2 = gr.Textbox(label="Prompt") + d2 = gr.Slider(2, 15, value=5, label="Durée (s)") + b2 = gr.Button("Générer") + o2 = gr.Audio(label="Résultat") + b2.click(generate_sound, inputs=[p2, d2], outputs=o2) demo.launch(server_name="0.0.0.0", server_port=7860, share=False) PYEOF -echo "✅ Serveur API AudioCraft créé" +# --- 5. LANCEMENT DES SERVICES --- +echo "🚀 Lancement d'Open WebUI sur le port 3000..." +screen -dmS openwebui bash -c "open-webui serve --port 3000 2>&1 | tee /root/openwebui.log" -# --- 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 +echo "🚀 Lancement d'AudioCraft sur le port 7860..." +screen -dmS audiocraft bash -c "python /root/audiocraft-api/server.py 2>&1 | tee /root/audiocraft.log" -# 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 "🎉 Studio Audio IA prêt !" echo " Open WebUI → port 3000" -echo " AudioCraft → port 7860" -echo " Logs → /workspace/audiocraft.log" -echo "=============================================" \ No newline at end of file +echo " AudioCraft → port 7860" \ No newline at end of file