Bulutta MLflow

May 09 2023
Bu yazımda mlflow'un bulut üzerinde (AWS ve GCP) nasıl barındırılacağından, makine öğrenimi deneylerinin çalıştırılmasından, log parametrelerinin, metriklerin nasıl yapılacağından ve modelin model kayıt defterinde saklanmasından bahsedeceğim. mlflow, uçtan uca makine öğrenimi yaşam döngüsünü yöneten açık kaynaklı bir platformdur. Ana işlevleri şunlardır: Yerel makinelerde mlflow çalıştırabiliriz, ancak onu bulutta barındırmanın avantajları vardır Mlflow'ta aşağıdaki 3 ana bileşene sahibiz: Yukarıdaki mimari diyagram, ihtiyaç duyduğumuz tüm AWS hizmetlerinin neler olduğunu ve bunların nasıl etkileşimde bulunduğunu gösterir. AWS'de mlflow'u barındırmak için sipariş verin.

Bu yazıda mlflow'u bulutta (AWS ve GCP) barındırmayı, makine öğrenimi denemelerini çalıştırmayı, parametreleri, metrikleri kaydetmeyi ve modeli model kayıt defterinde depolamayı anlatacağım.

mlflow nedir?

mlflow, uçtan uca makine öğrenimi yaşam döngüsünü yöneten açık kaynaklı bir platformdur. Başlıca işlevleri şunlardır:

  1. Deney İzleme: Tüm makine öğrenimi deneylerini ve bunları sorgulama becerisini korur
  2. Tekrarlanabilirlik: Makine öğrenme kodunu paketler ve bu sonuçları herhangi bir platformda yeniden üretebilir
  3. Dağıtım: Makine öğrenimi modellerini çeşitli ortamlarda dağıtma yeteneği (ör. AWS Sagemaker, GCP Cloud run, .. vb.)
  4. Model Kaydı: Modelin birden çok sürümünün merkezi bir havuzda tutulması

Mlflow'u yerel makinelerde çalıştırabiliriz, ancak onu bulutta barındırmanın avantajları vardır

  1. Bulut depolamadan, bilgi işlem gücünden, güvenlikten vb. yararlanabiliriz.
  2. Her ekip üyesinden tüm deneylerin merkezi görünümü

mlflow'da aşağıdaki 3 ana bileşene sahibiz:

  1. Dashboard: Her deney için deneylerin listesini, model parametrelerini, metrikleri .. vb. görebileceğimiz bir kullanıcı arayüzüdür.
  2. Meta Mağaza: Tüm deneyleri, parametreleri, metrikleri depolamak için bir arka uç veritabanı (MySql) kullanır.. vb.
  3. Artifactory Store: Serileştirilmiş model gibi büyük dosyalar için bunu kullanır. Genel olarak Amazon S3 veya GCP Cloud Storage gibi dağıtılmış dosya sistemlerini kullanırız.
  1. Liman işçisi
  2. MySQL veritabanı
  3. Dağıtılmış Dosya Sistemi
MLflow-AWS mimarisi

Yukarıdaki mimari şeması, ihtiyaç duyduğumuz tüm AWS hizmetlerinin neler olduğunu ve mlflow'u AWS'de barındırmak için nasıl etkileşim kurduklarını gösterir. Sunucusuz AWS Fargate kullanarak mlflow'u başlatacağız.

Öncelikle, mlflow'u ve bağımlılıklarını paketleyen bir liman işçisi dosyası oluşturmamız gerekiyor. Gereksinimler.txt dosyasında aşağıdaki bağımlılıkları tanımlarız

mlflow kurulumu ve sunucuyu çalıştırmak için docker dosyası

Docker dosyası, değişkenler olarak kova ve diğer veritabanı bağlantı ayrıntılarına sahiptir, bu değerler Fargate görev tanımında ortam değişkenleri olarak yapılandırılacaktır.

Docker dosyasına sahip olduğumuzda, docker görüntüsünü oluşturmak için aşağıdaki komutu çalıştırın.

docker build -t mlflowtracker .

AWS ECR Deposu Oluşturun

Şimdi local olarak oluşturduğumuz docker image'ı AWS'de container register'a itmemiz gerekiyor.

# Login 
aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

# Tag local docker image
docker tag <image_name> aws_account_id.dkr.ecr.region.amazonaws.com/repository_name:tag

# Push image
docker push aws_account_id.dkr.ecr.region.amazonaws.com/repository_name:tag

Daha sonra, bir AWS RDS MySql örneği oluşturacağımız meta bilgileri depolamak için mlflow için MySql'e ihtiyacımız var.

AWS RDS'de MySql oluşturma adımları için buraya tıklayın

Model eserlerini depolamak için mlflow için bir S3 kovası oluşturmamız gerekiyor. aws konsoluna gidin, s3'ü arayın, klasör adını girin ve tüm genel erişimi engellediğinizden emin olun ve 'Paket Oluştur'u tıklayın

S3 grubu oluştur

Daha sonra bilgi işlem olarak fargate'i seçerek AWS ECS kümesi oluşturmamız gerekiyor. aws konsoluna gidin ve elastik konteyner hizmetini arayın ve 'Küme Oluştur'u tıklayın. Küme oluşturma sayfasında, küme adını girin, vpc ve alt ağı seçin. Varsayılan olarak fargate seçeneği seçili olacaktır.

ECS kümesi oluştur

ECS'de bir görev, liman işçisi görüntüsünü çalıştıran parçalı düzeyde bir varlıktır, kubernet'lerdeki bir bölmeye benzer. Bu yüzden ECR'ye yüklediğimiz docker imajını kullanacak görev tanımını oluşturmamız gerekiyor. Burada ortam değişkeni değerlerini tanımlıyoruz. Görev tanımı oluşturmak için Amazon Elastic Container Service >Görev tanımları > Create New Task Definition bölümüne gidin ve görev adını, ECR'ye yüklediğimiz image uri'yi, container portunu ve ortam değişkenlerini sağlayın

ECS görev tanımı

Görev tanımının oluşturulması sırasında AWS tarafından otomatik olarak oluşturulan ecsTaskExecution rolünü seçin, s3 klasörünü okuyup yazabilmesi için s3 erişim ilkesini eklediğinizden emin olun.

Görev tanımını oluşturduktan sonra, yukarıda oluşturulan görev tanımını kullanan bir hizmet oluşturmamız gerekir. Hizmeti oluştururken, ihtiyacımız olan minimum ve maksimum görev sayısını seçebiliriz (yalnızca 1 görev seçtim), böylece otomatik ölçeklenebilir. Bu adımda bir yük dengeleyici oluşturma seçeneğimiz var.

ECS hizmeti oluşturmak için Amazon Elastic Container Service >kümeler >küme_adı> Oluştur ve hizmet adını sağla seçeneğine gidin, daha önce oluşturduğumuz görev tanımını ve revizyonunu seçin, minimum ve maksimum görev sayısını girin, ağ oluşturma bölümünde vpc'yi seçin, uygulamayı seçin yük dengeleyici bölümünde yük dengeleyici ve adı, listeleyici bağlantı noktasını, hedef grup adını sağlayın

Görev düzenleme için ECS Hizmeti
ECS Hizmet Yük Dengeleyici

Hizmeti oluşturduğumuzda, gerekli sayıda görevi döndürür, mlflow kontrol panelini başlatmak için yük dengeleyici url'sini kullanabiliriz.

Not: Yük dengeleyici, gelen ve giden ağ kurallarını tanımlayan güvenlik grubunu kullanır, mlflow kullanıcı arayüzüne erişebilmek için kuralları değiştirmeniz/eklemeniz gerekir.

Artık AWS'de mlflow'u barındırdığımıza göre, bulutta mlflow'u işaret ederek yerelimizden bir makine öğrenimi deneyi çalıştıralım

Deneyi çalıştırdıktan sonra, deney sırasında kaydettiğimiz tüm parametreleri, metrikleri ve modeli mlflow'da görebiliriz.

Deneysel sonuçlarla mlflow — AWS

GCP'de MLflow

MLflow-GCP mimarisi

Yukarıdaki mimari şeması, ihtiyaç duyduğumuz GCP hizmetlerini ve mlflow'u GCP'de barındırmak için nasıl etkileşim kurduklarını göstermektedir. Sunucusuz GCP Cloudrun kullanarak mlflow'u başlatacağız.

Boto3'ü google-cloud-storage olarak değiştirmemiz gerekmesi dışında aynı Dockerfile ve gereklilikler.txt'yi (Lütfen AWS bölümündeki MLflow'a bakın) kullanabiliriz.

Varsayılan yapıt için Dockerfile içindeki değişkenler, veritabanı bağlantı ayrıntıları, google cloudrun'da ortam değişkenleri olarak yapılandırılacaktır.

Liman işçisi görüntüsünü oluşturmak, etiketlemek ve Google Container Registry'ye (GCR) göndermek için aşağıdaki komutları çalıştırın

# Build docker image
docker build -t mlflowtracker-gcp .

# Install docker credential helper using gcloud
gcloud components install docker-credential-gcr docker-credential-gcr configure-docker

# Tag docker image
docker tag <local_image_name> gcr.io/gcp_project_id/mlflowtracker-gcp:latest

# Push docker image
docker push gcr.io/gcp_project_id/mlflowtracker-gcp:latest

mlflow meta deposu için GCP MySQL Örneği Oluşturma

DB eşgörünümü oluşturduk, şimdi bir veritabanı ve bir kullanıcı oluşturmamız gerekiyor, böylece mlflow bu ayrıntıları veritabanına bağlanmak için kullanabilir. SQL sayfasında, Veritabanları'na tıklayın ve Veritabanı Oluştur'a tıklayın, veritabanı adını girin. Benzer şekilde, kullanıcılar bağlantısını tıklayın ve kullanıcı adı ve şifresini girin

GCP MySQL Veritabanı Oluşturma
GCP MySQL Veritabanı Kullanıcı Oluşturma

Model eserlerini depolamak için mlflow için bir bulut depolama kovası oluşturmamız gerekiyor. Bir bulut depolama grubu oluşturmak için GCP konsolunda bulut depolama alanı arayın, "Oluştur" düğmesini tıklayın, grup adını, bölgeyi sağlayın ve oluştur'u tıklayın

mlflow modeli yapısı için GCP grubu

Container kayıt defterine yüklediğimiz docker imajını kullanacak gcp'de bir cloudrun servisi oluşturacağız. Bulut çalıştırma örneği oluşturmak için bulut çalıştırma sayfasına gidin, hizmet oluştur'a tıklayın, GCR'ye yüklediğimiz kapsayıcı görüntüsünü seçin, kapsayıcı bağlantı noktası, CPU ve bellek değerleri, otomatik ölçeklendirme için minimum ve maksimum örnekler ve ortam değişkenleri sağlayın.

GCP Cloudrun
GCP Cloudrun Yapılandırması

Not: Cloudrun'da seçtiğiniz hizmet hesabının bulut depolamaya erişimi olduğundan emin olun, aksi takdirde model yapıtını yüklemek başarısız olur

Artık mlflow'u GCP'de barındırdığımıza göre, bulutta mlflow'u işaret ederek yerel bölgemizden bir makine öğrenimi deneyi yapalım

Deneyi çalıştırdıktan sonra, deney sırasında kaydettiğimiz tüm parametreleri, metrikleri ve modeli mlflow'da görebiliriz.

deneysel sonuçlarla mlflow — GCP

Not: Tüm bulut kaynaklarını konsolu kullanarak manuel olarak oluşturduk, altyapıyı kod olarak kullanmak (Terraform veya CloudFormation) iyi bir uygulamadır.

AWS ve GCP bulut platformlarında mlflow'u nasıl barındırabileceğimizi ve bulutta makine öğrenimi deneylerini nasıl yürütebileceğimizi umarım çok iyi anlamışsınızdır.

Mutlu Öğrenme !!