Actualiser provisioning_script.sh

script V0.1
This commit is contained in:
2026-02-22 12:30:57 +00:00
parent 2504608af7
commit b3691b0cd9

View File

@ -0,0 +1,146 @@
#!/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 "============================================="