PR Pipeline — Authorize → Validate → Review → Merge / auth (pull_request) Successful in 4s
PR Pipeline — Authorize → Validate → Review → Merge / validate (pull_request) Successful in 3s
PR Pipeline — Authorize → Validate → Review → Merge / lint (pull_request) Successful in 1s
PR Pipeline — Authorize → Validate → Review → Merge / ai-review (pull_request) Successful in 5s
PR Pipeline — Authorize → Validate → Review → Merge / gate (pull_request) Successful in 0s
Mumuni CT114 destroyed. Mumuni now runs inside Abiba CT100 at 192.168.68.24. Updated all contract files and agent-health-check.py.
92 lines
2.9 KiB
Bash
Executable File
92 lines
2.9 KiB
Bash
Executable File
#!/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 <huggingface-url>"
|
|
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 <key>' -H 'Content-Type: application/json' -d '{\"model\":\"gpu-dense\",\"messages\":[{\"role\":\"user\",\"content\":\"write hello world in python\"}],\"max_tokens\":100}'"
|