#!/bin/bash # swap-gpu-dense-model.sh — Swap RTX 3090 from qwen3.6-27B-code to SmartCode-Fable-5 # Run when download completes: ssh root@192.168.68.8 'bash -s' < this script # # Usage: bash swap-gpu-dense-model.sh # Requires: new model at /home/llmuser/models/SmartCode-Fable-5-27B-UD-Q4_K_XL.gguf set -e MODEL_PATH="/home/llmuser/models/SmartCode-Fable-5-27B-UD-Q4_K_XL.gguf" OLD_WRAPPER="/home/llmuser/llama-wrapper.sh" echo "═══ Swapping gpu-dense to SmartCode-Fable-5 ═══" # 1. Verify model file if [ ! -f "$MODEL_PATH" ]; then echo "❌ Model not found at $MODEL_PATH" echo " Download: curl -L -o $MODEL_PATH " exit 1 fi MODEL_SIZE=$(ls -lh "$MODEL_PATH" | awk '{print $5}') echo "✅ Model found: $MODEL_SIZE" # 2. Create new wrapper script for SmartCode-Fable-5 cat > /home/llmuser/llama-fable-wrapper.sh << 'WRAPPER' #!/bin/bash # SmartCode-Fable-5 llama-server wrapper for RTX 3090 # Sampler settings from model card: temp 0.9, top-p 0.95, top-k 60, repeat-penalty off PORT=8080 GHOST_PID=$(ss -tlnp 2>/dev/null | grep -Po ":${PORT}\s+.*pid=\K[0-9]+" | head -1) if [ -n "$GHOST_PID" ] && [ "$GHOST_PID" != "$$" ]; then echo "[wrapper] Port $PORT occupied by ghost pid $GHOST_PID — cleaning up" >&2 kill -9 "$GHOST_PID" 2>/dev/null sleep 2 fi exec /usr/local/bin/llama-server \ --model /home/llmuser/models/SmartCode-Fable-5-27B-UD-Q4_K_XL.gguf \ --ctx-size 131072 \ --cache-type-k q4_0 \ --cache-type-v q4_0 \ --flash-attn 1 \ --cont-batching \ --parallel 1 \ --batch-size 2048 \ --ubatch-size 1024 \ --n-gpu-layers 99 \ --temp 0.9 \ --top-p 0.95 \ --top-k 60 \ --min-p 0.0 \ --repeat-penalty 1.0 \ --api-key not-needed \ --port 8080 \ --host 0.0.0.0 WRAPPER chmod 755 /home/llmuser/llama-fable-wrapper.sh echo "✅ Created /home/llmuser/llama-fable-wrapper.sh" # 3. Update systemd service to use new wrapper echo "📝 Updating systemd service..." sed -i 's|ExecStart=/home/llmuser/llama-wrapper.sh|ExecStart=/home/llmuser/llama-fable-wrapper.sh|' /etc/systemd/system/llama-server.service systemctl daemon-reload # 4. Stop old server, start new echo "🔄 Restarting llama-server..." systemctl stop llama-server sleep 3 systemctl start llama-server sleep 8 # 5. Verify echo "" echo "═══ Verification ═══" systemctl is-active llama-server echo "" echo "Port 8080:" ss -tlnp 2>/dev/null | grep ":8080" | head -1 echo "" echo "GPU VRAM:" nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu --format=csv,noheader 2>/dev/null echo "" echo "=== Health check ===" curl -s --max-time 5 http://localhost:8080/health 2>/dev/null echo "" echo "" echo "✅ Swap complete. Test via LiteLLM:" echo " curl -s http://192.168.68.116/v1/chat/completions -H 'Authorization: Bearer ' -H 'Content-Type: application/json' -d '{\"model\":\"gpu-dense\",\"messages\":[{\"role\":\"user\",\"content\":\"write hello world in python\"}],\"max_tokens\":100}'"