React Flow mini map
🛠️ Uygulamalı MLileri25 dk

Pipeline ve Model Dağıtımı

Modeli üretime almak

Jupyter notebook'ta %95 doğruluk alan modeliniz var — harika! Ama gerçek dünyada kimse notebook çalıştırmıyor. Model eğitmek yarış arabasının motorunu yapmak gibi; deployment ise o motoru bir Formula 1 aracına monte edip piste çıkarmak. Bu derste notebook'tan üretime giden yolu adım adım inşa edeceğiz.

Eğitilmiş modeli diske kaydetme işlemi **serileştirme** (serialization) olarak adlandırılı…

pickle/joblib

  • ·Python-only, aynı kütüphane versiyonu gerekir
  • ·Hızlı kaydetme/yükleme
  • ·Prototipleme ve dahili sistemler için uygun

ONNX

  • ·Dil ve framework bağımsız
  • ·Optimizasyon fırsatları (ONNX Runtime)
  • ·Üretim ve cross-platform dağıtım için ideal

Model kaydetme yöntemleri karşılaştırması

Python
1import joblib
2from sklearn.ensemble import RandomForestClassifier
3
4# Eğitim
5model = RandomForestClassifier(n_estimators=100)
6model.fit(X_train, y_train)
7
8# joblib ile kaydet (sklearn için önerilen)
9joblib.dump(model, "model.joblib")
10
11# Yükleme
12loaded_model = joblib.load("model.joblib")
13prediction = loaded_model.predict(X_test)

Model dosyası hazır — şimdi dış dünyayla konuşması lazım. **FastAPI**, Python'un en hızlı …

FastAPI ile minimal /predict endpoint

Python
1from fastapi import FastAPI
2from pydantic import BaseModel
3import joblib
4import numpy as np
5
6app = FastAPI()
7model = joblib.load("model.joblib")
8
9class PredictRequest(BaseModel):
10 features: list[float]
11
12class PredictResponse(BaseModel):
13 prediction: int
14 probability: float
15
16@app.post("/predict", response_model=PredictResponse)
17def predict(req: PredictRequest):
18 X = np.array(req.features).reshape(1, -1)
19 pred = model.predict(X)[0]
20 prob = model.predict_proba(X).max()
21 return PredictResponse(prediction=int(pred), probability=float(prob))

💡uvicorn main:app --reload komutuyla yerel sunucuyu başlatın. http://localhost:8000/docs adresinde otomatik oluşturulan Swagger arayüzünü göreceksiniz — test etmek için harika!

"Benim bilgisayarımda çalışıyordu" — yazılımın en tehlikeli cümlesi. **Docker**, uygulaman…

ML servisi için minimal Dockerfile

dockerfile
1FROM python:3.11-slim
2
3WORKDIR /app
4
5COPY requirements.txt .
6RUN pip install --no-cache-dir -r requirements.txt
7
8COPY model.joblib .
9COPY main.py .
10
11EXPOSE 8000
12
13CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

⚠️Model dosyasını Docker image'a gömmek basit ama tehlikeli — her model güncellemesinde yeni image build etmeniz gerekir. Üretimde modeli harici depolama (S3, GCS) veya model registry'den yükleyin.

Model canlıya çıktı, tebrikler! Ama hikaye bitmedi — gerçek dünya verileri değişir, model …

🌡️Drift Tespiti = Sağlık Kontrolü

Modeliniz bir atlet gibi düşünün. Antrenman sırasında mükemmel form gösterebilir (test seti), ama gerçek yarışta (üretim) hava değişebilir, rakipler farklı koşabilir. Düzenli sağlık kontrolü (monitoring) olmadan performans düşüşünü fark etmezsiniz. Data drift kan değerlerinin değişmesi, concept drift ise oyun kurallarının değişmesi gibidir.

Basit data drift tespiti (Kolmogorov-Smirnov testi)

Python
1from scipy import stats
2import numpy as np
3
4def detect_drift(reference_data, production_data, threshold=0.05):
5 """Her özellik için KS testi uygula"""
6 drift_detected = {}
7 for col in reference_data.columns:
8 statistic, p_value = stats.ks_2samp(
9 reference_data[col],
10 production_data[col]
11 )
12 drift_detected[col] = p_value < threshold
13 return drift_detected
14
15# Kullanım
16drift = detect_drift(X_train, X_production)
17print(f"Drift tespit edilen özellikler: {[k for k,v in drift.items() if v]}")

Geleneksel yazılımda CI/CD kod değişikliklerini test edip dağıtır. ML'de ek karmaşıklık va…

GitHub Actions ile basit ML CI/CD pipeline

yaml
1name: ML Pipeline
2
3on:
4 push:
5 branches: [main]
6 schedule:
7 - cron: '0 0 * * 0' # Haftalık yeniden eğitim
8
9jobs:
10 test-and-deploy:
11 runs-on: ubuntu-latest
12 steps:
13 - uses: actions/checkout@v3
14
15 - name: Run tests
16 run: pytest tests/
17
18 - name: Train model
19 run: python train.py
20
21 - name: Validate performance
22 run: python validate.py --min-accuracy 0.90
23
24 - name: Build and push Docker
25 run: |
26 docker build -t ml-model:${{ github.sha }} .
27 docker push ml-model:${{ github.sha }}

ℹ️MLOps araçları hızla olgunlaşıyor: MLflow (experiment tracking), DVC (veri versiyonlama), Evidently (monitoring), BentoML (serving). Hepsini öğrenmeye çalışmayın — bir end-to-end pipeline kurup ihtiyaca göre araç ekleyin.

✦ Quiz

Bir e-ticaret sitesinde ürün öneri modeli 6 ay sonra performans kaybetti. Müşteri demografisi aynı kaldı ama pandemi sonrası alışveriş tercihleri değişti. Bu hangi tür drift?

✦ Quiz

Hangi model serileştirme formatı cross-platform deployment için en uygun?

✦ Quiz

Docker kullanmanın ML deployment'ta en önemli avantajı nedir?

Bağlantılı Konular