Отслеживание моделей ML с помощью MLflow и Машинного обучения Azure
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
В этой статье показано, как включить отслеживанием MLflow, чтобы подключить Машинное обучение Azure в качестве серверной части к экспериментам MLflow.
MLflow — это библиотека с открытым кодом для управления жизненным циклом экспериментов машинного обучения. Отслеживание MLflow — это компонент MLflow, который осуществляет мониторинг и ведение журнала метрик запуска обучения и артефактов моделей независимо от окружения эксперимента. Это может быть локальный компьютер, удаленный целевой объект вычислений, виртуальная машина или кластер Azure Databricks.
См. MLflow и Машинное обучение Azure для получения сведений обо всех поддерживаемых функциях MLflow и Машинного обучения Azure, включая поддержку проектов MLflow (предварительная версия) и развертывание модели.
Совет
Если вы хотите отслеживать эксперименты, выполняемые в Azure Databricks или Azure Synapse Analytics, ознакомьтесь с посвященными этому вопросу статьями Отслеживание экспериментов ML Azure Databricks с помощью MLflow и Машинного обучения Azure и Отслеживание экспериментов машинного обучения Azure Synapse Analytics с помощью MLflow и Машинного обучения Azure.
Примечание.
Сведения в этом документе предназначены главным образом для специалистов по обработке и анализу данных и разработчиков, желающих отслеживать процесс обучения модели. Если вы администратор, который хочет отслеживать использование ресурсов и событий, таких как квоты, завершенные задания обучения или завершенные развертывания моделей, из Машинного обучения Azure, ознакомьтесь с разделом Мониторинг Машинного обучения Azure.
Необходимые компоненты
Установите пакет
mlflow
.- Вы можете использовать MLflow Skinny — упрощенный пакет MLflow без зависимостей хранилища SQL, сервера, пользовательского интерфейса и обработки и анализа данных. Это рекомендуемый вариант для пользователей, которым в основном требуются функции отслеживания и ведения журнала без импорта полного набора функций MLflow, включая развертывания.
Установите пакет
azureml-mlflow
.Установите и настройте CLI (версия 1) Машинного обучения Azure, причем обязательно с расширением Машинного обучения.
Внимание
Для использования некоторых команд Azure CLI, приведенных в этой статье, используйте расширение
azure-cli-ml
(версия 1) для Машинного обучения Azure. Поддержка расширения версии 1 будет прекращена 30 сентября 2025 г. Вы можете установить и использовать расширение версии 1 до этой даты.Рекомендуется перейти на расширение
ml
(версия 2) до 30 сентября 2025 г. Дополнительные сведения о расширении версии 2 см. на странице расширения CLI для Azure ML и пакета SDK для Python версии 2.Установите и настройте пакет SDK Машинного обучения Azure для Python.
Отслеживание запусков с локального компьютера или из удаленной вычислительной среды
Отслеживание с использованием MLflow и Машинного обучения Azure позволяет хранить данные журнала метрик и артефактов, выполненных на локальном компьютере, в рабочей области Машинного обучения Azure.
Настройка среды отслеживания
Для отслеживания запусков не в вычислительной среде Машинного обучения Azure, а в так называемой локальной вычислительной среде, нужно предоставить этой локальной вычислительной среде ссылку на URI отслеживания MLflow в службе Машинного обучения Azure.
Примечание.
При работе в службе "Вычисления Azure" (Записные книжки Azure, Jupyter Notebook, размещенных в вычислительных экземплярах или кластерах Azure) вам не нужно настраивать URI отслеживания. Он настраивается автоматически.
- Использование пакета SDK Машинное обучение Azure
- Использование переменной среды
- Создание URI отслеживания MLflow
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
Вы можете получить URI отслеживания MLflow Машинное обучение Azure с помощью пакета SDK Машинное обучение Azure версии 1 для Python. Убедитесь, что в используемом кластере установлена библиотека azureml-sdk
. В следующем примере возвращается уникальный URI отслеживания MLFLow, связанный с рабочей областью. Затем метод set_tracking_uri()
указывает этот URI в качестве URI отслеживания MLFLow.
Используя файл конфигурации рабочей области:
from azureml.core import Workspace import mlflow ws = Workspace.from_config() mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
Совет
Вы можете скачать файл конфигурации рабочей области следующим способом:
- Перейдите к Студия машинного обучения Azure
- Щелкните правый верхний угол страницы -> скачайте файл конфигурации.
- Сохраните файл
config.json
в том же каталоге, с которым вы работаете.
Используя идентификатор подписки, имя группы ресурсов и имя рабочей области:
from azureml.core import Workspace import mlflow #Enter details of your Azure Machine Learning workspace subscription_id = '<SUBSCRIPTION_ID>' resource_group = '<RESOURCE_GROUP>' workspace_name = '<AZUREML_WORKSPACE_NAME>' ws = Workspace.get(name=workspace_name, subscription_id=subscription_id, resource_group=resource_group) mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
Настройка имени эксперимента
Все запуски (циклы) MLflow регистрируются в активном эксперименте. По умолчанию запуски записываются в эксперимент с именем Default
, который создается автоматически. Для настройки эксперимента для работы воспользуйтесь командой MLflow mlflow.set_experiment()
.
experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)
Совет
При отправке заданий с помощью пакета SDK Машинное обучение Azure можно задать имя эксперимента с помощью свойства experiment_name
при отправке. Необязательно настраивать его в скрипте обучения.
Выполнение обучения
После того, как вы задали имя эксперимента MLflow, вы можете запустить обучение с помощью start_run()
. Затем используйте log_metric()
, чтобы активировать API ведения журнала MLflow и начать запись в журнал метрик выполнения обучения.
import os
from random import random
with mlflow.start_run() as mlflow_run:
mlflow.log_param("hello_param", "world")
mlflow.log_metric("hello_metric", random())
os.system(f"echo 'hello world' > helloworld.txt")
mlflow.log_artifact("helloworld.txt")
Дополнительные сведения о ведении журнала метрик, параметров и артефактов в запуске с помощью MLflow см. в статье Регистрация и просмотр метрик и файлов журнала с помощью MLflow.
Отслеживание запусков в Машинном обучении Azure
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
Удаленные запуски (задания) позволяют обучать модели более надежным и воспроизводимым способом. Они также могут использовать более мощные вычислительные ресурсы, например кластеры Вычислительной среды Машинного обучения. Чтобы узнать больше о различных вариантах вычислений, ознакомьтесь со статьей Использование целевых объектов вычислений для обучения моделей.
При отправке запусков Машинное обучение Azure автоматически настраивает MLflow для работы с рабочей областью, в которой выполняется запуск. Это означает, что нет необходимости настраивать URI для отслеживания MLflow. Кроме того, эксперименты автоматически получают имена на основе отправленных данных.
Внимание
При отправке заданий обучения в Машинное обучение Azure не нужно настраивать URI отслеживания MLflow в логике обучения, так как он уже настроен для вас. Также не требуется настраивать имя эксперимента в подпрограмме обучения.
Создание подпрограммы обучения
Во-первых, необходимо создать подкаталог src
, а также создать файл с обучающим кодом в файле train.py
в подкаталоге src
. Весь обучающий код будет перемещен в подкаталог src
, включая train.py
.
Обучающий код берется из этого примера MLflow в репозитории примера Машинного обучения Azure.
Скопируйте следующий код в файл:
# imports
import os
import mlflow
from random import random
# define functions
def main():
mlflow.log_param("hello_param", "world")
mlflow.log_metric("hello_metric", random())
os.system(f"echo 'hello world' > helloworld.txt")
mlflow.log_artifact("helloworld.txt")
# run functions
if __name__ == "__main__":
# run main function
main()
Настройка эксперимента
Для отправки эксперимента в Машинное обучение Azure необходимо использовать Python. Настройте среду вычислений и обучения в записной книжке или файле Python с помощью класса Environment
.
from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies
env = Environment(name="mlflow-env")
# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
conda_packages=["scikit-learn", "matplotlib"],
pip_packages=["azureml-mlflow", "pandas", "numpy"]
)
env.python.conda_dependencies = cd
Затем создайте ScriptRunConfig
, указав удаленный объект вычислений в качестве целевого объекта вычислений.
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory="src",
script=training_script,
compute_target="<COMPUTE_NAME>",
environment=env)
При данной конфигурации выполнения вычислений и обучения для отправки выполнения используется метод Experiment.submit()
. Этот метод автоматически задает URI отслеживания MLflow и направляет данные ведения журнала из MLflow в рабочую область.
from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()
experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)
run = exp.submit(src)
Просмотр метрик и артефактов в рабочей области
Метрики и артефакты из журнала MLflow отслеживаются в рабочей области. Чтобы просмотреть их в любое время, перейдите в рабочую область и найдите эксперимент по имени в Студии машинного обучения Azure. Либо выполните приведенный ниже код.
Получите метрику запуска с помощью get_run() MLflow.
from mlflow.tracking import MlflowClient
# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)
metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params
print(metrics,tags,params)
Для просмотра артефактов запуска, можно использовать MlFlowClient.list_artifacts()
client.list_artifacts(run_id)
Чтобы скачать артефакт в текущий каталог, можно использовать MLFlowClient.download_artifacts()
client.download_artifacts(run_id, "helloworld.txt", ".")
Дополнительные сведения о том, как получать информацию из экспериментов и запусков в службе "Машинное обучение Azure" с помощью MLflow, см. в разделе Управление экспериментами и запусками с помощью MLflow.
Сравнение и запрос
Сравните и запросите все MLflow, выполняемые в рабочей области Машинного обучения Azure, с помощью следующего кода. Дополнительные сведения о том, как выполняется запрос с MLflow.
from mlflow.entities import ViewType
all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)
runs.head(10)
Автоматическое ведение журнала
С помощью Машинного обучения Azure и MLFlow пользователи могут автоматически регистрировать метрики, параметры модели и артефакты модели при обучении модели. Поддерживаются различные популярные библиотеки машинного обучения.
Чтобы включить Автоматическое ведение журнала, вставьте следующий код перед обучающим кодом:
mlflow.autolog()
Дополнительные сведения об автоматическом ведении журнала с MLflow.
Manage models in the repository (Управление моделями в репозитории)
Зарегистрируйте и отслеживайте свои модели с помощью реестра моделей Машинного обучения Azure, который поддерживает реестр моделей MLflow. Модели Машинного обучения Azure согласованы со схемой модели MLflow, что упрощает экспорт и импорт этих моделей во время различных рабочих процессов. Метаданные, связанные с MLflow, такие как идентификатор запуска, отслеживаются вместе с зарегистрированной моделью для обеспечения отслеживаемости. Пользователи могут отправлять запуски обучения, регистрировать и развертывать модели, созданные во время выполнений MLflow.
Чтобы получить сведения о том, как развернуть и зарегистрировать готовую к работе модель за один шаг, ознакомьтесь со статьей Развертывание и регистрация моделей MLflow.
Чтобы зарегистрировать и просмотреть модель из запуска, выполните следующие действия.
После завершения выполнения вызовите метод
register_model()
.# the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml. model_path = "model" model_uri = 'runs:/{}/{}'.format(run_id, model_path) mlflow.register_model(model_uri,"registered_model_name")
Просмотрите зарегистрированную модель в рабочей области с помощью Студии машинного обучения Azure.
В следующем примере для зарегистрированной модели,
my-model
, помечены метаданные отслеживания MLflow.Перейдите на вкладку Артефакты, чтобы просмотреть все файлы модели, которые соответствуют схеме модели MLflow (conda.yaml, MLmodel, model.pkl).
Выберите MLmodel, чтобы просмотреть файл MLmodel, созданный при запуске.
Очистка ресурсов
Если вы не планируете использовать зарегистрированные метрики и артефакты в рабочей области, то вам нужно знать, что удалять такие ресурсы по отдельности в настоящее время нельзя. Вместо этого вам нужно удалить группу ресурсов, содержащую учетную запись хранения и рабочую область, и таким образом избежать ненужных расходов.
На портале Azure выберите Группы ресурсов в левой части окна.
В списке выберите созданную группу ресурсов.
Выберите команду Удалить группу ресурсов.
Введите имя группы ресурсов. Затем выберите Удалить.
Примеры записных книжек
В примере MLflow с записными книжками Машинного обучения Azure демонстрируются и поясняются основные понятия, представленные в этой статье. См. также репозитарий, управляемый сообществом, AzureML-Examples.
Следующие шаги
- Развертывание моделей с помощью MLflow.
- Отслеживайте рабочие модели для выявления смещения данных.
- Отслеживание запусков Azure Databricks с использованием MLflow.
- Управляйте своими моделями.