hasari-api / services /ml /setup.sh
erdoganpeker's picture
v0.3.0 — multimodal vehicle damage MVP
e327f0d
#!/bin/bash
# setup.sh — Araç hasar tespiti ML ortamı kurulumu (Linux/macOS/WSL)
# Windows için: setup.ps1 kullan
#
# Kullanım: chmod +x setup.sh && ./setup.sh
set -e
echo "=== Araç Hasar Tespiti — ML Ortam Kurulumu ==="
echo ""
# ---------------- GPU & CUDA tespiti ----------------
GPU_NAME=""
COMPUTE_CAP=""
USE_BLACKWELL=0
if command -v nvidia-smi &> /dev/null; then
GPU_NAME=$(nvidia-smi --query-gpu=name --format=csv,noheader | head -n1)
COMPUTE_CAP=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -n1)
echo "Tespit edilen GPU: ${GPU_NAME}"
echo "Compute capability: ${COMPUTE_CAP}"
# Blackwell mimarisi sm_120+ (RTX 50 serisi, B100 vs.)
if [[ "${COMPUTE_CAP}" == "12."* ]] || [[ "${COMPUTE_CAP}" == "13."* ]]; then
USE_BLACKWELL=1
echo ">> Blackwell mimarisi tespit edildi (sm_${COMPUTE_CAP//./}). cu128 wheels gerekli."
fi
else
echo "UYARI: nvidia-smi bulunamadı. CPU-only kurulum yapılacak (eğitim çok yavaş)."
fi
# ---------------- Klasör yapısı ----------------
echo ""
echo "[1/6] Klasör yapısı oluşturuluyor..."
mkdir -p data/CarDD_release
mkdir -p data/cardd_yolo/{images,labels}/{train,val,test}
mkdir -p data/parts_yolo data/severity_roboflow data/cardd_hf data/raw
mkdir -p runs weights notebooks logs
# ---------------- Python ortamı ----------------
echo ""
echo "[2/6] Python ortamı hazırlanıyor..."
if command -v conda &> /dev/null; then
if ! conda env list | grep -q "^hasar "; then
conda create -n hasar python=3.11 -y
fi
eval "$(conda shell.bash hook)"
conda activate hasar
echo "Conda env: hasar aktif."
else
if [ ! -d ".venv" ]; then
python3 -m venv .venv
fi
# shellcheck disable=SC1091
source .venv/bin/activate
echo "venv: .venv aktif."
fi
# ---------------- pip + temel paketler ----------------
echo ""
echo "[3/6] pip güncelleniyor..."
pip install --upgrade pip setuptools wheel
echo ""
echo "[4/6] PyTorch kuruluyor..."
if [ "${USE_BLACKWELL}" -eq 1 ]; then
# Blackwell (sm_120) — CUDA 12.8 wheels gerekli (PyTorch 2.6+)
# Stable 2.6 cu128 mevcut; nightly fallback için yorum bırakıyoruz.
echo " → Blackwell için PyTorch 2.6+ cu128"
pip install --pre torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu128 || {
echo " → cu128 stable bulunamadı, nightly deneniyor..."
pip install --pre torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/nightly/cu128
}
elif [ -n "${GPU_NAME}" ]; then
# Eski NVIDIA (Ampere, Ada, Hopper) — cu121 yeterli
echo " → Pre-Blackwell NVIDIA için PyTorch cu121"
pip install torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu121
else
# CPU-only
echo " → CPU-only PyTorch"
pip install torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cpu
fi
echo ""
echo "[5/6] ML kütüphaneleri kuruluyor..."
pip install \
"ultralytics>=8.3.40" \
"pycocotools" \
"fiftyone" \
"wandb" \
"matplotlib" \
"seaborn" \
"pandas" \
"pillow" \
"opencv-python" \
"tqdm" \
"pyyaml" \
"huggingface_hub" \
"datasets" \
"roboflow"
# ---------------- CUDA doğrulama ----------------
echo ""
echo "[6/6] CUDA / GPU doğrulama..."
python - <<'PY'
import sys
try:
import torch
except ImportError:
print("PyTorch yüklü değil.")
sys.exit(1)
print(f"PyTorch: {torch.__version__}")
print(f"CUDA mevcut: {torch.cuda.is_available()}")
if torch.cuda.is_available():
props = torch.cuda.get_device_properties(0)
print(f"GPU: {props.name}")
print(f"VRAM: {props.total_memory / 1e9:.1f} GB")
print(f"Compute capability: sm_{props.major}{props.minor}")
# Quick smoke test — Blackwell uyumsuzluğunu erken yakala
try:
x = torch.randn(64, 64, device='cuda')
y = x @ x.T
torch.cuda.synchronize()
print("CUDA tensor smoke test: OK")
except RuntimeError as e:
print(f"CUDA TEST HATASI: {e}")
print("Bu GPU için PyTorch derlemesi uyumsuz olabilir (Blackwell → cu128 gerekli).")
sys.exit(2)
else:
print("UYARI: CUDA yok. Eğitim CPU üzerinde çok yavaş olacak.")
PY
# ---------------- Pretrained weights pre-fetch ----------------
echo ""
echo "[Opsiyonel] Pretrained YOLO ağırlıkları pre-fetch ediliyor (Ctrl+C ile atla)..."
python - <<'PY' || echo "Atlandı."
from ultralytics import YOLO
for w in ["yolo11n-seg.pt", "yolo11s-seg.pt", "yolo11m-seg.pt"]:
try:
YOLO(w)
print(f" ✓ {w}")
except Exception as e:
print(f" ✗ {w}: {e}")
PY
cat <<EOF
=== Kurulum tamamlandı ===
Sonraki adımlar:
1. CarDD veri setini indir:
- HuggingFace mirror (önerilen, anında):
python ../../scripts/download_data.py --cardd-hf
- Veya resmi form (CarDD lisans): https://cardd-ustc.github.io
2. Parça verisi (Ultralytics otomatik):
python prepare_parts_data.py --use_ultralytics
3. Şiddet verisi (Roboflow):
export ROBOFLOW_API_KEY=...
python ../../scripts/download_data.py --roboflow-severity
4. Baseline eğitim (RTX 5050 8GB için önerilen):
python train.py --model yolo11s-seg --epochs 100 --batch 16 --imgsz 640
Conda kullandıysan unutma: conda activate hasar
EOF