Spaces:
Build error
Build error
File size: 5,536 Bytes
32845e5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
#!/bin/bash
#
# RunPod Initialization Script
# Automatically downloads snapshot from HuggingFace, extracts to RAM disk, and starts Service Manager
#
# Usage: Used as --args in runpodctl create pod command
#
set -e # Exit on error
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo "π Ultravox Pipeline - RunPod Initialization"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
# Configuration
SNAPSHOT_URL="${SNAPSHOT_URL:-https://huggingface.co/marcosremar2/ultravox-snapshots/resolve/main/ultravox-snapshot-latest.tar.zst}"
PROJECT_DIR="/root/ultravox-pipeline"
RAMDISK_PATH="/dev/shm"
ULTRAVOX_PROFILE="${ULTRAVOX_PROFILE:-gpu-prod}"
# Detect compression format from URL
if [[ "$SNAPSHOT_URL" == *.tar.zst ]]; then
COMPRESS_FORMAT="zstd"
FILE_EXT=".tar.zst"
TAR_FLAGS="--zstd -xf"
elif [[ "$SNAPSHOT_URL" == *.tar.gz ]] || [[ "$SNAPSHOT_URL" == *.tgz ]]; then
COMPRESS_FORMAT="gzip"
FILE_EXT=".tar.gz"
TAR_FLAGS="-xzf"
else
COMPRESS_FORMAT="unknown"
FILE_EXT=".tar.gz"
TAR_FLAGS="-xzf"
echo "β οΈ Warning: Unknown compression format, assuming gzip"
fi
TEMP_SNAPSHOT="$RAMDISK_PATH/snapshot$FILE_EXT"
echo "π Configuration:"
echo " Snapshot URL: $SNAPSHOT_URL"
echo " Compression: $COMPRESS_FORMAT"
echo " Project Dir: $PROJECT_DIR"
echo " RAM Disk: $RAMDISK_PATH"
echo " Profile: $ULTRAVOX_PROFILE"
echo ""
# Step 1: Check available RAM
echo "π Step 1/5: Checking RAM disk space..."
df -h $RAMDISK_PATH
echo ""
# Step 2: Download snapshot to RAM disk (ultra-fast)
echo "π₯ Step 2/5: Downloading snapshot to RAM disk..."
START_TIME=$(date +%s)
wget -q --show-progress -O "$TEMP_SNAPSHOT" "$SNAPSHOT_URL" || {
echo "β οΈ wget failed, trying curl..."
curl -# -L -o "$TEMP_SNAPSHOT" "$SNAPSHOT_URL"
}
DOWNLOAD_TIME=$(($(date +%s) - START_TIME))
SNAPSHOT_SIZE=$(du -sh "$TEMP_SNAPSHOT" | cut -f1)
echo "β
Downloaded: $SNAPSHOT_SIZE in ${DOWNLOAD_TIME}s"
echo ""
# Step 3: Extract from RAM disk to project directory (ultra-fast)
echo "π¦ Step 3/5: Extracting snapshot from RAM disk..."
echo " Using tar flags: $TAR_FLAGS"
START_TIME=$(date +%s)
mkdir -p "$PROJECT_DIR"
cd "$PROJECT_DIR"
tar $TAR_FLAGS "$TEMP_SNAPSHOT"
EXTRACT_TIME=$(($(date +%s) - START_TIME))
echo "β
Extracted in ${EXTRACT_TIME}s"
echo ""
# Step 3.5: Validate extraction
echo "π Step 3.5/6: Validating extraction..."
VALIDATION_FAILED=0
if [ ! -d "$PROJECT_DIR/src" ]; then
echo "β Missing: src/"
VALIDATION_FAILED=1
fi
if [ ! -d "$PROJECT_DIR/config" ]; then
echo "β Missing: config/"
VALIDATION_FAILED=1
fi
if [ ! -f "$PROJECT_DIR/src/core/service_manager/main.py" ]; then
echo "β Missing: src/core/service_manager/main.py"
VALIDATION_FAILED=1
fi
if [ $VALIDATION_FAILED -eq 1 ]; then
echo "β Extraction validation failed!"
echo "π Contents of $PROJECT_DIR:"
ls -la "$PROJECT_DIR"
exit 1
fi
echo "β
Validation passed - all required files present"
echo ""
# Step 4: Cleanup RAM disk
echo "π§Ή Step 4/6: Cleaning up RAM disk..."
rm -f "$TEMP_SNAPSHOT"
echo "β
RAM disk cleaned"
echo ""
# Step 5: Start Service Manager
echo "βοΈ Step 5/6: Starting Service Manager..."
cd "$PROJECT_DIR"
# Export profile and authorization
export ULTRAVOX_PROFILE="$ULTRAVOX_PROFILE"
export ULTRAVOX_SM_AUTHORIZED=1
# Check if Service Manager main.py exists
if [ ! -f "src/core/service_manager/main.py" ]; then
echo "β src/core/service_manager/main.py not found in $PROJECT_DIR"
echo "π Contents:"
ls -la
exit 1
fi
# Start Service Manager in background using Python directly
nohup python3 src/core/service_manager/main.py > /var/log/service_manager.log 2>&1 &
SERVICE_MANAGER_PID=$!
echo "β
Service Manager started (PID: $SERVICE_MANAGER_PID)"
echo " Logs: /var/log/service_manager.log"
echo ""
# Wait a few seconds for initialization
sleep 5
# Check if Service Manager is running
if kill -0 $SERVICE_MANAGER_PID 2>/dev/null; then
echo "β
Service Manager is running"
else
echo "β Service Manager failed to start"
echo "π Last 20 lines of log:"
tail -n 20 /var/log/service_manager.log
exit 1
fi
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo "β
INITIALIZATION COMPLETE!"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
echo "π Timing Summary:"
TOTAL_TIME=$((DOWNLOAD_TIME + EXTRACT_TIME))
echo " Download: ${DOWNLOAD_TIME}s"
echo " Extract: ${EXTRACT_TIME}s"
echo " Total: ${TOTAL_TIME}s"
echo ""
echo "π― Service Manager Status:"
echo " PID: $SERVICE_MANAGER_PID"
echo " Profile: $ULTRAVOX_PROFILE"
echo " Logs: /var/log/service_manager.log"
echo ""
echo "π Check status:"
echo " curl http://localhost:8888/health"
echo ""
echo "π View logs:"
echo " tail -f /var/log/service_manager.log"
echo ""
# Keep container running
exec tail -f /var/log/service_manager.log
|