Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
MLflow можно использовать для запроса экспериментов и заданий (или запусков) в Машинном обучении Azure. Вам не нужно устанавливать какой-либо определенный пакет SDK для управления тем, что происходит внутри задания обучения. Удаляя облачные зависимости, вы получаете более простой переход между локальными запусками и облаком. В этой статье вы узнаете, как запрашивать и сравнивать эксперименты и запуски в рабочей области с помощью Azure Machine Learning и MLflow SDK для Python.
С помощью MLflow вы можете:
- Создавайте, задавайте запросы, удаляйте и ищите эксперименты в рабочей области.
- Запрос, удаление и поиск запусков в рабочей области.
- Отслеживайте и извлеките метрики, параметры, артефакты и модели из запусков.
Подробное сравнение MLflow с открытым исходным кодом и MLflow при подключении к Azure Machine Learning см. в матрице поддержки для запросов и экспериментов в Azure Machine Learning.
Примечание.
Пакет SDK Python для Машинного обучения Azure версии 2 не предоставляет собственные возможности ведения журнала или отслеживания. Это ограничение применяется не только к ведению журнала, но и к запросу зарегистрированных метрик. Вместо этого используйте MLflow для управления экспериментами и запусками. В этой статье объясняется, как использовать MLflow для управления экспериментами и запусками в Azure Machine Learning.
Вы также можете запрашивать и искать эксперименты и запуски с помощью REST API MLflow. См. пример того, как это использовать, в статье «Использование MLflow REST с машинным обучением Azure».
Необходимые компоненты
Установите пакет MLflow SDK
mlflowи плагин Azure Machine Learningazureml-mlflowдля MLflow:pip install mlflow azureml-mlflowСовет
Вы можете использовать
mlflow-skinnyпакет, который является упрощенным пакетом MLflow без хранилища SQL, сервера, пользовательского интерфейса или зависимостей для обработки и анализа данных. Мы рекомендуем этот пакет для пользователей, которым в первую очередь нужны возможности отслеживания и ведения журнала MLflow, но не полный набор функций, включая развертывания.Создайте рабочую область Машинного обучения Azure. Чтобы создать рабочую область, см. статью "Создание ресурсов", которые необходимо приступить к работе. Просмотрите разрешения доступа, необходимые для выполнения операций MLflow в рабочей области.
Чтобы выполнить удаленное отслеживание или отслеживать эксперименты, выполняемые вне Машинное обучение Azure, настройте MLflow для указания URI отслеживания рабочей области Машинное обучение Azure. Дополнительные сведения о подключении MLflow к рабочей области см. в разделе "Настройка MLflow" для Машинное обучение Azure.
Запросы и поиск экспериментов
Используйте MLflow для поиска экспериментов в рабочей области. См. следующие примеры.
Получите все активные эксперименты:
mlflow.search_experiments()Примечание.
Вместо этого используйте метод < в устаревших версиях MLflow (
mlflow.list_experiments()2.0).Получите все эксперименты, включая архивные эксперименты:
from mlflow.entities import ViewType mlflow.search_experiments(view_type=ViewType.ALL)Найдите конкретный эксперимент по названию:
mlflow.get_experiment_by_name(experiment_name)Получите конкретный эксперимент по идентификатору:
mlflow.get_experiment('1234-5678-90AB-CDEFG')
Поиск экспериментов
Метод search_experiments() , доступный с версии Mlflow 2.0, позволяет искать эксперименты, соответствующие критериям с помощью filter_string.
Получение нескольких экспериментов на основе идентификаторов:
mlflow.search_experiments(filter_string="experiment_id IN (" "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')" )Извлеките все эксперименты, созданные после заданного времени:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")Получите все эксперименты с заданным тегом:
mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
Запросы и выполнение поиска
MLflow позволяет выполнять поиск в любом эксперименте, включая несколько экспериментов одновременно. Метод mlflow.search_runs() принимает аргументы experiment_ids и experiment_name, чтобы указать, какие эксперименты вы хотите искать. Можно также задать search_all_experiments=True , если вы хотите выполнить поиск по всем экспериментам в рабочей области:
По имени эксперимента:
mlflow.search_runs(experiment_names=[ "my_experiment" ])По идентификатору эксперимента:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])Выполните поиск по всем экспериментам в рабочей области:
mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
Аргумент experiment_ids поддерживает предоставление массива экспериментов, поэтому можно выполнять поиск по нескольким экспериментам. Эта функция полезна, если вы хотите сравнить запуски одной и той же модели, когда она регистрируется в различных экспериментах, например, в экспериментах, проводимых разными людьми, или в разных итерациях проекта.
Внимание
Если вы не укажете experiment_ids, experiment_namesили search_all_experiments, то MLflow выполняет поиск по умолчанию в текущем активном эксперименте. Активный эксперимент можно задать с помощью mlflow.set_experiment().
По умолчанию MLflow возвращает данные в формате Pandas Dataframe, что делает его удобным при дальнейшей обработке или анализе запусков. Возвращаемые данные содержат столбцы со следующими сведениями:
- Базовая информация о запуске.
- Параметры с именами столбцов
params.<parameter-name>. - Метрики (зарегистрированное последнее значение каждого из них) с именами столбцов
metrics.<metric-name>.
Все метрики и параметры также возвращаются при выполнении запросов. Однако для метрик, содержащих несколько значений (например, кривую потери или кривую PR), возвращается только последнее значение метрики. Если вы хотите получить все значения заданной метрики, используйте mlflow.get_metric_history этот метод. См. пример получения параметров и метрик из выполнения.
Выполнение заказов
По умолчанию на портале отображаются эксперименты в порядке убывания по времени их постановки в очередь в Машинном обучении Azure. Однако этот порядок по умолчанию можно изменить с помощью order_by параметра.
Упорядочивание выполняется по атрибутам, например
start_time:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.start_time DESC"])Упорядочьте проходы и ограничьте результаты. В следующем примере возвращается последний один запуск в эксперименте:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], max_results=1, order_by=["attributes.start_time DESC"])Ордеры сортируются по атрибуту
duration.mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.duration DESC"])Совет
attributes.durationне присутствует в MLflow OSS, но Машинное обучение Azure предоставляет его для удобства.Упорядочение выполняется по значениям метрик:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)Предупреждение
В настоящее время параметр
order_byне поддерживает выражения, содержащиеmetrics.*,params.*, илиtags.*. Вместо этого используйтеsort_valuesметод из Pandas, как показано в примере.
Фильтрация запусков
Вы можете использовать параметр filter_string для поиска запусков с определенным сочетанием гиперпараметров. Используйте params для доступа к параметрам запуска, metrics для доступа к метрикам, зарегистрированным в рамках запуска, и attributes для доступа к сведениям о запуске. MLflow поддерживает выражения, присоединенные ключевым словом AND (синтаксис не поддерживает OR):
Поиск выполняется на основе значения параметра:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="params.num_boost_round='100'")Предупреждение
Только операторы
=иlike!=поддерживаются для фильтрацииparameters.Поиск выполняется на основе значения метрики:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="metrics.auc>0.8")Поиск выполняется с заданным тегом:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="tags.framework='torch'")Выполнение поиска, созданное заданным пользователем:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.user_id = 'John Smith'")Поиск неудавшихся запусков. См. Фильтр по состоянию для возможных значений:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.status = 'Failed'")Поисковые запросы, созданные после заданного времени:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.creation_time > '{int(dt.timestamp())}'")Совет
Для ключа
attributesзначения всегда должны быть строками и поэтому кодируются между кавычками.Выполнение поиска, которое занимает больше одного часа:
duration = 360 * 1000 # duration is in milliseconds mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.duration > '{duration}'")Совет
attributes.durationне присутствует в MLflow OSS, но Машинное обучение Azure предоставляет его для удобства.Выполняется поиск с идентификатором в заданном наборе:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
Отфильтруйте запуски по статусу
При фильтрации по состоянию MLflow использует другое соглашение для именования различных возможных состояний выполнения по сравнению с Машинным обучением Azure. В таблице ниже приведены возможные значения.
| состояние задания Azure Machine Learning | MLflow attributes.status |
Значение |
|---|---|---|
| Не начато | Scheduled |
Служба Azure Machine Learning принимает задание или выполнение. |
| Очередь | Scheduled |
Задание или выполнение запланировано на выполнение, но оно еще не запускается. |
| Подготовка | Scheduled |
Задание или запуск еще не начаты, но выделяется вычислительный ресурс для его выполнения, и он подготавливает среду и входные данные. |
| Бег | Running |
Задание или запуск в настоящее время активно выполняется. |
| Завершено | Finished |
Задание или выполнение завершается без ошибок. |
| Неудачно | Failed |
Задание или запуск завершается с ошибками. |
| Отменено | Killed |
Пользователь отменяет задание или запуск, или система завершает его. |
Пример:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="attributes.status = 'Failed'")
Получение метрик, параметров, артефактов и моделей
Метод search_runs по умолчанию возвращает Pandas Dataframe, содержащий ограниченный объем информации. При необходимости можно получить объекты Python, которые могут быть полезны для получения сведений о них. Используйте параметр output_format для управления способом возврата выходных данных:
runs = mlflow.search_runs(
experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="params.num_boost_round='100'",
output_format="list",
)
Вы можете получить доступ к сведениям info от члена. В следующем примере показано, как получить run_id:
last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)
Получение параметров и метрик из процесса запуска
При возврате запусков с помощью output_format="list"функции можно легко получить доступ к параметрам с помощью ключа data:
last_run.data.params
Таким же образом можно запрашивать метрики:
last_run.data.metrics
Для метрик, содержащих несколько значений (например, кривой потери или кривой PR), возвращается только последнее зарегистрированное значение метрики. Если вы хотите получить все значения заданной метрики, используйте mlflow.get_metric_history этот метод. Для этого метода требуется использовать MlflowClient:
client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")
Получение артефактов из запуска
MLflow может запрашивать любой артефакт, записанный в журнал с помощью запуска. Невозможно получить доступ к артефактам с помощью самого объекта выполнения. Вместо этого используйте клиент MLflow:
client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")
В предыдущем методе перечислены все артефакты, зарегистрированные в ходе выполнения, однако они продолжают храниться в хранилище артефактов (в хранилище Машинного обучения Azure). Чтобы скачать любой из них, используйте метод download_artifact:
file_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)
Примечание.
В устаревших версиях MLflow (<2.0) используйте метод MlflowClient.download_artifacts() .
Получение моделей из запуска
Вы можете регистрировать модели в ходе выполнения, а затем извлекать их напрямую. Чтобы получить модель, необходимо знать путь к артефакту, в котором он хранится.
list_artifacts Используйте метод для поиска артефактов, представляющих модель, так как модели MLflow всегда являются папками. Вы можете скачать модель, указав путь, в котором хранится модель, с помощью download_artifact метода:
artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)
Затем модель можно загрузить обратно из скачанных артефактов с помощью стандартной функции load_model в пространстве имен, специфичном для данного вкуса. В следующем примере используется xgboost.
model = mlflow.xgboost.load_model(model_local_path)
MLflow также позволяет одновременно выполнять обе операции, а также загружать и загружать модель в одной инструкции. MLflow загружает модель во временную папку и загружает ее из нее. Метод load_model использует формат URI для указания места извлечения модели. В случае загрузки модели из запуска структура URI выглядит следующим образом:
model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")
Совет
Сведения о запросах и загрузке моделей, зарегистрированных в реестре моделей, см. в разделе "Управление реестрами моделей" в Машинное обучение Azure с помощью MLflow.
Получение дочерних (вложенных) запусков
MLflow поддерживает концепцию дочерних (вложенных) запусков. Эти запуски полезны, если вам нужно отключить подпрограммы обучения, которые должны отслеживаться независимо от основного процесса обучения. Процессы оптимизации гиперпараметров или конвейеры Azure Machine Learning – это типичные примеры заданий, создающих несколько дочерних выполнений. Вы можете запросить все дочерние выполнения определенного выполнения с помощью тега свойства mlflow.parentRunId, который содержит идентификатор родительского выполнения.
hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)
Сравните задания и модели в студии машинного обучения Azure (предварительная версия)
Чтобы сравнить и оценить качество заданий и моделей в Студия машинного обучения Azure, используйте панель предварительного просмотра, чтобы включить эту функцию. После включения можно сравнить параметры, метрики и теги между выбранными заданиями и моделями.
Внимание
Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендована для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
Записные книжки MLflow с Azure Machine Learning демонстрируют и поясняют концепции, представленные в этой статье.
- Обучение и отслеживание классификатора с помощью MLflow: Демонстрируется, как отслеживать эксперименты с помощью MLflow, журналировать модели и комбинировать несколько вариантов в конвейеры.
- Управление экспериментами и запусками с помощью MLflow: Демонстрирует, как запрашивать эксперименты, запуски, метрики, параметры и артефакты из Azure Machine Learning с помощью MLflow.
Матрица поддержки для отправки запросов к запускам и экспериментам
Пакет SDK MLflow предоставляет несколько методов для получения запусков, в том числе позволяющих контролировать, какие данные возвращаются и каким образом. В следующей таблице показано, какие из этих методов сейчас поддерживаются в MLflow при подключении к Машинному обучению Azure:
| Функция | Поддерживается MLflow | Поддерживается Машинное обучение Azure |
|---|---|---|
| Упорядочивание запусков по атрибутам | ✓ | ✓ |
| Упорядочивание запусков по метрикам | ✓ | 1 |
| Упорядочивание запусков по параметрам | ✓ | 1 |
| Упорядочивание запусков по тегам | ✓ | 1 |
| Фильтрация запусков по атрибутам | ✓ | ✓ |
| Фильтрация запусков по метрикам | ✓ | ✓ |
| Фильтрация запусков по метрикам с помощью специальных символов (escape-символов) | ✓ | |
| Фильтрация запусков по параметрам | ✓ | ✓ |
| Фильтрация запусков по тегам | ✓ | ✓ |
Фильтрация запусков с помощью числовых компараторов (метрик), включая =, !=, >, >=, < и <= |
✓ | ✓ |
Фильтрация запусков с помощью компараторов строк (параметров, тегов и атрибутов): = и != |
✓ | ✓2 |
Фильтрация запусков с помощью компараторов строк (параметров, тегов и атрибутов): LIKE/ILIKE |
✓ | ✓ |
Фильтрация запусков с помощью компараторов AND |
✓ | ✓ |
Фильтрация запусков с помощью компараторов OR |
||
| Переименование экспериментов | ✓ |
Примечание.
- 1 Проверьте раздел Запуски на выполнение для получения инструкций и примеров по достижению той же функциональности в Azure Machine Learning.
-
2
!=для тегов, которые не поддерживаются.