Actualiser provisioning_script.sh

This commit is contained in:
2026-02-22 13:59:44 +00:00
parent b3691b0cd9
commit 9dc27ded53

View File

@ -1,74 +1,40 @@
#!/bin/bash #!/bin/bash
# ============================================================= # =============================================================
# Studio IA - Design Sonore & Composition # 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 set -eo pipefail
echo "🎙️ Démarrage du provisioning Studio Audio IA..." 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 \ apt-get update -y && apt-get install -y \
python3.10 python3.10-venv python3-pip \
ffmpeg libsndfile1 sox \ ffmpeg libsndfile1 sox \
ca-certificates curl gnupg lsb-release \ git wget nano screen python3-pip
git wget nano screen
# --- 2. INSTALLATION DOCKER (si non présent) --- # --- 2. OPEN WEBUI (pip depuis GitHub) ---
if ! command -v docker &> /dev/null; then echo "🖥️ Installation d'Open WebUI..."
echo "📦 Installation de Docker..." pip install 'open-webui==0.5.20' --extra-index-url https://pypi.org/simple/
curl -fsSL https://get.docker.com | bash
fi
# --- 3. LANCEMENT OPEN WEBUI --- # --- 3. PYTORCH + AUDIOCRAFT ---
echo "🖥️ Lancement d'Open WebUI sur le port 3000..." echo "🐍 Installation de PyTorch CUDA 12.1..."
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 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 git+https://github.com/facebookresearch/audiocraft.git
pip install gradio scipy soundfile
# Serveur API Gradio # --- 4. CRÉATION DU SERVEUR AUDIOCRAFT ---
pip install gradio fastapi uvicorn pydantic scipy soundfile mkdir -p /root/audiocraft-api
echo "✅ AudioCraft installé" cat > /root/audiocraft-api/server.py << 'PYEOF'
# --- 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 gradio as gr
import torch import torch
import scipy.io.wavfile import scipy.io.wavfile
import numpy as np import numpy as np
import tempfile, os import tempfile
from audiocraft.models import MusicGen, AudioGen from audiocraft.models import MusicGen, AudioGen
# Chargement des modèles (une seule fois)
print("🔄 Chargement de MusicGen...") print("🔄 Chargement de MusicGen...")
music_model = MusicGen.get_pretrained("facebook/musicgen-small") music_model = MusicGen.get_pretrained("facebook/musicgen-small")
music_model.set_generation_params(duration=10) 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 = AudioGen.get_pretrained("facebook/audiogen-medium")
audio_model.set_generation_params(duration=5) audio_model.set_generation_params(duration=5)
def generate_music(prompt: str, duration: int = 10): def generate_music(prompt, duration=10):
"""Génère de la musique à partir d'un prompt textuel."""
music_model.set_generation_params(duration=duration) music_model.set_generation_params(duration=duration)
wav = music_model.generate([prompt]) wav = music_model.generate([prompt])
wav_np = wav[0, 0].cpu().numpy() wav_np = wav[0, 0].cpu().numpy()
sr = music_model.sample_rate
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f: 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 return f.name
def generate_sound(prompt: str, duration: int = 5): def generate_sound(prompt, duration=5):
"""Génère des bruitages et ambiances sonores."""
audio_model.set_generation_params(duration=duration) audio_model.set_generation_params(duration=duration)
wav = audio_model.generate([prompt]) wav = audio_model.generate([prompt])
wav_np = wav[0, 0].cpu().numpy() wav_np = wav[0, 0].cpu().numpy()
sr = audio_model.sample_rate
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f: 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 return f.name
# Interface Gradio
with gr.Blocks(title="🎙️ Studio Audio IA") as demo: with gr.Blocks(title="🎙️ Studio Audio IA") as demo:
gr.Markdown("## 🎙️ Studio Audio IA — AudioCraft API") gr.Markdown("## 🎙️ Studio Audio IA")
with gr.Tab("🎵 Musique"):
with gr.Tab("🎵 Musique (MusicGen)"): p1 = gr.Textbox(label="Prompt")
music_prompt = gr.Textbox(label="Prompt", placeholder="Calm piano music with soft strings, 120bpm...") d1 = gr.Slider(5, 30, value=10, step=5, label="Durée (s)")
music_duration = gr.Slider(5, 30, value=10, step=5, label="Durée (secondes)") b1 = gr.Button("Générer")
music_btn = gr.Button("🎵 Générer la musique") o1 = gr.Audio(label="Résultat")
music_output = gr.Audio(label="Résultat") b1.click(generate_music, inputs=[p1, d1], outputs=o1)
music_btn.click(generate_music, inputs=[music_prompt, music_duration], outputs=music_output) with gr.Tab("🔊 Bruitages"):
p2 = gr.Textbox(label="Prompt")
with gr.Tab("🔊 Bruitages (AudioGen)"): d2 = gr.Slider(2, 15, value=5, label="Durée (s)")
sound_prompt = gr.Textbox(label="Prompt", placeholder="Wood cracking, cathedral reverb, horror atmosphere...") b2 = gr.Button("Générer")
sound_duration = gr.Slider(2, 15, value=5, step=1, label="Durée (secondes)") o2 = gr.Audio(label="Résultat")
sound_btn = gr.Button("🔊 Générer le son") b2.click(generate_sound, inputs=[p2, d2], outputs=o2)
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) demo.launch(server_name="0.0.0.0", server_port=7860, share=False)
PYEOF 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 "🚀 Lancement d'AudioCraft sur le port 7860..."
echo "🚀 Démarrage du serveur AudioCraft..." screen -dmS audiocraft bash -c "python /root/audiocraft-api/server.py 2>&1 | tee /root/audiocraft.log"
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 env >> /etc/environment
echo "" echo "🎉 Studio Audio IA prêt !"
echo "🎉 ============================================="
echo " Studio IA - Design Sonore prêt !"
echo " Open WebUI → port 3000" echo " Open WebUI → port 3000"
echo " AudioCraft → port 7860" echo " AudioCraft → port 7860"
echo " Logs → /workspace/audiocraft.log"
echo "============================================="