Files
miku-discord/readmes/VISION_TROUBLESHOOTING.md

331 lines
7.2 KiB
Markdown
Raw Normal View History

# Vision Model Troubleshooting Checklist
## Quick Diagnostics
### 1. Verify Both GPU Services Running
```bash
# Check container status
docker compose ps
# Should show both RUNNING:
# llama-swap (NVIDIA CUDA)
# llama-swap-amd (AMD ROCm)
```
**If llama-swap is not running:**
```bash
docker compose up -d llama-swap
docker compose logs llama-swap
```
**If llama-swap-amd is not running:**
```bash
docker compose up -d llama-swap-amd
docker compose logs llama-swap-amd
```
### 2. Check NVIDIA Vision Endpoint Health
```bash
# Test NVIDIA endpoint directly
curl -v http://llama-swap:8080/health
# Expected: 200 OK
# If timeout (no response for 5+ seconds):
# - NVIDIA GPU might not have enough VRAM
# - Model might be stuck loading
# - Docker network might be misconfigured
```
### 3. Check Current GPU State
```bash
# See which GPU is set as primary
cat bot/memory/gpu_state.json
# Expected output:
# {"current_gpu": "amd", "reason": "voice_session"}
# or
# {"current_gpu": "nvidia", "reason": "auto_switch"}
```
### 4. Verify Model Files Exist
```bash
# Check vision model files on disk
ls -lh models/MiniCPM*
# Should show both:
# -rw-r--r-- ... MiniCPM-V-4_5-Q3_K_S.gguf (main model, ~3.3GB)
# -rw-r--r-- ... MiniCPM-V-4_5-mmproj-f16.gguf (projection, ~500MB)
```
## Scenario-Based Troubleshooting
### Scenario 1: Vision Works When NVIDIA is Primary, Fails When AMD is Primary
**Diagnosis:** NVIDIA GPU is getting unloaded when AMD is primary
**Root Cause:** llama-swap is configured to unload unused models
**Solution:**
```yaml
# In llama-swap-config.yaml, reduce TTL for vision model:
vision:
ttl: 3600 # Increase from 900 to keep vision model loaded longer
```
**Or:**
```yaml
# Disable TTL for vision to keep it always loaded:
vision:
ttl: 0 # 0 means never auto-unload
```
### Scenario 2: "Vision service currently unavailable: Endpoint timeout"
**Diagnosis:** NVIDIA endpoint not responding within 5 seconds
**Causes:**
1. NVIDIA GPU out of memory
2. Vision model stuck loading
3. Network latency
**Solutions:**
```bash
# Check NVIDIA GPU memory
nvidia-smi
# If memory is full, restart NVIDIA container
docker compose restart llama-swap
# Wait for model to load (check logs)
docker compose logs llama-swap -f
# Should see: "model loaded" message
```
**If persistent:** Increase health check timeout in `bot/utils/llm.py`:
```python
# Change from 5 to 10 seconds
async with session.get(f"{vision_url}/health", timeout=aiohttp.ClientTimeout(total=10)) as response:
```
### Scenario 3: Vision Model Returns Empty Description
**Diagnosis:** Model loaded but not processing correctly
**Causes:**
1. Model corruption
2. Insufficient input validation
3. Model inference error
**Solutions:**
```bash
# Test vision model directly
curl -X POST http://llama-swap:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "vision",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is this?"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,/9j/4AAQSkZJ..."}}
]
}],
"max_tokens": 100
}'
# If returns empty, check llama-swap logs for errors
docker compose logs llama-swap -n 50
```
### Scenario 4: "Error 503 Service Unavailable"
**Diagnosis:** llama-swap process crashed or model failed to load
**Solutions:**
```bash
# Check llama-swap container status
docker compose logs llama-swap -n 100
# Look for error messages, stack traces
# Restart the service
docker compose restart llama-swap
# Monitor startup
docker compose logs llama-swap -f
```
### Scenario 5: Slow Vision Analysis When AMD is Primary
**Diagnosis:** Both GPUs under load, NVIDIA performance degraded
**Expected Behavior:** This is normal. Both GPUs are working simultaneously.
**If Unacceptably Slow:**
1. Check if text requests are blocking vision requests
2. Verify GPU memory allocation
3. Consider processing images sequentially instead of parallel
## Log Analysis Tips
### Enable Detailed Vision Logging
```bash
# Watch only vision-related logs
docker compose logs miku-bot -f 2>&1 | grep -i vision
# Watch with timestamps
docker compose logs miku-bot -f 2>&1 | grep -i vision | grep -E "ERROR|WARNING|INFO"
```
### Check GPU Health During Vision Request
In one terminal:
```bash
# Monitor NVIDIA GPU while processing
watch -n 1 nvidia-smi
```
In another:
```bash
# Send image to bot that triggers vision
# Then watch GPU usage spike in first terminal
```
### Monitor Both GPUs Simultaneously
```bash
# Terminal 1: NVIDIA
watch -n 1 nvidia-smi
# Terminal 2: AMD
watch -n 1 rocm-smi
# Terminal 3: Logs
docker compose logs miku-bot -f 2>&1 | grep -E "ERROR|vision"
```
## Emergency Fixes
### If Vision Completely Broken
```bash
# Full restart of all GPU services
docker compose down
docker compose up -d llama-swap llama-swap-amd
docker compose restart miku-bot
# Wait for services to start (30-60 seconds)
sleep 30
# Test health
curl http://llama-swap:8080/health
curl http://llama-swap-amd:8080/health
```
### Force NVIDIA GPU Vision
If you want to guarantee vision always works, even if NVIDIA has issues:
```python
# In bot/utils/llm.py, comment out health check in image_handling.py
# (Not recommended, but allows requests to continue)
```
### Disable Dual-GPU Mode Temporarily
If AMD GPU is causing issues:
```yaml
# In docker-compose.yml, stop llama-swap-amd
# Restart bot
# This reverts to single-GPU mode (everything on NVIDIA)
```
## Prevention Measures
### 1. Monitor GPU Memory
```bash
# Setup automated monitoring
watch -n 5 "nvidia-smi --query-gpu=memory.used,memory.free --format=csv,noheader"
watch -n 5 "rocm-smi --showmeminfo"
```
### 2. Set Appropriate Model TTLs
In `llama-swap-config.yaml`:
```yaml
vision:
ttl: 1800 # Keep loaded 30 minutes
llama3.1:
ttl: 1800 # Keep loaded 30 minutes
```
In `llama-swap-rocm-config.yaml`:
```yaml
llama3.1:
ttl: 1800 # AMD text model
darkidol:
ttl: 1800 # AMD evil mode
```
### 3. Monitor Container Logs
```bash
# Periodic log check
docker compose logs llama-swap | tail -20
docker compose logs llama-swap-amd | tail -20
docker compose logs miku-bot | grep vision | tail -20
```
### 4. Regular Health Checks
```bash
# Script to check both GPU endpoints
#!/bin/bash
echo "NVIDIA Health:"
curl -s http://llama-swap:8080/health && echo "✓ OK" || echo "✗ FAILED"
echo "AMD Health:"
curl -s http://llama-swap-amd:8080/health && echo "✓ OK" || echo "✗ FAILED"
```
## Performance Optimization
If vision requests are too slow:
1. **Reduce image quality** before sending to model
2. **Use smaller frames** for video analysis
3. **Batch process** multiple images
4. **Allocate more VRAM** to NVIDIA if available
5. **Reduce concurrent requests** to NVIDIA during peak load
## Success Indicators
After applying the fix, you should see:
✅ Images analyzed within 5-10 seconds (first load: 20-30 seconds)
✅ No "Vision service unavailable" errors
✅ Log shows `Vision analysis completed successfully`
✅ Works correctly whether AMD or NVIDIA is primary GPU
✅ No GPU memory errors in nvidia-smi/rocm-smi
## Contact Points for Further Issues
1. Check NVIDIA llama.cpp/llama-swap logs
2. Check AMD ROCm compatibility for your GPU
3. Verify Docker networking (if using custom networks)
4. Check system VRAM (needs ~10GB+ for both models)