MLflow Günlüğe Kaydedilmiş Modelleri kullanarak modelleri izleyin ve karşılaştırın

MLflow Günlüğe Kaydedilen Modeller, bir modelin yaşam döngüsü boyunca ilerleme durumunu izlemenize yardımcı olur. Modeli eğitirken, benzersiz bir kimlikle tüm kritik bilgilerini birbirine bağlayan bir mlflow.<model-flavor>.log_model() oluşturmak için LoggedModel kullanın. 'nin gücünden LoggedModelsyararlanmak için MLflow 3 kullanmaya başlayın.

GenAI uygulamaları için git LoggedModels işlemelerini veya parametre kümelerini izlemelere ve ölçümlere bağlanabilecek ayrılmış nesneler olarak yakalamak için oluşturulabilir. Derin öğrenme ve klasik ML'de, MLflow çalıştırmalarından üretilen LoggedModels mevcut MLflow kavramlarıdır ve model kodunu yürüten görevler olarak düşünülebilir. Eğitim çalıştırmaları modelleri çıkış olarak üretir ve değerlendirme çalıştırmaları, bir modelin performansını değerlendirmek için kullanabileceğiniz ölçümleri ve diğer bilgileri üretmek için giriş olarak mevcut modelleri kullanır.

LoggedModel Nesnesi modelin yaşam döngüsü boyunca farklı ortamlarda kalır ve meta veriler, ölçümler, parametreler ve modeli oluşturmak için kullanılan kod gibi yapıtlara bağlantılar içerir. Günlüğe Kaydedilen Model izleme, modelleri birbiriyle karşılaştırmanıza, en yüksek performanslı modeli bulmanıza ve hata ayıklama sırasında bilgileri izlemenize olanak tanır.

Kaydedilen Modeller, Unity Catalog model siciline de kaydedilebilir ve model hakkında tüm MLflow denemeleri ve çalışma alanlarından gelen bilgiler tek bir konumda bulunabilir. Diğer ayrıntılar için bkz. MLflow 3 ile Model Kayıt Defteri geliştirmeleri.

Yapay zeka, derin öğrenme ve geleneksel ML için model izleme akışı.

Yapay zeka ve derin öğrenme modelleri için geliştirilmiş izleme

Üretken yapay zeka ve derin öğrenme iş akışları özellikle Günlüğe Kaydedilen Modellerin sağladığı ayrıntılı izlemeden yararlanıyor.

Gen AI - birleşik değerlendirme ve izleme verileri:

  • Gen AI modelleri değerlendirme ve dağıtım sırasında gözden geçirme geri bildirim verileri ve izlemeleri gibi ek ölçümler oluşturur.
  • Varlık, LoggedModel bir model tarafından oluşturulan tüm bilgileri tek bir arabirim kullanarak sorgulamanıza olanak tanır.

Derin öğrenme - verimli denetim noktası yönetimi:

  • Derin öğrenme eğitimi, modelin eğitim sırasında belirli bir noktadaki durumunun anlık görüntüleri olan birden çok denetim noktası oluşturur.
  • MLflow, modelin ölçümlerini ve performans verilerini içeren her denetim noktası için ayrı LoggedModel bir değer oluşturur. Bu, en iyi performansa sahip modelleri verimli bir şekilde tanımlamak için denetim noktalarını karşılaştırmanıza ve değerlendirmenize olanak tanır.

Loglanmış Model Oluşturma

Günlüğe Kaydedilen Model oluşturmak için mevcut MLflow iş yükleriyle aynı log_model() API'yi kullanın. Aşağıdaki kod parçacıkları jeneratif yapay zeka, derin öğrenme ve geleneksel ML iş akışları için Kayıtlı Modelin nasıl oluşturulacağını göstermektedir.

Tam, çalıştırılabilir not defteri örnekleri için bkz. Örnek not defterleri.

Gen AI

Aşağıdaki kod parçacığı, LangChain aracısının nasıl günlüğe kaydedildiğini gösteriyor. log_model() yöntemi, kullandığınız türdeki ajan için kullanın.

# Log the chain with MLflow, specifying its parameters
# As a new feature, the LoggedModel entity is linked to its name and params
model_info = mlflow.langchain.log_model(
  lc_model=chain,
  name="basic_chain",
  params={
    "temperature": 0.1,
    "max_tokens": 2000,
    "prompt_template": str(prompt)
  },
  model_type="agent",
  input_example={"messages": "What is MLflow?"},
)

# Inspect the LoggedModel and its properties
logged_model = mlflow.get_logged_model(model_info.model_id)
print(logged_model.model_id, logged_model.params)

Bir değerlendirme işi başlatın ve benzersiz model_id sağlayarak ölçümleri Günlük Modele LoggedModel bağlayın.

# Start a run to represent the evaluation job
with mlflow.start_run() as evaluation_run:
  eval_dataset: mlflow.entities.Dataset = mlflow.data.from_pandas(
    df=eval_df,
    name="eval_dataset",
  )
  # Run the agent evaluation
  result = mlflow.evaluate(
    model=f"models:/{logged_model.model_id}",
    data=eval_dataset,
    model_type="databricks-agent"
  )
  # Log evaluation metrics and associate with agent
  mlflow.log_metrics(
    metrics=result.metrics,
    dataset=eval_dataset,
    # Specify the ID of the agent logged above
    model_id=logged_model.model_id
  )

Derin öğrenme

Aşağıdaki kod parçacığı, derin öğrenme eğitim sürecinde Kayıtlı Modellerin nasıl oluşturulacağını göstermektedir. MLflow modelinizin çeşidi için log_model() yöntemini kullanın.

# Start a run to represent the training job
with mlflow.start_run():
  # Load the training dataset with MLflow. We will link training metrics to this dataset.
  train_dataset: Dataset = mlflow.data.from_pandas(train_df, name="train")
  X_train, y_train = prepare_data(train_dataset.df)

  criterion = nn.CrossEntropyLoss()
  optimizer = torch.optim.Adam(scripted_model.parameters(), lr=0.01)

  for epoch in range(101):
      X_train, y_train = X_train.to(device), y_train.to(device)
      out = scripted_model(X_train)
      loss = criterion(out, y_train)
      optimizer.zero_grad()
      loss.backward()
      optimizer.step()

      # Obtain input and output examples for MLflow Model signature creation
      with torch.no_grad():
          input_example = X_train[:1]
          output_example = scripted_model(input_example)

      # Log a checkpoint with metrics every 10 epochs
      if epoch % 10 == 0:
          # Each newly created LoggedModel checkpoint is linked with its
          # name, params, and step
          model_info = mlflow.pytorch.log_model(
              pytorch_model=scripted_model,
              name=f"torch-iris-{epoch}",
              params={
                  "n_layers": 3,
                  "activation": "ReLU",
                  "criterion": "CrossEntropyLoss",
                  "optimizer": "Adam"
              },
              step=epoch,
              signature=mlflow.models.infer_signature(
                  model_input=input_example.cpu().numpy(),
                  model_output=output_example.cpu().numpy(),
              ),
              input_example=X_train.cpu().numpy(),
          )
          # Log metric on training dataset at step and link to LoggedModel
          mlflow.log_metric(
              key="accuracy",
              value=compute_accuracy(scripted_model, X_train, y_train),
              step=epoch,
              model_id=model_info.model_id,
              dataset=train_dataset
          )

Geleneksel ML

Aşağıdaki kod parçacığı, bir sklearn modelini günlüklemeyi ve ölçümleri Logged Model öğesine bağlamayı gösterir. MLflow modelinizin çeşidi için log_model() yöntemini kullanın.

## Log the model
model_info = mlflow.sklearn.log_model(
  sk_model=lr,
  name="elasticnet",
  params={
    "alpha": 0.5,
    "l1_ratio": 0.5,
  },
  input_example = train_x
)

# Inspect the LoggedModel and its properties
logged_model = mlflow.get_logged_model(model_info.model_id)
print(logged_model.model_id, logged_model.params)

# Evaluate the model on the training dataset and log metrics
# These metrics are now linked to the LoggedModel entity
predictions = lr.predict(train_x)
(rmse, mae, r2) = compute_metrics(train_y, predictions)
mlflow.log_metrics(
  metrics={
    "rmse": rmse,
    "r2": r2,
    "mae": mae,
  },
  model_id=logged_model.model_id,
  dataset=train_dataset
)

Örnek not defterleri

Örneğin, LoggedModels kullanımını gösteren not defterlerini görmek için aşağıdaki sayfalara bakabilirsiniz.

Modelleri görüntüleme ve ilerleme durumunu izleme

Günlüğe Kaydedilen Modellerinizi çalışma alanı kullanıcı arabiriminde görüntüleyebilirsiniz:

  1. Çalışma alanınızdaki Denemeler sekmesine gidin.
  2. Bir deneme seçin. Ardından Modeller sekmesini seçin.

Bu sayfa, deneyle ilişkilendirilen tüm Günlüğe Kaydedilen Modelleri ve bunların ölçümlerini, parametrelerini ve nesnelerini içerir.

Model izleme arayüzü.

Çalıştırmalar arasında ölçümleri izlemek için grafikler oluşturabilirsiniz.

Model izleme arayüzü ölçüm grafikleri.

Günlüğe Kaydedilen Modelleri Arama ve Filtreleme

Modeller sekmesinden Günlüğe Kaydedilen Modelleri özniteliklerine, parametrelerine, etiketlerine ve ölçümlerine göre arayabilir ve filtreleyebilirsiniz.

Model izleme arayüzü günlüğe kaydedilmiş modelleri arar.

Ölçümleri veri kümesine özgü performansa göre filtreleyebilirsiniz ve yalnızca belirli veri kümelerinde eşleşen ölçüm değerlerine sahip modeller döndürülür. Veri kümesi filtreleri herhangi bir ölçüm filtresi olmadan sağlanırsa, bu veri kümelerindeki ölçümlere sahip modeller döndürülür.

Aşağıdaki özniteliklere göre filtreleyebilirsiniz:

  • model_id
  • model_name
  • status
  • artifact_uri
  • creation_time (sayısal)
  • last_updated_time (sayısal)

Dize benzeri öznitelikleri, parametreleri ve etiketleri aramak ve filtrelemek için aşağıdaki işleçleri kullanın:

  • =, !=, IN, NOT IN

Sayısal öznitelikleri ve ölçümleri aramak ve filtrelemek için aşağıdaki karşılaştırma işleçlerini kullanın:

  • =, !=, >, , <, >=, <=

Programatik Olarak Kaydedilen Modelleri Arama

MLflow API'sini kullanarak Günlüğe Kaydedilen Modeller için arama yapabilirsiniz:

## Get a Logged Model using a model_id
mlflow.get_logged_model(model_id = <my-model-id>)

## Get all Logged Models that you have access to
mlflow.search_logged_models()

## Get all Logged Models with a specific name
mlflow.search_logged_models(
  filter_string = "model_name = <my-model-name>"
)

## Get all Logged Models created within a certain time range
mlflow.search_logged_models(
  filter_string = "creation_time >= <creation_time_start> AND creation_time <= <creation_time_end>"
)

## Get all Logged Models with a specific param value
mlflow.search_logged_models(
  filter_string = "params.<param_name> = <param_value_1>"
)

## Get all Logged Models with specific tag values
mlflow.search_logged_models(
  filter_string = "tags.<tag_name> IN (<tag_value_1>, <tag_value_2>)"
)

## Get all Logged Models greater than a specific metric value on a dataset, then order by that metric value
mlflow.search_logged_models(
  filter_string = "metrics.<metric_name> >= <metric_value>",
  datasets = [
    {"dataset_name": <dataset_name>, "dataset_digest": <dataset_digest>}
  ],
  order_by = [
    {"field_name": metrics.<metric_name>, "dataset_name": <dataset_name>,"dataset_digest": <dataset_digest>}
  ]
)

Daha fazla bilgi ve ek arama parametreleri için MLflow 3 API belgelerine bakın.

Model giriş ve çıkışlarına göre arama sonuçları

Model Kimliği ile çalıştırmaları arayıp Kaydedilmiş Model'i giriş veya çıkış olarak içeren tüm çalıştırmaları döndürebilirsiniz. Filtre dizesi sözdizimi hakkında daha fazla bilgi için bkz. Çalıştırmalar için filtreleme.

Model izleme kullanıcı arabirimi, günlüğe kaydedilen modelleri model kimliğine göre arar.

MLflow API'sini kullanarak deneyleri arayabilirsiniz.

## Get all Runs with a particular model as an input or output by model id
mlflow.search_runs(filter_string = "models.model_id = <my-model-id>")

Sonraki Adımlar

MLflow 3'ün diğer yeni özellikleri hakkında daha fazla bilgi edinmek için aşağıdaki makalelere bakın: