Data Engineering

DVC ve MLflow ile Yeniden Üretilebilir ML Boru Hatları

Makine Öğrenmesi mühendisliğindeki en kalıcı zorluklardan biri "benim makinemde çalışıyordu" sorunudur. Girdilerin sabit olduğu geleneksel yazılım geliştirmeden farklı olarak, ML modelleri verilerle eğitilir. Bu veri değiştiğinde, model de değişir. Katı sürümleme ve izleme olmadan ekipler, testte iyi performans gösteren bir modelin neden üretimde başarısız olduğunu veya belirli bir doğruluk iyileştirmesinin neden yeniden üretilemediğini hata ayıklamak için genellikle saatler harcar. Bu makale, tamamen yeniden üretilebilir eğitim boru hatları oluşturmak için Data Version Control (DVC) ve MLflow kullanan sağlam bir iş akışını ele alır.

Temel: DVC ile Veri Sürümleme

Git gibi geleneksel sürüm kontrol sistemleri, büyük veri kümeleri için değil, metin dosyaları için optimize edilmiştir. Data Version Control (DVC), Git'in yeteneklerini, görseller, CSV'ler ve model artefaktları gibi büyük ikili dosyaları işlemek için genişletir. Bunu, dosya özetlerini (hash) Git'te saklarken gerçek verileri uzak bir depolama konumunda (S3, GCS veya yerel önbellek gibi) tutarak yapar.

DVC'yi iş akışınıza entegre ederek, eğittiğiniz her modelin eğitim verilerinin belirli, değiştirilemez bir anlık görüntüsüyle ilişkili olmasını sağlarsınız. Kodunuzu güncellerseniz ancak bunu geçen hafta kullandığınız tam olarak aynı veri sürümüyle karşılaştırmak isterseniz, sadece o belirli veri commit'ini kontrol edebilirsiniz.

# Deponuzda DVC'yi başlatın
dvc init
dvc add data/raw_dataset.csv

# Veri boru hattındaki değişiklikleri izleyin
dvc add data/processed_dataset.csv -m
dvc run -n train_model -d data/processed_dataset.csv -o model.pkl python train.py

MLflow ile Deney İzleme

DVC veri soykütüğünü (lineage) ele alırken, MLflow deney soykütüğünü ele alır. Bir model eğitmek, hiperparametreler, kod sürümleri ve ortam değişkenlerinin karmaşık bir matrisini içerir. MLflow, bu parametreleri izlemek, metrikleri kaydetmek ve artefaktları saklamak için birleşik bir arayüz sağlar.

Standart bir eğitim betiğinde, mantığınızı bir MLflow çalıştırması (run) içinde sararsınız. Bu, kullanılan tam hiperparametreleri (örn. öğrenme oranı, katman sayısı) sonuçlanan performans metrikleriyle (örn. doğruluk, F1 skoru) birlikte kaydetmenizi sağlar. Önemli olan, bu MLflow çalıştırmasını belirli bir DVC commit özetine bağlayarak, veriden sonuca kadar tam bir denetim izi oluşturabilmenizdir.

import mlflow
import dvc
import sys

def main():
    # Yeniden üretilebilirlik için mevcut DVC commit özetini alın
    dvc_commit = dvc.repo.Repo().index.state.state_id

    with mlflow.start_run():
        # Parametreleri kaydet
        mlflow.log_param("dvc_commit", dvc_commit)
        mlflow.log_param("learning_rate", 0.01)
        
        # Modeli eğit
        model = train_model(data_path="data/processed_dataset.csv")
        
        # Metrikleri kaydet
        accuracy = evaluate(model)
        mlflow.log_metric("accuracy", accuracy)
        
        # Artefaktları kaydet
        mlflow.log_artifact("model.pkl")

if __name__ == "__main__":
    main()

CI/CD Boru Hattına Entegrasyon

Bu yığın (stack)ın gerçek gücü, Sürekli Entegrasyonda (CI) ortaya çıkar. Bir geliştirici kod ittiğinde (push), CI sisteminiz verilerin senkronize edildiğinden emin olmak için DVC boru hattını otomatik olarak çalıştırabilir ve ardından MLflow deneylerini tetikleyebilir. Yeni modelin metrikleri, baz çizgiye (baseline) kıyasla düşerse, boru hattı derlemeyi otomatik olarak başarısız gösterebilir. ML kalite güvencesi için bu shift-left (sol kaydırma) yaklaşımı, sorunları geliştirme döngüsünün erken aşamalarında yakalar.

Sonuç

Yeniden üretilebilir ML sistemleri oluşturmak, sadece temiz kod yazmaktan daha fazlasını gerektirir; veri ve deneyler için titiz bir altyapı gerektirir. DVC'yi deterministik veri erişimi için ve MLflow'u ince ayrıntılı deney izleme için birleştirerek, model dağıtımındaki tahminleri ortadan kaldırırsınız. Bu yığın, iddia ettiğiniz herhangi bir sonucun doğrulanabilir veri ve kodla desteklendiğinden emin olarak, makine öğrenmesi operasyonlarınızda güven ve güvenilirlik oluşturur.

Share: