SevdanurGenc's picture
Upload 300 files
9438a57 verified
Raw History Blame Contribute Delete
3.79 kB
#!/usr/bin/env bash
# TestAjanı - modelin ekran kartında (GPU; Mac'te Metal) çalışıp çalışmadığını kontrol eder.
# Kullanım: scripts/gpu-kontrol.sh [model]
set -uo pipefail
OLLAMA="${OLLAMA_HOST_URL:-http://localhost:11434}"
MODEL="${1:-${OLLAMA_MODEL:-}}"
command -v python3 >/dev/null || { echo "python3 gerekli."; exit 1; }
j() { python3 -c "import sys,json; d=json.load(sys.stdin); print($1)"; }
echo; echo "1) Ekran kartı"
if command -v nvidia-smi >/dev/null; then
echo " [TAMAM] NVIDIA: $(nvidia-smi --query-gpu=name,memory.used,memory.total,driver_version --format=csv,noheader | tr '\n' ' ')"
elif [ "$(uname)" = "Darwin" ]; then
echo " [TAMAM] macOS: Ollama Apple Silicon'da Metal (GPU) kullanır."
else
echo " [UYARI] nvidia-smi bulunamadı; NVIDIA sürücüsü yoksa model CPU'da çalışır."
fi
echo; echo "2) Ollama"
TAGS=$(curl -fsS -m 5 "$OLLAMA/api/tags") || {
echo " [SORUN] Ollama'ya ($OLLAMA) ulaşılamadı. Ollama'yı başlatın (ollama serve) ya da https://ollama.com/download"
docker ps --format '{{.Names}}' 2>/dev/null | grep -q ollama && \
echo " [UYARI] Ollama Docker konteynerinde çalışıyor; GPU aktarımı yapılandırılmadıysa CPU kullanır."
exit 1; }
echo " [TAMAM] Ollama çalışıyor ($(echo "$TAGS" | j "len(d['models'])") model yüklü)"
if [ -z "$MODEL" ]; then
MODEL=$(curl -fsS "$OLLAMA/api/ps" | j "d['models'][0]['name'] if d['models'] else ''")
[ -z "$MODEL" ] && MODEL=$(echo "$TAGS" | j "next((m['name'] for m in d['models'] if m['name']=='qwen2.5-coder:14b'), d['models'][0]['name'])")
fi
echo; echo "3) Model yükleme ve hız ölçümü: $MODEL"
START=$(date +%s)
R=$(curl -fsS -m 900 "$OLLAMA/api/generate" -d "{\"model\":\"$MODEL\",\"prompt\":\"Write a Python function that returns the sum of a list.\",\"stream\":false,\"options\":{\"num_predict\":120,\"num_ctx\":16384},\"keep_alive\":\"30m\"}") || { echo " [SORUN] Model çalıştırılamadı: ollama pull $MODEL"; exit 1; }
TPS=$(echo "$R" | j "round(d['eval_count']/(d['eval_duration']/1e9),1) if d.get('eval_duration') else 0")
echo " [TAMAM] Yanıt alındı ($(( $(date +%s) - START )) sn, ilk yükleme dahil). Üretim hızı: $TPS token/sn"
read -r PCT VRAM SIZE < <(curl -fsS "$OLLAMA/api/ps" | python3 -c "
import sys,json; m=[x for x in json.load(sys.stdin)['models'] if x['name'] in ('$MODEL','$MODEL:latest')]
m=m[0] if m else {'size':0,'size_vram':0}; s=m['size'] or 0; v=m.get('size_vram') or 0
print(round(100*v/s) if s else 0, round(v/1e9,1), round(s/1e9,1))")
echo; echo "Sonuç"
if [ "$PCT" -ge 100 ]; then echo " [TAMAM] Model TAMAMEN ekran kartında: %100 GPU ($VRAM GB). Hız $TPS token/sn."
elif [ "$PCT" -gt 0 ]; then
echo " [UYARI] Modelin GPU payı yalnızca %$PCT ($VRAM / $SIZE GB); kalanı CPU'da — belirgin yavaşlar."
echo " Diğer GPU uygulamalarını kapatın, başka modeli boşaltın (ollama stop <model>),"
echo " daha küçük model seçin ya da OLLAMA_NUM_CTX=8192 deneyin."
else echo " [SORUN] Model tamamen CPU'da çalışıyor (%0 GPU). Hız $TPS token/sn."; fi
echo; echo "4) TestAjanı uygulaması"
WANT=$(head -1 "$(dirname "$0")/../VERSION" 2>/dev/null)
if H=$(curl -fsS -m 5 http://localhost:8000/api/health 2>/dev/null); then
HAVE=$(echo "$H" | j "d.get('version','')")
if [ -n "$HAVE" ] && [ "$HAVE" = "$WANT" ]; then echo " [TAMAM] Uygulama güncel (sürüm $WANT)."
else echo " [UYARI] Açık olan uygulama ESKİ sürüm (${HAVE:-bilinmiyor}; klasördeki: $WANT). Başlatıcıyı çalıştırın — uygulama yeniden derlenir."; fi
else echo " [UYARI] Uygulama çalışmıyor (http://localhost:8000). Başlatıcıyla başlatın."; fi
echo; echo "İpucu: uygulamanın üst çubuğundaki GPU göstergesi bu bilgileri gerçek zamanlı gösterir."