MLflow

MLflow, makine öğrenmesi ve derin öğrenme projelerinde deneyleri, modelleri ve sonuçları yönetmek için kullanılan bir açık kaynaklı bir platformdur. Kullanıcıların deneylerini organize etmelerini, modellerini izlemelerini ve sonuçlarını paylaşmalarını sağlar. Temelde üç ana bileşenden oluşur:

  • Takip: Deneylerin, parametrelerin, metriklerin ve model dosyalarının kaydedilmesini sağlayarak deneylerin geçmişini korur, farklı parametreleri karşılaştırır ve model performansını görselleştirmeyi sağlar.
  • Projeler: Kodu paketleyerek paylaşmanızı ve yeniden kullanmanızı sağlar. Farklı ortamlarda modellerin yeniden eğitilmesini ve çalıştırılmasını sağlar.
  • Modeller: Modellerin paketlenmesini, yönetilmesini ve dağıtılmasını sağlar.

Şimdi mlflow kullanarak TensorFlow ile MNIST veri seti üzerinde bir model eğitelim. İlk olarak mlflowu kuralım.

1 – ) ‘pip’ kullanarak mlflow’u kolayca kurabilirsiniz.

pip install mlflow

2 – ) MLflow kütüphanesinde bulunan ‘autolog’ fonksiyonları deneylerin (notebook) otomatik olarak kaydedilmesini sağlıyor. MLflow; xgboost, tensorflow, pytorch, sklearn, statsmodels gibi çoğu model eğitme kütüphaneleri ile birlikte çalışarak otomatik olarak deneyleri kaydedebiliyor. Bu linkten çeşitli kütüphaneler için mlflow’un nasıl kullanılacağını öğrenebilirsiniz. Biz bu yazıda TensorFlow’u kullanacağız. Aşağıdaki kodları çalıştırarak modeli eğitelim.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

import mlflow
# Bu fonksiyon notebook üzerindeki metrik, model gibi çeşitli bilgilerin otomatik olarak kaydedilmesini sağlıyor.
mlflow.tensorflow.autolog()

(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train.reshape((60000, 28 * 28))
X_test = X_test.reshape((10000, 28 * 28))

y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

model = models.Sequential([
    layers.Dense(128, activation='relu', input_shape=(28 * 28,)),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
              
history = model.fit(X_train, y_train, epochs=10, batch_size=64)

test_loss, test_acc = model.evaluate(X_test, y_test)
print(f'Test accuracy: {test_acc}')

model.save('mnist_model_weights.h5')

3 – ) Şimdi modeli eğitirken kullandığımız dosyanın olduğu dizine gidip ‘mlflow ui’ komutunu çalıştıralım.

alper@alper:/mnt/d/work2/cyberds-yazilar/MLFlow$ mlflow ui
[2024-04-08 22:46:13 +0300] [162967] [INFO] Starting gunicorn 21.2.0
[2024-04-08 22:46:13 +0300] [162967] [INFO] Listening at: http://127.0.0.1:5000 (162967)
[2024-04-08 22:46:13 +0300] [162967] [INFO] Using worker: sync
[2024-04-08 22:46:13 +0300] [162969] [INFO] Booting worker with pid: 162969
[2024-04-08 22:46:13 +0300] [162970] [INFO] Booting worker with pid: 162970
[2024-04-08 22:46:13 +0300] [162971] [INFO] Booting worker with pid: 162971
[2024-04-08 22:46:13 +0300] [162972] [INFO] Booting worker with pid: 162972

4 – ) ‘5000’ portundaki linke gittiğimiz zaman bizi bir arayüz ekranı karşılıyor. Bu ekranda, eğittiğimiz tüm deneyler (experiment) listeleniyor. Her bir deneyin kaç saniye sürdüğü, kullanılan model kütüphanesi, kaynak ve veri seti gibi bilgiler burada görüntüleniyor.

5 – ) Deneyi seçtikten sonra bizi bir başka arayüz karşılıyor. Bu ekran veri seti, model parametreleri ve model metrikleri gibi çeşitli bilgileri içeriyor.

6 – ) Sol taraftan ‘accuracy’ metriğine tıkladığımız zaman bize bir grafik ekranına yönlendiriyor. Bu ekranda modelimizin her bir epoch’daki ‘accuracy’ ve ‘loss’ bilgilerini görselleştirebiliyoruz.