Поделиться через


Регистрация и просмотр метрик и файлов журнала (версия 1)

ПРИМЕНЯЕТСЯ К:Пакет SDK машинного обучения Azure версии 1 для Python

Important

В этой статье содержатся сведения об использовании пакета SDK машинного обучения Azure версии 1. Пакет SDK версии 1 устарел с 31 марта 2025 г. Поддержка будет завершена 30 июня 2026 г. Вы можете установить и использовать пакет SDK версии 1 до этой даты. Существующие рабочие процессы, использующие пакет SDK версии 1, будут продолжать работать после даты окончания поддержки. Однако они могут быть подвержены рискам безопасности или критическим изменениям в случае изменений архитектуры в продукте.

Рекомендуется перейти на пакет SDK версии 2 до 30 июня 2026 г. Дополнительные сведения о пакете SDK версии 2 см. в статье "Что такое ИНТЕРФЕЙС командной строки Машинного обучения Azure" и пакет SDK для Python версии 2 исправочник по пакету SDK версии 2.

Пакет журналов Python по умолчанию и специализированные функции пакета SDK Python для Машинного обучения Azure позволяют вам записывать данные журналы в режиме реального времени. Вы можете вести журналы в локальной среде и отправлять их в свою рабочую область на портале.

Журналы помогают диагностировать ошибки и предупреждения, а также отслеживать метрики производительности, такие как параметры и производительность модели. Из этой статьи вы узнаете, как включить ведение журнала в следующих сценариях:

  • запись метрик выполнения в журнал;
  • сеансы интерактивного обучения;
  • отправка заданий обучения с помощью ScriptRunConfig;
  • встроенные параметры logging Python;
  • ведение журнала из дополнительных источников.

Tip

В этой статье демонстрируется, как обеспечить мониторинг для процесса обучения модели. Если вы заинтересованы в мониторинге использования ресурсов и событий из Машинное обучение Azure, таких как квоты, завершенные запуски обучения или завершенные развертывания моделей, см. Машинное обучение Azure мониторинга.

Типы данных

Вы можете вести журнал по нескольким типам данных, включая скалярные значения, списки, таблицы, изображения, каталоги и т. д. Дополнительные сведения и примеры кода на Python для разных типов данных см. на странице справки по классу Run.

Ведение журналов для метрик выполнения

Используйте следующие методы в API ведения журнала для влияния на визуализации метрик. Учитывайте ограничения служб для таких регистрируемых метрик.

Зарегистрированное значение Пример кода Формат на портале
Массив числовых значений run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) График для одной переменной
Регистрируйте одно числовое значение с одинаковым именем метрики многократно (например, из цикла for) for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 График для одной переменной
Повторно записывать строку с двумя числовыми столбцами run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) Графики для двух переменных
Таблица журнала с двумя числовыми столбцами run.log_table(name='Sine Wave', value=sines) Графики для двух переменных
Изображение журнала run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') Используйте этот метод, чтобы записать файл изображения или график matplotlib в выполнение. Эти изображения видимы и сопоставимы в журнале выполнения

Ведение журнала с помощью MLflow

Мы рекомендуем регистрировать модели, метрики и артефакты с помощью MLflow, так как он является открытым исходным кодом и поддерживает локальный режим переносимости в облако. В следующей таблице и в примерах кода ниже показано, как использовать MLflow для регистрации метрик и артефактов из учебных запусков. Узнайте подробнее о методах ведения журналов MLflow и конструктивных шаблонах.

Обязательно установите в рабочей области пакеты PIP mlflow и azureml-mlflow.

pip install mlflow
pip install azureml-mlflow

Задайте универсальный код ресурса (URI) отслеживания MLflow, чтобы он указывал на серверную часть Машинного обучения Azure, чтобы гарантировать регистрацию метрик и артефактов в рабочей области.

from azureml.core import Workspace
import mlflow
from mlflow.tracking import MlflowClient

ws = Workspace.from_config()
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())

mlflow.create_experiment("mlflow-experiment")
mlflow.set_experiment("mlflow-experiment")
mlflow_run = mlflow.start_run()
Зарегистрированное значение Пример кода Notes
Регистрация числового значения (int или float) mlflow.log_metric('my_metric', 1)
Регистрация логического значения mlflow.log_metric('my_metric', 0) 0 = False, 1 = True
Регистрация строки mlflow.log_text('foo', 'my_string') Зарегистрировано как артефакт
Регистрация метрик NumPy или объектов образа PIL mlflow.log_image(img, 'figure.png')
Файл диаграммы или изображения в журнале matplotlib mlflow.log_figure(fig, "figure.png")

Просмотр метрик выполнения с помощью пакета SDK

Метрики обученной модели можно просмотреть с помощью run.get_metrics().

from azureml.core import Run
run = Run.get_context()
run.log('metric-name', metric_value)

metrics = run.get_metrics()
# metrics is of type Dict[str, List[float]] mapping metric names
# to a list of the values for that metric in the given run.

metrics.get('metric-name')
# list of metrics in the order they were recorded

Вы также можете получить доступ к сведениям о выполнении с помощью MLflow, используя свойства данных и сведений об объекте выполнения. Дополнительные сведения см. в документации по объекту MLflow.entities.Run .

После завершения выполнения его можно получить с помощью MlflowClient().

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
finished_mlflow_run = MlflowClient().get_run(mlflow_run.info.run_id)

Метрики, параметры и теги для выполнения можно просмотреть в поле данных объекта выполнения.

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

Note

Словарь метрик в mlflow.entities.Run.data.metrics возвращает только последнее зарегистрированное значение для заданного имени метрики. Например, если для метрики sample_metric последовательно регистрируются 1, затем 2, затем 3, а затем 4, то в словаре метрик для sample_metric будет указано только 4.

Чтобы получить все метрики, зарегистрированные для определенного имени метрики, можно использовать MlflowClient.get_metric_history().

Просмотр метрик выполнения в пользовательском интерфейсе студии

В студии Машинного обучения Azure можно просматривать записи о завершенных запусках, в том числе зарегистрированные метрики.

Перейдите на вкладку Эксперименты. Чтобы просмотреть все запуски разных экспериментов в рабочей области, перейдите на вкладку Все запуски. Можно детализировать ход выполнения до уровня конкретных экспериментов, применив фильтр в верхней строке меню.

Для индивидуального просмотра экспериментов выберите вкладку Все эксперименты. На панели мониторинга запуска экспериментов можно просмотреть метрики и журналы для каждого запуска.

Также можно отредактировать таблицу со списком запусков, чтобы выбрать несколько запусков и отобразить последнее, минимальное или максимальное зарегистрированное значение. Настройте диаграммы, чтобы сравнить зарегистрированные значения метрик и агрегированные данные для нескольких запусков. На оси Y можно построить несколько метрик, а на оси X настроить отображение зарегистрированных метрик.

Просмотр и скачивание файлов журналов для запуска

Файлы журналов — это важный ресурс для отладки рабочих нагрузок машинного обучения Azure. Отправив задание обучения, задайте детализацию до уровня конкретного запуска, чтобы просмотреть его журналы и выходные данные:

  1. Перейдите на вкладку Эксперименты.
  2. Выберите идентификатор конкретного запуска.
  3. Выберите Выходные данные и журналы вверху страницы.
  4. Выберите Скачать все, чтобы скачать все журналы в ZIP-папку.
  5. Можно также скачать отдельные файлы журнала, выбрав нужный файл и нажав кнопку Скачать.

Снимок экрана, иллюстрирующий раздел выходных данных и журналов запуска.

папка user_logs

Эта папка содержит сведения о журналах, созданных пользователем. По умолчанию эта папка открыта, и выбран журнал std_log.txt. В файле std_log.txt содержатся журналы вашего кода (например, инструкции печати). Этот файл содержит журналы stdout и stderr из скриптов управления и обучения (по одному на процесс). В большинстве случаев вы отслеживаете журналы здесь.

папка system_logs

Эта папка содержит журналы, созданные Машинным обучением Azure, и по умолчанию закрывается. Журналы, созданные системой, сгруппированы в разные папки в зависимости от стадии задания во время выполнения.

Другие папки

Для заданий, выполняемых в кластерах с несколькими вычислительными ресурсами, журналы организованы по IP-адресу узла. Каждый узел имеет такую же структуру папок журнала, как и задания с одним узлом. Кроме того, существует отдельная папка журналов, содержащая общие журналы выполнения, включая stderr и stdout из всего кластера.

Во время машинного обучения Azure регистрируются данные из различных источников, например AutoML ML или контейнера Docker, выполняющего задание обучения. Многие такие журналы не документированы. Если у вас возникли проблемы и вы обратились в службу поддержки Майкрософт, ее специалисты могут воспользоваться этими журналами для устранения неполадок.

Интерактивный сеанс ведения журнала

Интерактивные сеансы ведения журнала обычно используются в средах записных книжек. Запустить интерактивный сеанс ведения журнала можно с помощью метода Experiment.start_logging(). Все метрики, записанные во время сеанса, добавляются в запись о выполнении эксперимента. Метод run.complete() завершает сеансы и помечает операцию как завершенную.

Журналы ScriptRun

В этом разделе описано, как добавить код ведения журнала в запусках, созданных при настройке с помощью ScriptRunConfig. Вы можете использовать класс ScriptRunConfig, чтобы инкапсулировать скрипты и среды для повторяемых операций. Вы также можете использовать этот параметр для отображения визуального мини-приложения Jupyter Notebook для мониторинга.

В этом примере выполняется очистка параметров для альфа-значений и регистрация результатов с помощью метода run.log().

  1. Создайте скрипт обучения, который включает логику ведения журнала train.py.

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license.
    
    from sklearn.datasets import load_diabetes
    from sklearn.linear_model import Ridge
    from sklearn.metrics import mean_squared_error
    from sklearn.model_selection import train_test_split
    from azureml.core.run import Run
    import os
    import numpy as np
    import mylib
    # sklearn.externals.joblib is removed in 0.23
    try:
        from sklearn.externals import joblib
    except ImportError:
        import joblib
    
    os.makedirs('./outputs', exist_ok=True)
    
    X, y = load_diabetes(return_X_y=True)
    
    run = Run.get_context()
    
    X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                        test_size=0.2,
                                                        random_state=0)
    data = {"train": {"X": X_train, "y": y_train},
            "test": {"X": X_test, "y": y_test}}
    
    # list of numbers from 0.0 to 1.0 with a 0.05 interval
    alphas = mylib.get_alphas()
    
    for alpha in alphas:
        # Use Ridge algorithm to create a regression model
        reg = Ridge(alpha=alpha)
        reg.fit(data["train"]["X"], data["train"]["y"])
    
        preds = reg.predict(data["test"]["X"])
        mse = mean_squared_error(preds, data["test"]["y"])
        run.log('alpha', alpha)
        run.log('mse', mse)
    
        model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha)
        # save model in the outputs folder so it automatically get uploaded
        with open(model_file_name, "wb") as file:
            joblib.dump(value=reg, filename=os.path.join('./outputs/',
                                                         model_file_name))
    
        print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse))
    
  2. Отправьте скрипт train.py для выполнения в среде, управляемой пользователем. Для обучения отправляется вся папка скриптов.

    from azureml.core import ScriptRunConfig
    
    src = ScriptRunConfig(source_directory='./scripts', script='train.py', environment=user_managed_env)
    run = exp.submit(src)

    Параметр show_output включает подробное ведение журнала, что позволяет просматривать сведения из процесса обучения и сведения о удаленных ресурсах или целевых объектах вычислений. Используйте следующий код, чтобы включить подробное ведение журнала при отправке эксперимента.

    run = exp.submit(src, show_output=True)
    

    Этот же параметр вы можете указать в функции wait_for_completion для финального выполнения.

    run.wait_for_completion(show_output=True)
    

Собственное ведение журнала Python

Некоторые журналы, создаваемые с помощью пакета SDK, могут содержать сообщения об ошибках с предложением установить значение DEBUG для уровня ведения журнала. Чтобы изменить уровень ведения журнала, добавьте в скрипт приведенный ниже код.

import logging
logging.basicConfig(level=logging.DEBUG)

Другие источники ведения журнала

Машинное обучение Azure также может регистрировать сведения из других источников во время обучения, например автоматизированное машинное обучение или контейнеры Docker, выполняющие задания. Такие журналы не задокументированы, но если у вас возникли проблемы и вы обратились в службу поддержки Майкрософт, ее специалисты могут воспользоваться этими журналами для устранения неполадок.

См. дополнительные сведения о ведении журналов метрик в конструкторе Машинного обучения Azure.

Примеры записных книжек

Основные понятия, описанные в этой статье, демонстрируют следующие записные книжки:

Узнайте, как запускать записные книжки, следуя указаниям из статьи Использование записных книжек Jupyter в Машинном обучении Azure.

Дальнейшие шаги

Подробные сведения об использовании Машинного обучения Azure см. в следующих статьях: