Поделиться через


Отслеживание и сравнение моделей с помощью зарегистрированных моделей MLflow

Модели MLflow Logged помогают отслеживать ход выполнения модели на протяжении всего жизненного цикла. При обучении модели используйте mlflow.<model-flavor>.log_model() для создания LoggedModel связи всей критически важной информации с помощью уникального идентификатора. Чтобы использовать возможности LoggedModels, начните работу с MLflow 3.

Для приложений GenAI LoggedModels можно создать для фиксации фиксаций Git или наборов параметров как отдельные объекты, которые затем могут быть связаны с трассировками и метриками. В глубоком обучении и классическом машинном обучении LoggedModels создаются из запусков MLflow, которые являются существующими концепциями в MLflow и могут рассматриваться как задания, которые выполняют код модели. Учебные запуски создают модели в качестве выходных данных, а запуски оценки используют существующие модели в качестве входных данных для создания метрик и других сведений, которые можно использовать для оценки производительности модели.

Объект LoggedModel сохраняется в течение жизненного цикла модели в разных средах и содержит ссылки на артефакты, такие как метаданные, метрики, параметры и код, используемый для создания модели. Логирование модели позволяет сравнивать модели друг с другом, находить наиболее эффективную модель и следить за информацией при отладке.

Сохраненные модели также можно зарегистрировать в реестре моделей каталога Unity, что позволяет сведения о модели из всех экспериментов MLflow и рабочих областей быть доступными в одном месте. Дополнительные сведения см. в разделе "Усовершенствования реестра моделей" с помощью MLflow 3.

Процесс отслеживания моделей для генеративного ИИ, глубокого обучения и традиционного машинного обучения.

Улучшено отслеживание моделей генеративного искусственного интеллекта и глубокого обучения.

Рабочие процессы генеративного ИИ и глубокого обучения особенно выигрывают от детализированного отслеживания, которое предоставляют модели с ведением логов.

Gen AI — унифицированные данные оценки и трассировки:

  • Генеративные модели ИИ создают дополнительные метрики во время оценки и развертывания, такие как данные отзывов рецензентов и треки.
  • Сущность LoggedModel позволяет запрашивать все сведения, созданные моделью с помощью одного интерфейса.

Глубокое обучение — эффективное управление контрольными точками:

  • Обучение глубоким обучением создает множество контрольных точек, которые представляют собой снимки состояния модели в определенный момент во время обучения.
  • MLflow создает отдельную LoggedModel для каждой контрольной точки, содержащую метрики модели и данные о производительности. Это позволяет сравнивать и оценивать контрольные точки для эффективного определения наиболее эффективных моделей.

Создание модели, зарегистрированной в журнале

Чтобы создать модель с журналом, используйте тот же log_model() API, что и существующие рабочие нагрузки MLflow. В следующих фрагментах кода показано, как создать зарегистрированную модель для генеративного ИИ, глубокого обучения и традиционных рабочих процессов машинного обучения.

Полные примеры запускаемых записных книжек см. в разделе "Примеры записных книжек".

Генеративный ИИ

В следующем фрагменте кода показано, как регистрировать агент LangChain. Используйте метод log_model() для вашего варианта агента.

# 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)

Запустите задание оценки и свяжите метрики с зарегистрированной моделью, предоставив уникальный идентификатор model_id для LoggedModel.

# 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
  )

Глубокое обучение

В следующем фрагменте кода показано, как создавать логируемые модели во время обучения нейронных сетей. Используйте метод log_model() для вашей версии модели MLflow.

# 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()

    # 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,
        input_example=X_train.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
      )

Традиционное машинное обучение

В следующем фрагменте кода показано, как регистрировать модель sklearn и связывать метрики с данными Logged Model. Используйте метод log_model() для вашей версии модели MLflow.

## 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
)

Примеры записных книжек

Примеры записных книжек, которые иллюстрируют использование LoggedModels, см. на следующих страницах:

Просмотр моделей и отслеживание хода выполнения

Вы можете просмотреть зарегистрированные модели в пользовательском интерфейсе рабочей области:

  1. Перейдите на вкладку "Эксперименты" в рабочей области.
  2. Выберите эксперимент. Затем выберите вкладку "Модели".

Эта страница содержит все записанные модели, связанные с экспериментом, а также их метрики, параметры и артефакты.

Пользовательский интерфейс отслеживания моделей.

Вы можете создавать диаграммы для отслеживания метрик в разных запусках.

Диаграммы метрик пользовательского интерфейса отслеживания моделей.

Поиск и фильтрация зарегистрированных моделей

На вкладке "Модели" можно выполнять поиск и фильтрацию "Зарегистрированные модели" на основе их атрибутов, параметров, тегов и метрик.

Пользовательский интерфейс для отслеживания моделей фиксирует модели, найденные в поиске.

Метрики можно фильтровать на основе производительности конкретного набора данных, а возвращаются только модели с соответствующими значениями метрик для заданных наборов данных. Если фильтры наборов данных предоставляются без фильтров метрик, возвращаются модели с любыми метриками этих наборов данных.

Вы можете фильтровать на основе следующих атрибутов:

  • model_id
  • model_name
  • status
  • artifact_uri
  • creation_time (числовой)
  • last_updated_time (числовой)

Используйте следующие операторы для поиска и фильтрации строковых атрибутов, параметров и тегов:

  • =, !=, IN, NOT IN

Используйте следующие операторы сравнения для поиска и фильтрации числовых атрибутов и метрик.

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

Поиск зарегистрированных моделей программным способом

Вы можете искать модели, зарегистрированные в журнале, с помощью API MLflow:

## 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>}
  ]
)

Дополнительные сведения и дополнительные параметры поиска см. в документации по API MLflow 3.

Поиск выполняется по входным и выходным данным модели

Вы можете выполнять поиск по идентификатору модели, чтобы вернуть все запуски, имеющие модель ведения журнала в качестве входных или выходных данных. Для получения дополнительной информации о синтаксисе строки фильтров см. раздел "Фильтрация запусков".

Пользовательский интерфейс для отслеживания моделей фиксирует модели, найденные в поиске.

Вы можете искать запуски с помощью API MLflow:

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

Дальнейшие шаги

Дополнительные сведения о других новых возможностях MLflow 3 см. в следующих статьях: