Управление реестрами моделей в Машинном обучении 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
, version
creation_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 . Используйте реестры для перемещения моделей между разными рабочими областями при сохранении происхождения.