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


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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

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

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

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

Совет

В этой статье демонстрируется, как обеспечить мониторинг для процесса обучения модели. Если вы заинтересованы в мониторинге использования ресурсов и событий из Машинное обучение 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()
Значение в журнале Пример кода Примечания.
Регистрация числового значения (int или float) mlflow.log_metric('my_metric', 1)
Регистрация логического значения mlflow.log_metric('my_metric', 0) 0 = истина, 1 = ложь
Регистрация строки mlflow.log_text('foo', 'my_string') Зарегистрировано как артефакт
Регистрация метрик NumPy или объектов образа PIL mlflow.log_image(img, 'figure.png')
Регистрация графика matlotlib или файла изображения 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

Примечание.

Словарь метрик в 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 см. в следующих статьях: