MLflow: Makine Öğrenmesi Hayat Döngüsü Platformu
Merhabalar bu yazımızda MLflow’u tanımaya çalışacağız. MLflow nedir sorusuna “MLflow, açık kaynaklı bir makine öğrenmesi hayat döngüsü platformudur.” şeklinde cevap verebiliriz.
Makine öğrenmesi çalışmalarında;
- Bir çok farklı veri seti kullanılır.
- Uğraştırıcı veri hazırlık süreci vardır.
- Farklı bir çok algoritma denenir.
- Belirlenen bir başarı metriğini en iyi elde eden algoritma ve hiper parametreler aranır.
- Bir model oluşturduktan sonra iş bitmez.
- Modeli canlı ortamda sunmak (deploy),
- Model performansını izlemek,
- Sürekli olarak yeni veriler üzerinde yeniden eğitmek ve alternatif modellerle karşılaştırmak gerekir.
Özet olarak “Makine öğrenmesi uygulamaları geliştirmek; accuracy bulmaktan çok daha fazlası ve sanıldığından daha karmaşık bir iştir.”
İşte MLflow makine öğrenmesi modelleri hayat döngüsünde karşılaşılan güçlükleri kolaylaştırmak amacıyla geliştirilmiş açık kaynak kodlu bir projedir.
MLflow ile neler yapabiliriz?
- Model geliştirme esnasında tüm çalışmalarınızı kayıt altına alabilirsiniz.
- Hangi algoritmayı hangi hiper-parametrelerle kullandığınızın tarihçesini tutabilirsiniz.
- Hangi modelde hangi başarı metriklerini kullandınız ve bunların değerleri neydi bunların tarihçesini tutabilirsiniz.
- Her geliştirdiğiniz modeli belki canlı ortamda kullanmak istersiniz diye saklayabilirsiniz.
- Modeli geliştirdiğiniz ortam bilgilerini saklayıp canlı ortama aktarılmasını sağlayabilirsiniz.
MLflow Temel Bileşenleri
MLflow aşağıdaki dört temel bileşenden oluşur. Bunların hepsini birden kullanmak zorunlu değildir ancak kullanmak isterseniz de birbirleriyle uyumlu çalışırlar.
- Tracking: Tracking ile model geliştirme deneyimlerinizi kayıt altına alırsınız. Size bir API ve web ara yüzü sunar.
- Parameters: Model hiperparametreleri
- Metrics: Kullanılan metrikler
- Source: Kaynak kodlar
- Version: Her eğitim denemesini versiyonlar
- Artifacts: Dosya, veri ve modeller (reproducibility)
- Tags and Notes: İlave bilgiler/notlar eklenebilir. Örneğin bu çalışmanın hangi iş problemi ve insanı ile ilgili olduğu.
- Şekil-1’deki tracking server geliştiricilerin çalışmalarını loglar. Bunun için sadece model eğitim kodlarına birkaç ekleme yapmak yeterlidir. MLflow tracking server’ı ilişkisel veri tabanı (Entity (Metadata) Store) kullanan bir web uygulaması olarak düşünebiliriz. Model, kod, ortam bilgileri ve eğitim verileri ise daha büyük depolama sistemleri olan HDFS, S3 gibi artifact store‘lara kaydedilir.
- Stateless olduğu için ölçeklenebilir. Cloud native trendine uygundur.
- Artifacts model ve dosyalardır.
- Jenkins gibi devops/otomasyon araçlarıyla uyumlu çalışır.
- Aşağıda model geliştirme aşamasında her denemeyle ilgili tutulan kayıtların tracking server arayüzünden görünüşü yer almaktadır.
- Projects: ML kodunu paylaşmak veya canlı ortama (production) aktarmak için yeniden kullanılabilir ve tekrarlanabilir bir formda paketlemek için vardır.
- Niçin?
- Bir çok farklı ML geliştirme aracı var.
- Bir çok farklı ML geliştirme ortamı var.
- Bir bilgisayar içinde çalışan kod yanındakinde çalışmaz.
- Bu yüzden mlflow tüm kodlar, ortam, versiyonlar, dependencies ve konfigürasyonlarıyla beraber saklar.
- Aslında her proje, kodunuzu içeren bir dosya dizini veya Git deposudur.
- Örnek bir conda.yml dosyası
channels: - defaults - conda-forge dependencies: - python=3.6.8 - pyspark=3.0.0 - pip - pip: - mlflow name: mlflow-env
- Models: Modelleri yönetmek ve sunmak (deploy) ve bunu farklı ML kütüphaneleri ile farklı platform ve ara yüzler üzerinden yapmak için vardır.
- ML Projects gibi bir dizindir. Bu dizinde;
- Flavour: language and tool-specific representation of ml flow model
- ML Projects gibi bir dizindir. Bu dizinde;
- Packaging format for ML Models
- Reproducibility için dependencies
- Model creation utilities
- Deployment APIs
artifact_path: model flavors: python_function: data: sparkml env: conda.yaml loader_module: mlflow.spark python_version: 3.6.8 spark: model_data: sparkml pyspark_version: 3.0.0 run_id: 8d4c661d6f9647d7abe5b307d431b7da signature: inputs: '[{"name": "ID", "type": "integer"}, {"name": "TV", "type": "double"}, {"name": "Radio", "type": "double"}, {"name": "Newspaper", "type": "double"}]' outputs: '[{"name": "ID", "type": "integer"}, {"name": "TV", "type": "double"}, {"name": "Radio", "type": "double"}, {"name": "Newspaper", "type": "double"}, {"name": "Sales", "type": "double"}, {"name": "prediction", "type": "double"}]' utc_time_created: '2021-03-14 18:24:43.071997'
- Model Registry: MLflow modellerini tüm yaşam döngüsü boyunca yönetmek için merkezi bir model deposu işlevi görmek için vardır.
- Burada versiyonlar, model açıklamaları gibi bilgiler yer alır.
- Tracking için SQL veri tabanı Entity (Metadata) Store kullanmak gerekiyor. Varsayılan dosya sistemi ile çalışmıyor.
- Aşağıda Şekil-4’te yapılan denemelerden birisinin model olarak kaydedildiği görülmektedir. Aradan zaman geçtikten sonra modelin girdi olarak ne aldığı ve çıktı olarak ne ürettiğini görmek güzel olsa gerek.
MLflow Benzerleri
- TF Extended
- Michelangelo
- TFBoards
- Neptune
- Kubeflow
Sonuç
Makine öğrenmesi yaşam döngüsünde karşılaşılan tüm zorlukları aşmaya çalışması güzel. PMML tarzı model değişim araçları bu zorluklardan sadece bir tanesini çözmeye çalışıyor. Konteyner kullanabilmesi iyi bir özellik. Gelecekte bu ve buna benzer proje ve ürünler makine öğrenmesi hayat döngüsündeki boşlukları doldurmaya çalışacaktır. Spark’ı geliştirenler mlflow’u da geliştiriyor. Spark+AI Summit 2018’den beri epey yol kat etti. Geliştirme süreci hala hızla devam ediyor ancak eksikleri çok. Örneğin çalışan bir sunucuyu durdurmak için mlflow server stop komutu yok. Artifact store olarak Amazon S3 örnekleri var ancak hdfs örneği az. Kimlik doğrulama yok elini kolunu sallayan çalışmalara erişir. Nginx ile bir kimlik doğrulama katmanı eklenebilir [9].
Başka bir yazıda görüşmek dileğiyle hoşçakalın.
Kaynaklar
- https://mlflow.org/
- https://www.youtube.com/watch?v=859OxXrt_TI&t=504s
- https://github.com/dbczumar
- http://neptune.ai/
- https://www.wandb.com/
- https://www.comet.ml/site/
- https://valohai.com/
- https://polyaxon.com/
- https://karimlahrichi.com/2020/03/13/add-authentication-to-mlflow/
- https://towardsdatascience.com/deploy-mlflow-with-docker-compose-8059f16b6039
Kapak görseli: Stackie Jia on Unsplash