koide 1fb76254e9
All checks were successful
Deploy Docusaurus Site / deploy (push) Successful in 27s
Add: VibeVoice ASR セットアップスクリプト一式
2026-02-24 01:21:33 +00:00

288 lines
8.3 KiB
Bash

#!/bin/bash
# VibeVoice-ASR Setup Script for DGX Spark
# Downloads and builds the VibeVoice-ASR container
#
# Usage:
# curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash
# curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash -s build
# curl -sL https://docs.techswan.online/scripts/vibevoice-asr/setup.sh | bash -s serve
set -e
BASE_URL="https://docs.techswan.online/scripts/vibevoice-asr"
INSTALL_DIR="${VIBEVOICE_DIR:-$HOME/vibevoice-asr}"
IMAGE_NAME="vibevoice-asr:dgx-spark"
CONTAINER_NAME="vibevoice-asr"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
download_file() {
local url="$1"
local dest="$2"
local dir=$(dirname "$dest")
mkdir -p "$dir"
if command -v curl &> /dev/null; then
curl -sL "$url" -o "$dest"
elif command -v wget &> /dev/null; then
wget -q "$url" -O "$dest"
else
log_error "curl or wget is required"
exit 1
fi
}
download_files() {
log_step "Downloading VibeVoice-ASR files to $INSTALL_DIR..."
mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR"
# Core files
local files=(
"Dockerfile"
"requirements-realtime.txt"
"test_vibevoice.py"
"vibevoice_asr_gradio_demo_patched.py"
"run_realtime.sh"
"run_all.sh"
)
for file in "${files[@]}"; do
log_info "Downloading $file..."
download_file "$BASE_URL/$file" "$INSTALL_DIR/$file"
done
# Realtime module
local realtime_files=(
"__init__.py"
"models.py"
"server.py"
"asr_worker.py"
"session_manager.py"
"audio_buffer.py"
"vad_processor.py"
)
mkdir -p "$INSTALL_DIR/realtime"
for file in "${realtime_files[@]}"; do
log_info "Downloading realtime/$file..."
download_file "$BASE_URL/realtime/$file" "$INSTALL_DIR/realtime/$file"
done
# Static files
mkdir -p "$INSTALL_DIR/static"
log_info "Downloading static/realtime_client.html..."
download_file "$BASE_URL/static/realtime_client.html" "$INSTALL_DIR/static/realtime_client.html"
# Make scripts executable
chmod +x "$INSTALL_DIR/run_realtime.sh" "$INSTALL_DIR/run_all.sh"
log_info "All files downloaded to $INSTALL_DIR"
}
check_prerequisites() {
log_step "Checking prerequisites..."
# Check Docker
if ! command -v docker &> /dev/null; then
log_error "Docker is not installed"
exit 1
fi
# Check NVIDIA Docker runtime
if ! docker info 2>/dev/null | grep -q "Runtimes.*nvidia"; then
log_warn "NVIDIA Docker runtime may not be configured"
fi
# Check GPU availability
if command -v nvidia-smi &> /dev/null; then
log_info "GPU detected:"
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader
else
log_warn "nvidia-smi not found on host"
fi
log_info "Prerequisites check complete"
}
build_image() {
log_step "Building Docker image: ${IMAGE_NAME}"
log_info "This may take several minutes..."
cd "$INSTALL_DIR"
docker build \
--network=host \
-t "$IMAGE_NAME" \
-f Dockerfile \
.
log_info "Docker image built successfully: ${IMAGE_NAME}"
}
run_container() {
local mode="${1:-interactive}"
log_step "Running container in ${mode} mode..."
# Stop existing container if running
if docker ps -q -f name="$CONTAINER_NAME" | grep -q .; then
log_warn "Stopping existing container..."
docker stop "$CONTAINER_NAME" 2>/dev/null || true
fi
# Remove existing container
docker rm "$CONTAINER_NAME" 2>/dev/null || true
# Common Docker options for DGX Spark
local docker_opts=(
--gpus all
--ipc=host
--network=host
--ulimit memlock=-1:-1
--ulimit stack=-1:-1
-e "PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True"
-v "$HOME/.cache/huggingface:/root/.cache/huggingface"
--name "$CONTAINER_NAME"
)
if [ "$mode" = "interactive" ]; then
docker run --rm -it "${docker_opts[@]}" "$IMAGE_NAME" bash
elif [ "$mode" = "test" ]; then
docker run --rm "${docker_opts[@]}" "$IMAGE_NAME" python /workspace/test_vibevoice.py
elif [ "$mode" = "demo" ]; then
log_info "Starting Gradio demo on port 7860..."
log_info "Access the demo at: http://localhost:7860"
docker run --rm -it "${docker_opts[@]}" "$IMAGE_NAME"
elif [ "$mode" = "realtime" ]; then
log_info "Starting Realtime ASR server on port 8000..."
log_info "WebSocket API: ws://localhost:8000/ws/asr/{session_id}"
log_info "Test client: http://localhost:8000/static/realtime_client.html"
docker run --rm -it "${docker_opts[@]}" "$IMAGE_NAME" \
python -m realtime.server --host 0.0.0.0 --port 8000
elif [ "$mode" = "serve" ]; then
log_info "Starting all services..."
log_info " Gradio demo: http://localhost:7860"
log_info " Realtime ASR: http://localhost:8000"
log_info " Test client: http://localhost:8000/static/realtime_client.html"
docker run --rm -it "${docker_opts[@]}" "$IMAGE_NAME" ./run_all.sh
else
log_error "Unknown mode: $mode"
exit 1
fi
}
show_usage() {
echo "VibeVoice-ASR Setup for DGX Spark"
echo ""
echo "Usage:"
echo " curl -sL $BASE_URL/setup.sh | bash # Download only"
echo " curl -sL $BASE_URL/setup.sh | bash -s build # Download and build"
echo " curl -sL $BASE_URL/setup.sh | bash -s demo # Download, build, run demo"
echo " curl -sL $BASE_URL/setup.sh | bash -s serve # Download, build, run all"
echo ""
echo "Commands:"
echo " (default) Download files only"
echo " build Download and build Docker image"
echo " demo Download, build, and start Gradio demo (port 7860)"
echo " realtime Download, build, and start Realtime ASR (port 8000)"
echo " serve Download, build, and start both services"
echo " run Run container interactively (after build)"
echo ""
echo "Environment variables:"
echo " VIBEVOICE_DIR Installation directory (default: ~/vibevoice-asr)"
echo ""
echo "After installation, you can also run:"
echo " cd ~/vibevoice-asr"
echo " docker run --gpus all -p 7860:7860 vibevoice-asr:dgx-spark"
}
main() {
local command="${1:-download}"
echo ""
echo "=========================================="
echo " VibeVoice-ASR Setup for DGX Spark"
echo "=========================================="
echo ""
case "$command" in
download)
download_files
echo ""
log_info "Done! Next steps:"
echo " cd $INSTALL_DIR"
echo " docker build -t vibevoice-asr:dgx-spark ."
echo " docker run --gpus all -p 7860:7860 vibevoice-asr:dgx-spark"
;;
build)
download_files
check_prerequisites
build_image
echo ""
log_info "Done! To run:"
echo " cd $INSTALL_DIR"
echo " docker run --gpus all -p 7860:7860 vibevoice-asr:dgx-spark"
;;
run)
cd "$INSTALL_DIR" 2>/dev/null || { log_error "Run 'build' first"; exit 1; }
run_container interactive
;;
test)
cd "$INSTALL_DIR" 2>/dev/null || { log_error "Run 'build' first"; exit 1; }
run_container test
;;
demo)
download_files
check_prerequisites
build_image
run_container demo
;;
realtime)
download_files
check_prerequisites
build_image
run_container realtime
;;
serve)
download_files
check_prerequisites
build_image
run_container serve
;;
-h|--help|help)
show_usage
;;
*)
log_error "Unknown command: $command"
show_usage
exit 1
;;
esac
}
main "$@"