Introduction
Makine öğrenmesi (ML) projelerinde en çok karşılaşılan zorluklardan biri, eğitilmiş modellerin gerçek dünyada kullanılabilir hale getirilmesidir.
Birçok veri bilimci eğitim aşamasında başarılı sonuçlar alır, fakat bu modelleri üretim ortamına (production) aktarmak bambaşka bir süreçtir. İşte bu sürece Model Deployment denir.
Deployment süreci şu soruları kapsar:
- Model nasıl çağrılacak? (REST API, batch job, stream processing)
- Model hangi ortamda çalışacak? (On-Prem, Cloud, Edge)
- Modelin performansı nasıl izlenecek? (Monitoring, Logging)
- Yeni versiyonlar nasıl devreye alınacak? (CI/CD, A/B Testing)
Bu makalede:
- Model deployment’ın temel kavramlarını,
- Flask ile basit bir API kurmayı,
- Docker containerization sürecini,
- CI/CD ve GitOps yaklaşımlarını öğreneceğiz.
Prerequisites
Başlamadan önce aşağıdaki bilgi ve araçlara ihtiyacınız olacak:
- Python programlama dili ve temel ML kütüphaneleri (scikit-learn, joblib)
- Flask framework bilgisi (REST API geliştirme için)
- Docker bilgisi (containerization için)
- Git ve temel CI/CD kavramları
- Temel ML terimleri: training, inference, model registry
Step 1 – Model Deployment Kavramları
1.1 Batch vs Online Inference
- Batch Inference: Büyük veri setlerinde toplu tahmin. Örn: Her gece müşteri segmentasyonu çalıştırma.
- Online Inference: Gerçek zamanlı tahmin. Örn: Kullanıcı bir ürün önerisi istediğinde API üzerinden model tahmini.
1.2 On-Prem vs Cloud Deployment
- On-Premises: Model, kurumun kendi veri merkezinde çalışır. Daha fazla kontrol, daha fazla operasyonel yük.
- Cloud Deployment: AWS SageMaker, Azure ML, GCP Vertex AI gibi platformlarda otomatik ölçeklenebilirlik.
1.3 Model Registry
Bir modelin hangi versiyonda, hangi parametrelerle eğitildiğini kaydetmek için Model Registry kullanılır.
Örn: MLflow, DVC, SageMaker Model Registry.
# MLflow ile model kaydetme örneği
mlflow sklearn log-model -m "model.pkl" -r "my_model_registry"
Step 2 – Flask API ile Basit Model Deployment
2.1 Örnek Model Eğitimi
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
import joblib
# Veri seti
iris = load_iris()
X, y = iris.data, iris.target
# Model eğitimi
model = LogisticRegression(max_iter=200)
model.fit(X, y)
# Kaydet
joblib.dump(model, "model.pkl")
2.2 Flask API Yazımı
from flask import Flask, request, jsonify
import joblib
app = Flask(__name__)
model = joblib.load("model.pkl")
@app.route("/predict", methods=["POST"])
def predict():
data = request.get_json()
prediction = model.predict([data["features"]])
return jsonify({"prediction": prediction.tolist()})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
2.3 API Testi
curl -X POST http://localhost:5000/predict -H "Content-Type: application/json" -d '{"features":[5.1, 3.5, 1.4, 0.2]}'
Step 3 – Docker ile Containerization
3.1 Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
3.2 requirements.txt
flask
scikit-learn
joblib
3.3 Docker Build ve Run
docker build -t flask-ml-model .
docker run -p 5000:5000 flask-ml-model
Step 4 – CI/CD ve GitOps Yaklaşımı
4.1 GitHub Actions ile CI/CD
.github/workflows/deploy.yml
name: Deploy Model API
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build Docker image
run: docker build -t flask-ml-model .
- name: Push to Registry
run: docker push myrepo/flask-ml-model:latest
4.2 GitOps – ArgoCD ile Deployment
Kubernetes manifest dosyası:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ml-model
spec:
replicas: 2
selector:
matchLabels:
app: ml-model
template:
metadata:
labels:
app: ml-model
spec:
containers:
- name: ml-model
image: myrepo/flask-ml-model:latest
ports:
- containerPort: 5000
ArgoCD, bu manifesti otomatik olarak Kubernetes cluster’a uygular.
Step 5 – Model Deployment’ın Zorlukları
- Latency: Gerçek zamanlı tahminlerde düşük gecikme kritik.
- Scaling: Artan trafik karşısında model podlarının ölçeklenmesi gerekir.
- Monitoring: Modelin doğruluk oranı zamanla düşebilir (concept drift).
- Versiyonlama: Yeni modeller A/B testing veya Canary release ile devreye alınmalı.
Conclusion
Bu makalede Model Deployment sürecini inceledik:
- Temel kavramlar (Batch vs Online, On-Prem vs Cloud, Model Registry),
- Flask ile REST API üzerinden model dağıtımı,
- Docker containerization süreci,
- CI/CD ve GitOps entegrasyonu.