Отслеживание — это процесс сохранения соответствующих сведений о экспериментах. Из этой статьи вы узнаете, как использовать MLflow для отслеживания экспериментов и запусков в рабочей области Azure Machine Learning.
Некоторые методы, доступные в API MLflow, могут быть недоступны при подключении к Машинное обучение Azure. Дополнительные сведения о поддерживаемых и неподдерживаемых операциях см. в матрице поддержки для запросов к запускам и экспериментам. Вы также можете узнать о поддерживаемых функциях MLflow в Azure Machine Learning из статьи MLflow и Azure Machine Learning.
Установите пакет SDK MLflow mlflow
и плагин Azure Machine Learning azureml-mlflow
для MLflow следующим образом:
pip install mlflow azureml-mlflow
Совет
Вы можете использовать mlflow-skinny
пакет, который является упрощенным пакетом MLflow без хранилища SQL, сервера, пользовательского интерфейса или зависимостей для обработки и анализа данных. Этот пакет рекомендуется для пользователей, которые в первую очередь нуждаются в возможностях отслеживания и ведения журнала MLflow, не импортируя полный набор функций, включая развертывания.
Создайте рабочую область Машинного обучения Azure. Чтобы создать рабочую область, см. статью "Создание ресурсов, которые нужны для начала". Просмотрите разрешения доступа, необходимые для выполнения операций MLflow в рабочей области.
Чтобы выполнить удаленное отслеживание или отслеживать эксперименты, выполняемые вне среды Azure Machine Learning, настройте MLflow, чтобы указать URI отслеживания рабочей области Azure Machine Learning. Дополнительные сведения о подключении MLflow к рабочей области см. в разделе "Настройка MLflow" для Машинное обучение Azure.
MLflow упорядочивает сведения в экспериментах и прогонах. Запуски называются заданиями в службе Azure Machine Learning. По умолчанию логи создаваемых запусков записываются в эксперимент с именем Default, но можно настроить, в какой эксперимент их следует отслеживать.
Для интерактивного обучения, например в записной книжке Jupyter, используйте команду MLflow mlflow.set_experiment()
. Например, следующий фрагмент кода настраивает эксперимент:
experiment_name = 'hello-world-example'
mlflow.set_experiment(experiment_name)
Чтобы отправить задания с помощью интерфейса командной строки или пакета SDK Машинное обучение Azure, задайте имя эксперимента с помощью experiment_name
свойства задания. Вам не нужно настраивать имя эксперимента в скрипте обучения.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: echo "hello world"
environment:
image: library/python:latest
tags:
hello: world
display_name: hello-world-example
experiment_name: hello-world-example
description: |
Машинное обучение Azure отслеживает задания обучения в том, что выполняется вызовы MLflow. Используйте запуски, чтобы записать всю обработку, выполняемую заданием.
Когда вы работаете в интерактивном режиме, MLflow начинает отслеживать процесс обучения сразу после того, как вы регистрируете сведения, требующие активного запуска. Например, если функция автологирования Mlflow включена, отслеживание MLflow начинается при регистрации метрики или параметра или запуска цикла обучения.
Тем не менее, обычно полезно начать процесс явным образом, особенно если вы хотите записать общее время для эксперимента в поле Длительность. Чтобы запустить запуск явным образом, используйте mlflow.start_run()
.
Независимо от того, запускаете ли вы выполнение вручную или нет, вам в конечном итоге необходимо остановить выполнение, чтобы MLflow знал, что выполнение эксперимента выполнено и может пометить состояние выполнения как завершено. Чтобы остановить выполнение, используйте mlflow.end_run()
.
Следующий код запускается вручную и заканчивает его в конце записной книжки:
mlflow.start_run()
# Your code
mlflow.end_run()
Лучше всего начинать пробежки вручную, чтобы не забыть их закончить. Вы можете использовать контекстный менеджер, чтобы помнить о завершении процесса.
with mlflow.start_run() as run:
# Your code
Когда вы запускаете новый эксперимент с mlflow.start_run()
, можно указать параметр run_name
, который позже преобразуется в имя эксперимента в пользовательском интерфейсе Azure Machine Learning. Эта практика помогает быстрее определить запуск.
with mlflow.start_run(run_name="hello-world-example") as run:
# Your code
Azure Machine Learning позволяет отправлять задания, которые выполняют длительные процедуры обучения или инференции в виде изолированных и воспроизводимых запусков.
Создайте тренировочную программу с отслеживанием
При работе с заданиями обычно вы помещете всю логику обучения в качестве файлов в папку, например src. Один из файлов — это файл на Python, который является начальной точкой вашего кода обучения.
В подпрограмме обучения можно использовать пакет SDK MLflow для отслеживания любой метрики, параметра, артефактов или моделей. Примеры см. в разделе "Метрики журнала", "Параметры" и "Файлы" с помощью MLflow.
В следующем примере показана процедура обучения hello_world.py , которая добавляет ведение журнала:
# 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()
В предыдущем примере кода не используется элемент mlflow.start_run()
, но при его использовании MLflow повторно применяет текущую активную сессию. Поэтому при переносе кода на Azure Machine Learning не требуется удалять строку mlflow.start_run()
.
Убедитесь, что в среде вашей задачи установлен MLflow.
Все подготовленные окружения Azure Machine Learning уже имеют установленный MLflow. Однако, если вы используете настраиваемую среду, создайте файл conda.yaml с необходимыми зависимостями и укажите эту среду в вашей работе.
channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
- mlflow
- azureml-mlflow
- fastparquet
- cloudpickle==1.6.0
- colorama==0.4.4
- dask==2023.2.0
Используйте параметр заданий Azure Machine Learning display_name
для настройки имени запуска.
Используйте свойство display_name
, чтобы настроить задание.
Чтобы настроить задание, создайте файл YAML с определением задания в файле job.yml за пределами каталога src .
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: echo "hello world"
environment:
image: library/python:latest
tags:
hello: world
display_name: hello-world-example
experiment_name: hello-world-example
description: |
from azure.ai.ml import command, Environment
command_job = command(
code="src",
command="echo "hello world",
environment=Environment(image="library/python:latest"),
compute="cpu-cluster",
display_name="hello-world-example"
)
Не используйте mlflow.start_run(run_name="")
в вашей тренировочной программе.
Рабочая область — это ресурс верхнего уровня для Azure Machine Learning, предоставляющий централизованное место для работы со всеми создаваемыми артефактами Azure Machine Learning. Подключитесь к рабочей области Машинное обучение Azure.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Импортируйте необходимые библиотеки:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
Настройте сведения о рабочей области и получите идентификатор рабочей области.
subscription_id = "<subscription>"
resource_group = "<resource-group>"
workspace = "<workspace>"
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
Откройте терминал и используйте следующий код для отправки задания. Задания, использующие MLflow и выполняющиеся в Azure Machine Learning, автоматически регистрируют всю информацию об отслеживании в рабочей области.
Следите за ходом выполнения задачи в Azure Machine Learning Studio.
Включите автологирование MLflow
Вы можете записывать метрики, параметры и файлы с помощью MLflow вручную, а также использовать функцию автоматического ведения журнала MLflow. Каждая платформа машинного обучения, поддерживаемая MLflow, определяет, что нужно отслеживать автоматически.
Чтобы включить автоматическое ведение журнала, вставьте следующий код перед учебным кодом:
mlflow.autolog()
Просмотр метрик и артефактов в рабочей области
Метрики и артефакты, зафиксированные через журналирование MLflow, отслеживаются в вашем рабочем пространстве. Их можно просмотреть и получить в Azure Machine Learning Studio или программно получить к ним доступ через MLflow SDK.
Чтобы просмотреть метрики и артефакты в студии, выполните следующие действия.
На странице "Задания" в рабочей области выберите имя эксперимента.
На странице сведений о эксперименте выберите вкладку "Метрики ".
Выберите записанные метрики для отрисовки диаграмм справа. Вы можете настроить диаграммы, применяя сглаживание, изменение цвета или отображение нескольких метрик на одном графе. Вы также можете изменить размер и изменить расположение макета.
Создав нужное представление, сохраните его для дальнейшего использования и поделитесь им со своими товарищами по команде с помощью прямой ссылки.
Чтобы получить доступ к метрикам, параметрам и артефактам с помощью пакета SDK MLflow, используйте mlflow.get_run().
import mlflow
run = mlflow.get_run("<RUN_ID>")
metrics = run.data.metrics
params = run.data.params
tags = run.data.tags
print(metrics, params, tags)
Совет
В предыдущем примере возвращается только последнее значение заданной метрики. Чтобы получить все значения заданной метрики, используйте mlflow.get_metric_history
метод. Дополнительные сведения о получении значений метрик см. в разделе Get params and metrics from a run.
Чтобы скачать артефакты, зарегистрированные в журнале, например файлы и модели, используйте mlflow.artifacts.download_artifacts().
mlflow.artifacts.download_artifacts(run_id="<RUN_ID>", artifact_path="helloworld.txt")
Дополнительные сведения о том, как получить или сравнить информацию из экспериментов и прогонов в Azure Machine Learning с помощью MLflow, см. в статье "Запрос и сравнение экспериментов и прогонов с помощью MLflow".