Управление реестрами моделей в Машинном обучении Azure с помощью MLflow

Машинное обучение Azure поддерживает MLflow для управления моделями при подключении к рабочей области. Такой подход представляет собой удобный способ поддержки всего жизненного цикла модели для пользователей, знакомых с клиентом MLFlow. В следующей статье описываются различные возможности и их сравнение с другими вариантами.

Необходимые компоненты

  • Установите пакет mlflow SDK MLflow и подключаемый модуль Машинное обучение Azure для MLflowazureml-mlflow.

    pip install mlflow azureml-mlflow
    

    Совет

    Вы можете использовать mlflow-skinny пакет, который является упрощенным пакетом MLflow без хранилища SQL, сервера, пользовательского интерфейса или зависимостей для обработки и анализа данных. mlflow-skinny рекомендуется для пользователей, которым в первую очередь нужны возможности отслеживания и ведения журнала MLflow, не импортируя полный набор функций, включая развертывания.

  • Рабочая область Машинного обучения Azure. Вы можете создать его, следуя руководству по созданию ресурсов машинного обучения.

  • Если вы выполняете удаленное отслеживание (то есть выполняется отслеживание экспериментов, выполняемых вне Машинное обучение Azure), настройте MLflow для указания URI отслеживания рабочей области Машинное обучение Azure. Дополнительные сведения о подключении MLflow к рабочей области см. в разделе "Настройка MLflow" для Машинное обучение Azure.

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

  • Некоторые операции могут выполняться непосредственно с помощью API потока MLflow (mlflow.<method>). Однако другим пользователям может потребоваться создать клиент MLflow, который позволяет взаимодействовать с Машинное обучение Azure в протоколе MLflow. Вы можете создать MlflowClient объект следующим образом. В этом руководстве объект client используется для ссылки на такой клиент MLflow.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Регистрация новых моделей в реестре

Реестр моделей предлагает удобный и централизованный способ управления моделями в рабочей области. Каждая рабочая область имеет собственный независимый реестр моделей. В следующем разделе объясняется несколько способов регистрации моделей в реестре с помощью пакета SDK MLflow.

Создание моделей из существующего запуска

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

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

Примечание.

Модели можно регистрировать только в реестре в той же рабочей области, где выполнялось отслеживание. Операции между рабочими областями не поддерживаются сейчас в Машинном обучении Azure.

Совет

Рекомендуется зарегистрировать модели из запусков или использовать метод mlflow.<flavor>.log_model внутри запуска, так как он сохраняет происхождение от задания, создающего ресурс.

Создание моделей на основе ресурсов

Если у вас есть папка с моделью MLflow MLModel, ее можно зарегистрировать напрямую. Модель не должна постоянно находиться в контексте запуска. Для этого можно зарегистрировать модели MLflow, хранящиеся в локальной файловой системе, с использованием схемы URI file://path/to/model. Давайте создадим простую модель с помощью Scikit-Learn и сохраним ее в формате MLflow в локальном хранилище:

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

Совет

Метод save_model() работает так же, как и log_model(). Хотя log_model() сохраняет модель внутри при активном выполнении, save_model() использует локальную файловую систему для сохранения модели.

Теперь модель можно зарегистрировать по локальному пути:

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

Запрашивание реестров моделей

Пакет SDK MLflow можно использовать для запроса и поиска моделей, зарегистрированных в реестре. В следующем разделе объясняется несколько способов его достижения.

Отправка запросов ко всем моделям в реестре

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

for model in client.search_registered_models():
    print(f"{model.name}")

Используется order_by для упорядочивания определенным свойством, например name, versioncreation_timestampи last_updated_timestamp:

client.search_registered_models(order_by=["name ASC"])

Примечание.

Рекомендации MLflow 2.0. В более ранних версиях Mlflow (<2.0) используйте метод MlflowClient.list_registered_models() .

Получение определенных версий модели

Команда search_registered_models() извлекает объект модели, содержащий все версии модели. Однако если вы хотите получить последнюю зарегистрированную версию заданной модели, можно использовать метод get_registered_model:

client.get_registered_model(model_name)

Если требуется определенная версия модели, можно указать следующее:

client.get_model_version(model_name, version=2)

Загрузка моделей из реестра

Вы можете загрузить модели непосредственно из реестра, чтобы восстановить объекты моделей, которые были зарегистрированы. Используйте функции mlflow.<flavor>.load_model() или mlflow.pyfunc.load_model(), указав универсальный код ресурса (URI) модели, которую вы хотите загрузить, с помощью следующего синтаксиса:

  • models:/<model-name>/latest, чтобы загрузить последнюю версию модели.
  • models:/<model-name>/<version-number>, чтобы загрузить определенную версию модели.
  • models:/<model-name>/<stage-name>, чтобы загрузить определенную версию на указанном этапе для модели. См. статью Этапов модели.

Совет

Сведения о различиях между mlflow.<flavor>.load_model() и mlflow.pyfunc.load_model()рабочими процессами для загрузки моделей MLflow.

Этапы модели

MLflow поддерживает этапы модели для управления жизненным циклом модели. Версия модели может переходить с одного этапа на другой. Этапы назначаются версии модели (вместо моделей), что означает, что одна модель может иметь несколько версий на различных этапах.

Важно!

Доступ к этапам можно получить только с помощью пакета SDK MLflow. Они не отображаются на портале Студии машинного обучения Azure и не могут быть получены с помощью пакета SDK для Azure ML, Azure ML CLI и REST API для Azure ML. Создание развертывания для этапа заданной модели сейчас не поддерживается.

Отправка запросов к этапам модели

Клиент MLflow можно использовать для проверки всех возможных состояний модели:

client.get_model_version_stages(model_name, version="latest")

Вы можете узнать, какая версия модели находится на каждом этапе, получив модель из реестра. В следующем примере возвращается версия модели, используемая на этапе Staging в данный момент.

client.get_latest_versions(model_name, stages=["Staging"])

Примечание.

В MLflow на одном этапе может одновременно находиться несколько версий, однако этот метод будет возвращать последнюю (наибольшую) версию из этих версий.

Предупреждение

Имена стадий задаются с учетом регистра.

Перенос моделей

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

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

По умолчанию, если в этом конкретном этапе существовала версия модели, она остается там. Таким образом, он не заменяется, так как версии нескольких моделей могут находиться на одном этапе одновременно. Кроме того, можно указать archive_existing_versions=True, чтобы MLflow переместил версию существующей модели на этап Archived.

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

Загрузка моделей из этапов

Вы можете загружать модели на определенном этапе непосредственно из Python, используя функцию load_model и следующий формат URI. Обратите внимание, что для успешного выполнения этого метода необходимо установить все библиотеки и зависимости в среде, в которой вы работаете.

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

Редактирование и удаление моделей

Редактирование зарегистрированных моделей поддерживается как в Mlflow, так и в Машинном обучении Azure. Однако важно отметить некоторые различия.

Предупреждение

Переименование моделей в Машинном обучении Azure не поддерживается, так как объекты модели являются неизменяемыми.

Редактирование моделей

Описание и теги модели можно изменить с помощью MLflow:

client.update_model_version(model_name, version=1, description="My classifier description")

Чтобы изменить теги, необходимо использовать методы set_model_version_tag и remove_model_version_tag:

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

Удаление тега:

client.delete_model_version_tag(model_name, version="1", key="type")

Удаление версии модели

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

client.delete_model_version(model_name, version="2")

Примечание.

Машинное обучение Azure не поддерживает удаление всего контейнера модели. Чтобы добиться этого результата, необходимо удалить все версии модели из заданной модели.

Матрица поддержки для управления моделями с помощью MLflow

Клиент MLflow предоставляет несколько методов для получения моделей и управления ими. В следующей таблице показано, какие из этих методов сейчас поддерживаются в MLflow при подключении к Azure ML. В ней они также сравниваются с другими возможностями управления моделями в Azure ML.

Функция MLflow Azure ML с MLflow Azure ML CLI версии 2 Студия машинного обучения Azure
Регистрация моделей в формате MLflow
Регистрация моделей не в формате MLflow
Регистрация моделей из выходных данных и артефактов запусков 1 2
Регистрация моделей из выходных данных или артефактов выполнений на других сервере или рабочей области отслеживания 5 5
Зарегистрированные модели поиска и списка
Получение сведений о версиях зарегистрированной модели
Изменение описания версий зарегистрированной модели
Изменение тегов версий зарегистрированной модели
Переименование зарегистрированных моделей 3 3 3
Удаление зарегистрированной модели (контейнера) 3 3 3
Удаление версии зарегистрированной модели
Управление этапами модели MLflow
Поиск зарегистрированных моделей по имени 4
Поиск зарегистрированных моделей с помощью компараторов строк LIKE и ILIKE 4
Поиск зарегистрированных моделей по тегу 4
Поддержка реестров организации

Примечание.

  • 1 Используйте URI, имеющие формат runs:/<ruin-id>/<path>.
  • 2 Используйте URI, имеющие формат azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Зарегистрированные модели — это неизменяемые объекты в Azure ML.
  • 4 Используйте поле поиска в Студии машинного обучения Azure. Поддерживается частичное совпадение.
  • 5 . Используйте реестры для перемещения моделей между разными рабочими областями при сохранении происхождения.

Следующие шаги