ML Ops Pipeline’ı Sıfırdan Kurmak: Modelden API’ye Adım Adım

ML Ops Pipeline’ı Sıfırdan Kurmak: Teknik Rehber
Gerçek dünyada bir makine öğrenmesi (ML) projesi sadece model eğitmekle bitmez. Modelin yaşam döngüsü, onu geliştirme, test etme, yayına alma, izleme ve güncelleme gibi adımlarla devam eder. Bu sürece ML Ops (Machine Learning Operations) denir.
Bu yazıda bir ML modelinin sıfırdan API olarak yayına alınmasına kadar olan tüm adımları teknik detaylarla açıklayacağız.
1. Veri Toplama
Veri CSV, veritabanı, API veya web scraping yoluyla alınabilir.
Örnek:
import pandas as pd
df = pd.read_csv("reviews.csv")
2. Veri Temizleme ve Özellik Mühendisliği
Verinin eksik değerleri, aykırıları, dengesizlikleri giderilmeli, metinler önişlenmelidir.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
vectorizer = TfidfVectorizer(max_features=1000) X = vectorizer.fit_transform(df['review_text']) y = df['rating']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
#Veri seti eğitim ve testlerde kullanılmak amacıyla ikiye bölünmüştür.
3. Model Eğitimi
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
model = LogisticRegression() #Bu örnekte logistic regression modeli seçilmiştir
#model seçimi ihtiyaçlar ve verinin özellikleri gözetilerek yapılmalıdır. model.fit(X_train, y_train)
y_pred = model.predict(X_test) print("Accuracy:", accuracy_score(y_test, y_pred))
Model .pkl formatında kaydedilebilir:
import joblib
joblib.dump(model, "model.pkl") joblib.dump(vectorizer, "vectorizer.pkl")
4. API'ye Dönüştürme (FastAPI ile)
main.py:
from fastapi import FastAPI, Request
import joblib
import uvicorn
app = FastAPI() model = joblib.load("model.pkl") vectorizer = joblib.load("vectorizer.pkl")
@app.post("/predict") async def predict(request: Request): data = await request.json() text = data['text'] X =
vectorizer.transform([text]) prediction = model.predict(X) return {"rating_prediction": int(prediction[0])}
if name == "main": uvicorn.run(app, host="0.0.0.0", port=8000)
5. Docker ile Paketleme
Dockerfile
FROM python:3.10
WORKDIR /app
COPY . /app
RUN pip install fastapi uvicorn scikit-learn joblib
CMD ["python", "main.py"]
docker build -t ml-api .
docker run -p 8000:8000 ml-api
6. Model İzleme (Opsiyonel)
Model performansını İzlemek için MLflow veya Prometheus kullanabilirsiniz.
Basit bir metrik loglama:
import mlflow
mlflow.start_run() mlflow.log_metric("accuracy", accuracy_score(y_test, y_pred)) mlflow.end_run()
7. Model Versiyonlama ve CI/CD
DVC: Veri ve model versiyon kontrolü için
GitHub Actions / GitLab CI: Kod değişikliğiyle birlikte modelin test edilmesi ve yayına alınması
Sonuç
Makine öğrenmesi modelinizi geliştirip, bir API olarak yayına almak için:
Veriyi toplayın ve temizleyin
Modeli eğitin ve kaydedin
API haline getirin
Docker ile paketleyin
İzleme ve versiyonlama ile süreci sürekli kontrol edin
Bir sonraki yazıda görüşmek üzere!