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

RuneLab Ekibi

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


Sonuç

Makine öğrenmesi modelinizi geliştirip, bir API olarak yayına almak için:

  1. Veriyi toplayın ve temizleyin

  2. Modeli eğitin ve kaydedin

  3. API haline getirin

  4. Docker ile paketleyin

  5. İzleme ve versiyonlama ile süreci sürekli kontrol edin

Bir sonraki yazıda görüşmek üzere!