Управление реестром моделей в Машинное обучение Azure с помощью MLflow
Машинное обучение Azure поддерживает MLflow для управления моделями при подключении к рабочей области. Этот подход является удобным способом поддержки всего жизненного цикла модели для пользователей, знакомых с клиентом MLFlow.
В этой статье описываются возможности управления реестром моделей с помощью MLflow и сравнение этого метода с другими параметрами управления.
Необходимые компоненты
Установите пакет пакета SDK
mlflow
MLflow и подключаемый модуль Машинное обучение Azureazureml-mlflow
для MLflow следующим образом:pip install mlflow azureml-mlflow
Совет
Вы можете использовать
mlflow-skinny
пакет, который является упрощенным пакетом MLflow без хранилища SQL, сервера, пользовательского интерфейса или зависимостей для обработки и анализа данных. Этот пакет рекомендуется для пользователей, которые в первую очередь нуждаются в возможностях отслеживания и ведения журнала MLflow, не импортируя полный набор функций, включая развертывания.Создайте рабочую область Машинного обучения Azure. Чтобы создать рабочую область, см. статью "Создание ресурсов", которые необходимо приступить к работе. Просмотрите разрешения доступа, необходимые для выполнения операций MLflow в рабочей области.
Чтобы выполнить удаленное отслеживание или отслеживать эксперименты, выполняемые вне Машинное обучение Azure, настройте MLflow, чтобы указать URI отслеживания рабочей области Машинное обучение Azure. Дополнительные сведения о подключении MLflow к рабочей области см. в разделе "Настройка MLflow" для Машинное обучение Azure.
Процедуры, описанные в этой статье, используют
client
объект для ссылки на клиент MLflow.Некоторые операции можно выполнять непосредственно с помощью API fluent MLflow.
mlflow.<method>
Для других операций требуется клиент MLflow для включения связи с Машинное обучение в протоколе MLflow. Следующий код создаетMlflowClient
объект:import mlflow client = mlflow.tracking.MlflowClient()
Ограничения
Машинное обучение Azure не поддерживает переименование моделей.
Машинное обучение не поддерживает удаление всего контейнера модели.
Реестры организации не поддерживаются для управления моделями с помощью MLflow.
Развертывание модели с определенного этапа модели в настоящее время не поддерживается в Машинное обучение.
В настоящее время операции между рабочими областями не поддерживаются в Машинное обучение.
Регистрация новых моделей
Реестр моделей предлагает удобный и централизованный способ управления моделями в рабочей области. Каждая рабочая область имеет собственный независимый реестр моделей. В следующих разделах показано два способа регистрации моделей в реестре с помощью пакета SDK MLflow.
Создание моделей из существующего запуска
Если у вас есть модель MLflow, зарегистрированная внутри запуска, и вы хотите зарегистрировать ее в реестре, используйте идентификатор выполнения и путь, в котором регистрируется модель. Эти сведения можно запросить, следуя инструкциям в статье "Управление экспериментами" и запуском с помощью MLflow.
mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)
Примечание.
Модели можно регистрировать только в реестре в той же рабочей области, где выполнялось отслеживание. В настоящее время операции между рабочими областями не поддерживаются в Машинное обучение Azure.
Совет
Зарегистрируйте модели из запусков или с помощью mlflow.<flavor>.log_model
метода внутри запуска. Этот подход сохраняет происхождение из задания, создающего ресурс.
Создание моделей из ресурсов
Если у вас есть папка с моделью MLflow MLModel , ее можно зарегистрировать напрямую. Модель не должна постоянно находиться в контексте запуска. Для этого подхода можно использовать схему file://path/to/model
URI для регистрации моделей MLflow, хранящихся в локальной файловой системе.
Следующий код создает простую модель с помощью 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
, version
, creation_timestamp
или last_updated_timestamp
:
client.search_registered_models(order_by=["name ASC"])
Примечание.
Для версий 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, интерфейса командной строки Машинное обучение Azure или REST API Машинное обучение Azure. Развертывание с определенного этапа модели в настоящее время не поддерживается.
Этапы модели запросов
Следующий код использует клиент MLflow для проверки всех возможных этапов модели:
client.get_model_version_stages(model_name, version="latest")
Вы можете просмотреть версии модели для каждого этапа модели, извлекая модель из реестра. Следующий код получает версию модели, которая сейчас находится на Staging
этапе:
client.get_latest_versions(model_name, stages=["Staging"])
Несколько версий модели могут находиться на одном этапе одновременно в MLflow. В предыдущем примере метод возвращает последнюю (последнюю) версию среди всех версий этапа.
Внимание
В пакете SDK 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. Для успешного выполнения этого метода все библиотеки и зависимости должны быть установлены в рабочей среде.
Загрузите модель с Staging
этапа:
model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")
Изменение и удаление моделей
Редактирование зарегистрированных моделей поддерживается как в MLflow, так и в Машинное обучение Azure, но существуют некоторые важные различия. В следующих разделах описаны некоторые параметры.
Примечание.
Переименование моделей не поддерживается в Машинное обучение Azure поскольку объекты модели неизменяемы.
Изменение описания и тегов модели
Описание и теги модели можно изменить с помощью пакета SDK 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")
Чтобы удалить тег, используйте delete_model_version_tag
метод:
client.delete_model_version_tag(model_name, version="1", key="type")
Удаление версии модели
Вы можете удалить любую версию модели в реестре с помощью клиента MLflow:
client.delete_model_version(model_name, version="2")
Примечание.
Машинное обучение не поддерживает удаление всего контейнера модели. Чтобы достичь этой задачи, удалите все версии модели для данной модели.
Просмотр поддерживаемых возможностей для управления моделями
Клиент MLflow предоставляет несколько методов для получения моделей и управления ими. В следующей таблице перечислены методы, которые в настоящее время поддерживаются в MLflow при подключении к Машинное обучение Azure. Таблица также сравнивает MLflow с другими возможностями управления моделями в Машинное обучение Azure.
Описание функции |
Только MLflow | Машинное обучение с MLflow | Машинное обучение CLI версии 2 | студия Машинное обучение |
---|---|---|---|---|
Регистрация моделей в формате 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.
- 4. Используйте поле поиска в Студия машинного обучения Azure. Поддерживается частичное сопоставление.
- 5 . Используйте реестры для перемещения моделей между разными рабочими областями и сохранения происхождения.