116 lines
3.2 KiB
Bash
116 lines
3.2 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Build and deploy Soprano + RVC Docker containers
|
||
|
|
|
||
|
|
set -e # Exit on error
|
||
|
|
|
||
|
|
echo "🎤 Building Soprano + RVC Docker Containers"
|
||
|
|
echo "============================================"
|
||
|
|
|
||
|
|
# Check prerequisites
|
||
|
|
echo ""
|
||
|
|
echo "📋 Checking prerequisites..."
|
||
|
|
|
||
|
|
if ! command -v docker &> /dev/null; then
|
||
|
|
echo "❌ Docker not found. Please install Docker first."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if ! command -v docker-compose &> /dev/null; then
|
||
|
|
echo "❌ docker-compose not found. Please install docker-compose first."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check NVIDIA runtime
|
||
|
|
if ! docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi &> /dev/null; then
|
||
|
|
echo "⚠️ Warning: NVIDIA Container Toolkit test failed. Soprano container may not work."
|
||
|
|
echo " Install with: sudo apt-get install nvidia-container-toolkit"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check ROCm devices
|
||
|
|
if [ ! -e /dev/kfd ] || [ ! -e /dev/dri ]; then
|
||
|
|
echo "⚠️ Warning: ROCm devices not found. RVC container may not work."
|
||
|
|
echo " Ensure ROCm drivers are installed and /dev/kfd, /dev/dri exist."
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check required files
|
||
|
|
echo ""
|
||
|
|
echo "📁 Checking required files..."
|
||
|
|
|
||
|
|
if [ ! -d "soprano" ]; then
|
||
|
|
echo "❌ soprano/ directory not found."
|
||
|
|
echo " Clone with: git clone https://github.com/ekwek1/soprano.git"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ ! -f "soprano_server.py" ]; then
|
||
|
|
echo "❌ soprano_server.py not found."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ ! -d "Retrieval-based-Voice-Conversion-WebUI" ]; then
|
||
|
|
echo "❌ RVC WebUI directory not found."
|
||
|
|
echo " Clone with: git clone https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ ! -f "soprano_rvc_api.py" ]; then
|
||
|
|
echo "❌ soprano_rvc_api.py not found."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ ! -f "soprano_rvc_config.json" ]; then
|
||
|
|
echo "❌ soprano_rvc_config.json not found."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check model files
|
||
|
|
if [ ! -f "models/MikuAI_e210_s6300.pth" ]; then
|
||
|
|
echo "⚠️ Warning: RVC model not found at models/MikuAI_e210_s6300.pth"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ ! -f "models/added_IVF512_Flat_nprobe_1_MikuAI_v2.index" ]; then
|
||
|
|
echo "⚠️ Warning: RVC index not found at models/added_IVF512_Flat_nprobe_1_MikuAI_v2.index"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "✅ Prerequisites check complete"
|
||
|
|
|
||
|
|
# Build containers
|
||
|
|
echo ""
|
||
|
|
echo "🔨 Building Docker containers..."
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Soprano container
|
||
|
|
echo "Building Soprano container (CUDA + Python 3.11)..."
|
||
|
|
if docker-compose build soprano; then
|
||
|
|
echo "✅ Soprano container built successfully"
|
||
|
|
else
|
||
|
|
echo "❌ Soprano container build failed"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# RVC container
|
||
|
|
echo "Building RVC container (ROCm + Python 3.10)..."
|
||
|
|
if docker-compose build rvc; then
|
||
|
|
echo "✅ RVC container built successfully"
|
||
|
|
else
|
||
|
|
echo "❌ RVC container build failed"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "============================================"
|
||
|
|
echo "✅ Build complete!"
|
||
|
|
echo ""
|
||
|
|
echo "Next steps:"
|
||
|
|
echo " 1. Review GPU device IDs in docker-compose.yml"
|
||
|
|
echo " 2. Start services: docker-compose up -d"
|
||
|
|
echo " 3. Check health: curl http://localhost:8765/health"
|
||
|
|
echo " 4. Test API: curl -X POST http://localhost:8765/api/speak \\"
|
||
|
|
echo " -H 'Content-Type: application/json' \\"
|
||
|
|
echo " -d '{\"text\": \"Hello, I am Miku!\"}' \\"
|
||
|
|
echo " -o test.wav"
|
||
|
|
echo ""
|
||
|
|
echo "For more information, see DOCKER_SETUP.md"
|