Aracılığıyla paylaş


Çalışma Alanı Modeli Kayıt Defteri örneği

Not

Bu belgeler Çalışma Alanı Modeli Kayıt Defteri'ni kapsar. Azure Databricks, Unity Kataloğu'nda Modellerin kullanılmasını önerir. Unity Kataloğu'ndaki modeller merkezi model idaresi, çalışma alanları arası erişim, köken ve dağıtım sağlar. Çalışma Alanı Modeli Kayıt Defteri gelecekte kullanımdan kaldırılacaktır.

Bu örnekte, bir rüzgar grubunun günlük güç çıkışını tahmin eden bir makine öğrenmesi uygulaması oluşturmak için Çalışma Alanı Modeli Kayıt Defteri'nin nasıl kullanılacağı gösterilmektedir. Örnekte şunların nasıl yapılacağını gösterilmektedir:

  • MLflow ile modelleri izleme ve günlüğe kaydetme
  • Modelleri Model Kayıt Defteri'ne kaydetme
  • Modelleri açıklama ve model sürümü aşama geçişleri yapma
  • Kayıtlı modelleri üretim uygulamalarıyla tümleştirme
  • Model Kayıt Defteri'nde modelleri arama ve bulma
  • Modelleri arşivle ve sil

Bu makalede, MLflow İzleme ve MLflow Model Kayıt Defteri API'leri ve API'leri kullanılarak bu adımların nasıl gerçekleştirildiği açıklanır.

MLflow İzleme ve Kayıt Defteri API'lerini kullanarak tüm bu adımları gerçekleştiren bir not defteri için Model Kayıt Defteri örnek not defterine bakın.

MLflow İzleme ile veri kümesini yükleme, modeli eğitma ve izleme

Modeli Model Kayıt Defteri'ne kaydedebilmeniz için önce deneme çalıştırması sırasında modeli eğitip günlüğe kaydetmeniz gerekir. Bu bölümde rüzgar grubu veri kümesini yükleme, modeli eğitma ve eğitim çalıştırmasını MLflow'a kaydetme işlemi gösterilmektedir.

Veri kümesini yükleme

Aşağıdaki kod, Birleşik Devletler bir rüzgar grubu için hava durumu verilerini ve güç çıkış bilgilerini içeren bir veri kümesini yükler. Veri kümesinde, wind speedair temperature birkaç yıl boyunca altı saatte bir (bir kez 00:00, , ve 08:00bir 16:00kere ) örneklenen özelliklerin yanı sıra günlük toplam güç çıkışı (power ) bulunurwind direction.

import pandas as pd
wind_farm_data = pd.read_csv("https://github.com/dbczumar/model-registry-demo-notebook/raw/master/dataset/windfarm_data.csv", index_col=0)

def get_training_data():
  training_data = pd.DataFrame(wind_farm_data["2014-01-01":"2018-01-01"])
  X = training_data.drop(columns="power")
  y = training_data["power"]
  return X, y

def get_validation_data():
  validation_data = pd.DataFrame(wind_farm_data["2018-01-01":"2019-01-01"])
  X = validation_data.drop(columns="power")
  y = validation_data["power"]
  return X, y

def get_weather_and_forecast():
  format_date = lambda pd_date : pd_date.date().strftime("%Y-%m-%d")
  today = pd.Timestamp('today').normalize()
  week_ago = today - pd.Timedelta(days=5)
  week_later = today + pd.Timedelta(days=5)

  past_power_output = pd.DataFrame(wind_farm_data)[format_date(week_ago):format_date(today)]
  weather_and_forecast = pd.DataFrame(wind_farm_data)[format_date(week_ago):format_date(week_later)]
  if len(weather_and_forecast) < 10:
    past_power_output = pd.DataFrame(wind_farm_data).iloc[-10:-5]
    weather_and_forecast = pd.DataFrame(wind_farm_data).iloc[-10:]

  return weather_and_forecast.drop(columns="power"), past_power_output["power"]

Modeli eğitme

Aşağıdaki kod, veri kümesindeki hava durumu özelliklerine göre güç çıkışını tahmin etmek için TensorFlow Keras kullanarak bir sinir ağını eğitmektedir. MLflow modelin hiper parametrelerini, performans ölçümlerini, kaynak kodunu ve yapıtlarını izlemek için kullanılır.

def train_keras_model(X, y):
  import tensorflow.keras
  from tensorflow.keras.models import Sequential
  from tensorflow.keras.layers import Dense

  model = Sequential()
  model.add(Dense(100, input_shape=(X_train.shape[-1],), activation="relu", name="hidden_layer"))
  model.add(Dense(1))
  model.compile(loss="mse", optimizer="adam")

  model.fit(X_train, y_train, epochs=100, batch_size=64, validation_split=.2)
  return model

import mlflow

X_train, y_train = get_training_data()

with mlflow.start_run():
  # Automatically capture the model's parameters, metrics, artifacts,
  # and source code with the `autolog()` function
  mlflow.tensorflow.autolog()

  train_keras_model(X_train, y_train)
  run_id = mlflow.active_run().info.run_id

MLflow kullanıcı arabirimini kullanarak modeli kaydetme ve yönetme

Bu bölümde:

Yeni kayıtlı model oluşturma

  1. Azure Databricks not defterinin sağ kenar çubuğundaki Deneme simgesine Deneme simgesi tıklayarak MLflow Deneme Çalıştırmaları kenar çubuğuna gidin.

    Kenar çubuğunu çalıştırır

  2. TensorFlow Keras model eğitim oturumuna karşılık gelen MLflow Çalıştırması'nı bulun ve Çalıştırma Ayrıntılarını Görüntüle simgesine tıklayarak MLflow Çalıştırma kullanıcı arabiriminde açın.

  3. MLflow kullanıcı arabiriminde Yapıtlar bölümüne kadar aşağı kaydırın ve model adlı dizine tıklayın. Görüntülenen Modeli Kaydet düğmesine tıklayın.

    Modeli kaydetme

  4. Açılan menüden Yeni Model Oluştur'u seçin ve aşağıdaki model adını girin: power-forecasting-model.

  5. Kaydet’e tıklayın. Bu, adlı power-forecasting-model yeni bir model kaydeder ve yeni bir model sürümü oluşturur: Version 1.

    Yeni model sürümü

    Birkaç dakika sonra, MLflow kullanıcı arabirimi yeni kayıtlı modelin bağlantısını görüntüler. Yeni model sürümünü MLflow Model Kayıt Defteri kullanıcı arabiriminde açmak için bu bağlantıyı izleyin.

Model Kayıt Defteri kullanıcı arabirimini keşfetme

MLflow Model Kayıt Defteri kullanıcı arabirimindeki model sürümü sayfası, yazarı, oluşturma zamanı ve geçerli aşaması dahil olmak üzere kayıtlı tahmin modeli hakkında Version 1 bilgi sağlar.

Model sürümü sayfası

Model sürümü sayfası, modeli MLflow Çalıştırma kullanıcı arabiriminde oluşturmak için kullanılan MLflow Çalıştırması'nı açan bir Kaynak Çalıştırma bağlantısı da sağlar. MLflow Çalıştırma kullanıcı arabiriminden Kaynak not defteri bağlantısına erişerek modeli eğitmek için kullanılan Azure Databricks not defterinin anlık görüntüsünü görüntüleyebilirsiniz.

Kaynak çalıştırma

Kaynak not defteri

MLflow Model Kayıt Defteri'ne dönmek için kenar çubuğundaKi Modeller'e tıklayın Modeller Simgesine .

Sonuçta elde edilen MLflow Model Kayıt Defteri giriş sayfasında, sürümleri ve aşamaları dahil olmak üzere Azure Databricks çalışma alanınızdaki tüm kayıtlı modellerin listesi görüntülenir.

Tahmin modelinin tüm sürümlerini görüntüleyen kayıtlı model sayfasını açmak için power-forecasting-model bağlantısına tıklayın.

Model açıklamaları ekleme

Kayıtlı modellere ve model sürümlerine açıklama ekleyebilirsiniz. Kayıtlı model açıklamaları, birden çok model sürümü için geçerli olan bilgileri kaydetmek için kullanışlıdır (örneğin, modelleme sorununa ve veri kümesine genel bir genel bakış). Model sürümü açıklamaları, belirli bir model sürümünün benzersiz özniteliklerini (örneğin, modeli geliştirmek için kullanılan metodoloji ve algoritma) ayrıntılı olarak tanımlamak için kullanışlıdır.

  1. Kayıtlı güç tahmini modeline üst düzey bir açıklama ekleyin. Simgeye Düzenle Simgesi tıklayın ve aşağıdaki açıklamayı girin:

    This model forecasts the power output of a wind farm based on weather data. The weather data consists of three features: wind speed, wind direction, and air temperature.
    

    Model açıklaması ekleme

  2. Kaydet'e tıklayın.

  3. Model sürümü sayfasına dönmek için kayıtlı model sayfasında Sürüm 1 bağlantısına tıklayın.

  4. Simgeye Düzenle Simgesi tıklayın ve aşağıdaki açıklamayı girin:

    This model version was built using TensorFlow Keras. It is a feed-forward neural network with one hidden layer.
    

    Model sürümü açıklaması ekleme

  5. Kaydet'e tıklayın.

Model sürümünü geçiş

MLflow Model Kayıt Defteri çeşitli model aşamalarını tanımlar: Yok, Hazırlama, Üretim ve Archived. Her aşamanın benzersiz bir anlamı vardır. Örneğin, Hazırlama model testi için, Üretim ise test veya gözden geçirme işlemlerini tamamlamış ve uygulamalara dağıtılmış modeller içindir.

  1. Kullanılabilir model aşamalarının listesini ve kullanılabilir aşama geçiş seçeneklerinizi görüntülemek için Aşama düğmesine tıklayın.

  2. Geçiş - Üretim'i seçin ve aşama geçişi onay penceresinde Tamam'a basarak modeli Üretim'e geçirin.>

    Üretime geçiş

    Model sürümü Üretim'e geçirildikten sonra geçerli aşama kullanıcı arabiriminde görüntülenir ve geçişi yansıtmak için etkinlik günlüğüne bir giriş eklenir.

    Üretim aşaması

    Model sürümü etkinliği

MLflow Model Kayıt Defteri, birden çok model sürümünün aynı aşamayı paylaşmasına olanak tanır. Model Kayıt Defteri, bir modele aşamaya göre başvururken en son model sürümünü (en büyük sürüm kimliğine sahip model sürümü) kullanır. Kayıtlı model sayfasında belirli bir modelin tüm sürümleri görüntülenir.

Kayıtlı model sayfası

MLflow API'sini kullanarak modeli kaydetme ve yönetme

Bu bölümde:

Modelin adını program aracılığıyla tanımlama

Artık model kaydedilip Üretim'e geçirildiğine göre, MLflow programlı API'lerini kullanarak modele başvurabilirsiniz. Kayıtlı modelin adını aşağıdaki gibi tanımlayın:

model_name = "power-forecasting-model"

Modeli kaydedin

model_name = get_model_name()

import mlflow

# The default path where the MLflow autologging function stores the TensorFlow Keras model
artifact_path = "model"
model_uri = "runs:/{run_id}/{artifact_path}".format(run_id=run_id, artifact_path=artifact_path)

model_details = mlflow.register_model(model_uri=model_uri, name=model_name)

import time
from mlflow.tracking.client import MlflowClient
from mlflow.entities.model_registry.model_version_status import ModelVersionStatus

# Wait until the model is ready
def wait_until_ready(model_name, model_version):
  client = MlflowClient()
  for _ in range(10):
    model_version_details = client.get_model_version(
      name=model_name,
      version=model_version,
    )
    status = ModelVersionStatus.from_string(model_version_details.status)
    print("Model status: %s" % ModelVersionStatus.to_string(status))
    if status == ModelVersionStatus.READY:
      break
    time.sleep(1)

wait_until_ready(model_details.name, model_details.version)

API kullanarak model ve model sürümü açıklamaları ekleme

from mlflow.tracking.client import MlflowClient

client = MlflowClient()
client.update_registered_model(
  name=model_details.name,
  description="This model forecasts the power output of a wind farm based on weather data. The weather data consists of three features: wind speed, wind direction, and air temperature."
)

client.update_model_version(
  name=model_details.name,
  version=model_details.version,
  description="This model version was built using TensorFlow Keras. It is a feed-forward neural network with one hidden layer."
)

API'yi kullanarak model sürümüne geçiş yapın ve ayrıntıları alın

client.transition_model_version_stage(
  name=model_details.name,
  version=model_details.version,
  stage='production',
)
model_version_details = client.get_model_version(
  name=model_details.name,
  version=model_details.version,
)
print("The current model stage is: '{stage}'".format(stage=model_version_details.current_stage))

latest_version_info = client.get_latest_versions(model_name, stages=["production"])
latest_production_version = latest_version_info[0].version
print("The latest production version of the model '%s' is '%s'." % (model_name, latest_production_version))

API kullanarak kayıtlı modelin sürümlerini yükleme

MLflow Modelleri bileşeni, çeşitli makine öğrenmesi çerçevelerinden modelleri yüklemeye yönelik işlevleri tanımlar. Örneğin, mlflow.tensorflow.load_model() MLflow biçiminde kaydedilmiş TensorFlow modellerini yüklemek için kullanılır ve mlflow.sklearn.load_model() MLflow biçiminde kaydedilmiş scikit-learn modellerini yüklemek için kullanılır.

Bu işlevler MLflow Model Kayıt Defteri'nden modelleri yükleyebilir.

import mlflow.pyfunc

model_version_uri = "models:/{model_name}/1".format(model_name=model_name)

print("Loading registered model version from URI: '{model_uri}'".format(model_uri=model_version_uri))
model_version_1 = mlflow.pyfunc.load_model(model_version_uri)

model_production_uri = "models:/{model_name}/production".format(model_name=model_name)

print("Loading registered model version from URI: '{model_uri}'".format(model_uri=model_production_uri))
model_production = mlflow.pyfunc.load_model(model_production_uri)

Üretim modeliyle güç çıkışını tahmin etme

Bu bölümde üretim modeli rüzgar grubu için hava durumu tahmin verilerini değerlendirmek için kullanılır. Uygulama, forecast_power() tahmin modelinin en son sürümünü belirtilen aşamadan yükler ve sonraki beş gün içinde güç üretimini tahmin etmek için kullanır.

def plot(model_name, model_stage, model_version, power_predictions, past_power_output):
  import pandas as pd
  import matplotlib.dates as mdates
  from matplotlib import pyplot as plt
  index = power_predictions.index
  fig = plt.figure(figsize=(11, 7))
  ax = fig.add_subplot(111)
  ax.set_xlabel("Date", size=20, labelpad=20)
  ax.set_ylabel("Power\noutput\n(MW)", size=20, labelpad=60, rotation=0)
  ax.tick_params(axis='both', which='major', labelsize=17)
  ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))
  ax.plot(index[:len(past_power_output)], past_power_output, label="True", color="red", alpha=0.5, linewidth=4)
  ax.plot(index, power_predictions.squeeze(), "--", label="Predicted by '%s'\nin stage '%s' (Version %d)" % (model_name, model_stage, model_version), color="blue", linewidth=3)
  ax.set_ylim(ymin=0, ymax=max(3500, int(max(power_predictions.values) * 1.3)))
  ax.legend(fontsize=14)
  plt.title("Wind farm power output and projections", size=24, pad=20)
  plt.tight_layout()
  display(plt.show())

def forecast_power(model_name, model_stage):
  from mlflow.tracking.client import MlflowClient
  client = MlflowClient()
  model_version = client.get_latest_versions(model_name, stages=[model_stage])[0].version
  model_uri = "models:/{model_name}/{model_stage}".format(model_name=model_name, model_stage=model_stage)
  model = mlflow.pyfunc.load_model(model_uri)
  weather_data, past_power_output = get_weather_and_forecast()
  power_predictions = pd.DataFrame(model.predict(weather_data))
  power_predictions.index = pd.to_datetime(weather_data.index)
  print(power_predictions)
  plot(model_name, model_stage, int(model_version), power_predictions, past_power_output)

Yeni model sürümü oluşturma

Klasik makine öğrenmesi teknikleri, güç tahmini için de etkilidir. Aşağıdaki kod, scikit-learn kullanarak rastgele bir orman modelini eğiter ve işlevi aracılığıyla MLflow Model Kayıt Defteri'ne mlflow.sklearn.log_model() kaydeder.

import mlflow.sklearn
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

with mlflow.start_run():
  n_estimators = 300
  mlflow.log_param("n_estimators", n_estimators)

  rand_forest = RandomForestRegressor(n_estimators=n_estimators)
  rand_forest.fit(X_train, y_train)

  val_x, val_y = get_validation_data()
  mse = mean_squared_error(rand_forest.predict(val_x), val_y)
  print("Validation MSE: %d" % mse)
  mlflow.log_metric("mse", mse)

  # Specify the `registered_model_name` parameter of the `mlflow.sklearn.log_model()`
  # function to register the model with the MLflow Model Registry. This automatically
  # creates a new model version
  mlflow.sklearn.log_model(
    sk_model=rand_forest,
    artifact_path="sklearn-model",
    registered_model_name=model_name,
  )
from mlflow.tracking.client import MlflowClient
client = MlflowClient()

model_version_infos = client.search_model_versions("name = '%s'" % model_name)
new_model_version = max([model_version_info.version for model_version_info in model_version_infos])

wait_until_ready(model_name, new_model_version)

Yeni model sürümüne açıklama ekleme

client.update_model_version(
  name=model_name,
  version=new_model_version,
  description="This model version is a random forest containing 100 decision trees that was trained in scikit-learn."
)

Yeni model sürümünü Hazırlama'ya geçiş ve modeli test etme

Bir modeli üretim uygulamasına dağıtmadan önce, genellikle bir hazırlama ortamında test etmek en iyi yöntemdir. Aşağıdaki kod, yeni model sürümünü Hazırlama'ya geçirerek performansını değerlendirir.

client.transition_model_version_stage(
  name=model_name,
  version=new_model_version,
  stage="Staging",
)

forecast_power(model_name, "Staging")

Yeni model sürümünü Üretim'e dağıtma

Yeni model sürümünün hazırlamada iyi performans sergilediğini doğruladıktan sonra, aşağıdaki kod modeli Üretim'e geçirerek güç tahmini oluşturmak için Üretim modeliyle güç çıkışı tahmini bölümünden tam olarak aynı uygulama kodunu kullanır.

client.transition_model_version_stage(
  name=model_name,
  version=new_model_version,
  stage="production",
)

forecast_power(model_name, "production")

Üretim aşamasında tahmin modelinin iki model sürümü vardır: Keras modelinde eğitilen model sürümü ve scikit-learn'de eğitilen sürüm.

Ürün modeli sürümleri

Not

Bir modele aşamaya göre başvururken, MLflow Model Model Kayıt Defteri otomatik olarak en son üretim sürümünü kullanır. Bu, herhangi bir uygulama kodunu değiştirmeden üretim modellerinizi güncelleştirmenizi sağlar.

Modelleri arşivle ve sil

Model sürümü artık kullanılmadığında, modeli arşivleyebilir veya silebilirsiniz. Kayıtlı modelin tamamını da silebilirsiniz; bu, ilişkili tüm model sürümlerini kaldırır.

Version 1 Güç tahmini modelini arşivleme

Artık kullanılmadığından güç tahmini modelinin arşivlenmesi Version 1 . Modelleri MLflow Model Kayıt Defteri kullanıcı arabiriminde veya MLflow API'sini kullanarak arşivleyebilirsiniz.

MLflow kullanıcı arabiriminde arşivle Version 1

Güç tahmini modelini arşivleme Version 1 :

  1. MLflow Model Kayıt Defteri kullanıcı arabiriminde ilgili model sürümü sayfasını açın:

    Arşivlenene geçiş

  2. Aşama düğmesine tıklayın, Geçiş -> Arşivlenmiş'i seçin:

    Arşivlenen aşama

  3. Aşama geçişi onay penceresinde Tamam'a basın.

    Arşivlenen model sürümü

MLflow API'sini kullanarak arşivle Version 1

Aşağıdaki kod, MlflowClient.update_model_version() güç tahmini modelini arşivleme Version 1 işlevini kullanır.

from mlflow.tracking.client import MlflowClient

client = MlflowClient()
client.transition_model_version_stage(
  name=model_name,
  version=1,
  stage="Archived",
)

Güç tahmini modelini silme Version 1

Model sürümlerini silmek için MLflow kullanıcı arabirimini veya MLflow API'sini de kullanabilirsiniz.

Uyarı

Model sürümü silme kalıcıdır ve geri alınamaz.

MLflow kullanıcı arabiriminde silme Version 1

Güç tahmini modelini silmek Version 1 için:

  1. MLflow Model Kayıt Defteri kullanıcı arabiriminde ilgili model sürümü sayfasını açın.

    Model sürümünü silme

  2. Sürüm tanımlayıcısının yanındaki açılan oku seçin ve Sil'e tıklayın.

MLflow API'sini kullanarak silme Version 1
client.delete_model_version(
   name=model_name,
   version=1,
)
MLflow API'sini kullanarak modeli silme

Önce kalan tüm model sürümü aşamalarını Yok veya Arşivlenmiş olarak geçirmeniz gerekir.

from mlflow.tracking.client import MlflowClient

client = MlflowClient()
client.transition_model_version_stage(
  name=model_name,
  version=2,
  stage="Archived",
)
client.delete_registered_model(name=model_name)

Not Defteri

MLflow Model Kayıt Defteri örnek not defteri

Not defterini alma