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


Визуализируйте задания и метрики экспериментов с помощью TensorBoard и Машинного обучения Azure

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

Это важно

В этой статье содержатся сведения об использовании пакета 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.

В этой статье вы узнаете, как просматривать задания и метрики экспериментов в TensorBoard с помощью пакета tensorboard в основном пакете SDK Машинного обучения Azure. Изучив задания экспериментов, вы сможете лучше настроить и переобучить модели машинного обучения.

TensorBoard — это набор веб-приложений для проверки и понимания структуры и производительности эксперимента.

Способ запуска TensorBoard с экспериментами Машинного обучения Azure зависит от типа эксперимента.

  • Если эксперимент изначально выводит файлы журналов, которые используются TensorBoard, например PyTorch, Chainer и TensorFlow экспериментов, можно запустить TensorBoard непосредственно из журнала заданий эксперимента.

  • Для экспериментов, которые не выходные файлы TensorBoard, используемые в собственном коде, такие как Scikit-learn или эксперименты машинного обучения Azure, используйте export_to_tensorboard() метод для экспорта журналов заданий в виде журналов TensorBoard и запуска TensorBoard оттуда.

Совет

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

Предварительные условия

  • Чтобы запустить TensorBoard и просмотреть журналы заданий эксперимента, ранее включено ведение журнала для отслеживания метрик и производительности.
  • Код в этом документе можно запустить в любой из следующих сред:

Вариант 1. Просмотр журнала заданий непосредственно в TensorBoard

Этот параметр используется для экспериментов, которые изначально выводят файлы журнала, используемые TensorBoard, такие как PyTorch, Chainer и TensorFlow эксперименты. Если это не так для эксперимента, используйте export_to_tensorboard() вместо него метод.

В следующем примере кода используется демонстрационный эксперимент MNIST из репозитория TensorFlow в удаленном целевом объекте вычислений среды Машинного обучения Azure. Затем мы настроим и запустите задание для обучения модели TensorFlow, а затем запустите TensorBoard для этого эксперимента TensorFlow.

Задание имени эксперимента и создание папки проекта

Здесь мы дадим эксперименту имя и создадим для него папку.

from os import path, makedirs
experiment_name = 'tensorboard-demo'

# experiment folder
exp_dir = './sample_projects/' + experiment_name

if not path.exists(exp_dir):
    makedirs(exp_dir)

Загрузка демонстрационного кода эксперимента TensorFlow

В репозитории TensorFlow есть демонстрационная версия MNIST с расширенными инструментами TensorBoard. Для работы с машинным обучением Azure не требуется изменять код этой демонстрации. В следующем коде мы скачиваем код MNIST и сохраняем его во вновь созданную папку эксперимента.

import requests
import os

tf_code = requests.get("https://raw.githubusercontent.com/tensorflow/tensorflow/r1.8/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py")
with open(os.path.join(exp_dir, "mnist_with_summaries.py"), "w") as file:
    file.write(tf_code.text)

В файле кода MNIST mnist_with_summaries.py обратите внимание на строки, в которых вызываются методы tf.summary.scalar(), tf.summary.histogram(), tf.summary.FileWriter() и т. д. Эти методы группируют, регистрируют и помечают ключевые метрики экспериментов в журнале заданий. Это tf.summary.FileWriter() особенно важно, так как он сериализует данные из метрики зарегистрированных экспериментов, что позволяет TensorBoard создавать визуализации из них.

Настройка эксперимента

Ниже мы настроим эксперимент и укажем каталоги для журналов и данных. Эти журналы отправляются в журнал заданий, к которому tensorBoard обращается позже.

Примечание.

Для этого примера необходимо установить TensorFlow на локальном компьютере. Кроме того, модуль TensorBoard (то есть модуль, входящий в состав TensorFlow) должен быть доступен для ядра этой записной книжки, так как TensorBoard выполняется именно на локальном компьютере.

import azureml.core
from azureml.core import Workspace
from azureml.core import Experiment

ws = Workspace.from_config()

# create directories for experiment logs and dataset
logs_dir = os.path.join(os.curdir, "logs")
data_dir = os.path.abspath(os.path.join(os.curdir, "mnist_data"))

if not path.exists(data_dir):
    makedirs(data_dir)

os.environ["TEST_TMPDIR"] = data_dir

# Writing logs to ./logs results in their being uploaded to the job history,
# and thus, made accessible to our TensorBoard instance.
args = ["--log_dir", logs_dir]

# Create an experiment
exp = Experiment(ws, experiment_name)

Создание кластера для эксперимента

Мы создадим кластер AmlCompute для этого эксперимента, однако ваши эксперименты можно создать в любой среде, и вы по-прежнему можете запустить TensorBoard в журнале заданий эксперимента.

from azureml.core.compute import ComputeTarget, AmlCompute

cluster_name = "cpu-cluster"

cts = ws.compute_targets
found = False
if cluster_name in cts and cts[cluster_name].type == 'AmlCompute':
   found = True
   print('Found existing compute target.')
   compute_target = cts[cluster_name]
if not found:
    print('Creating a new compute target...')
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2', 
                                                           max_nodes=4)

    # create the cluster
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

compute_target.wait_for_completion(show_output=True, min_node_count=None)

# use get_status() to get a detailed status for the current cluster. 
# print(compute_target.get_status().serialize())

Настройка и отправка задания на выполнение обучения

Настройте задание обучения, создав объект ScriptRunConfig.

from azureml.core import ScriptRunConfig
from azureml.core import Environment

# Here we will use the TensorFlow 2.2 curated environment
tf_env = Environment.get(ws, 'AzureML-TensorFlow-2.2-GPU')

src = ScriptRunConfig(source_directory=exp_dir,
                      script='mnist_with_summaries.py',
                      arguments=args,
                      compute_target=compute_target,
                      environment=tf_env)
run = exp.submit(src)

Запустите TensorBoard

Вы можете запустить TensorBoard во время выполнения или после завершения. В следующем примере мы создадим экземпляр объекта TensorBoard, который принимает журнал заданий эксперимента, tbзагруженный в файл run, а затем запустите TensorBoard с start() помощью метода.

Конструктор TensorBoard принимает массив запусков, поэтому обязательно передайте его в виде массива с одним элементом.

from azureml.tensorboard import Tensorboard

tb = Tensorboard([run])

# If successful, start() returns a string with the URI of the instance.
tb.start()

# After your job completes, be sure to stop() the streaming otherwise it will continue to run. 
tb.stop()

Примечание.

Хотя в этом примере мы использовали TensorFlow, вы можете с такой же легкостью использовать TensorBoard с PyTorch или Chainer. TensorFlow должен быть доступен на компьютере с TensorBoard, но не обязательно на компьютере, выполняющем вычисления PyTorch или Chainer.

Вариант 2. Экспорт истории в виде журнала для просмотра в TensorBoard

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

Настройка эксперимента

Следующий код настраивает новый эксперимент и присваивает каталогу задания имя root_run.

from azureml.core import Workspace, Experiment
import azureml.core

# set experiment name and job name
ws = Workspace.from_config()
experiment_name = 'export-to-tensorboard'
exp = Experiment(ws, experiment_name)
root_run = exp.start_logging()

Здесь мы загружаем набор данных диабета — встроенный небольшой набор данных, который поставляется с scikit-learn, и разделим его на тестовые и обучающие наборы.

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
X, y = load_diabetes(return_X_y=True)
columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
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}
}

Запуск эксперимента и регистрация метрик

Для этого кода мы обучаем модель линейной регрессии и регистрируем в журнале выполнения ключевые метрики, альфа-коэффициент alpha и среднеквадратическую ошибку mse.

from tqdm import tqdm
alphas = [.1, .2, .3, .4, .5, .6 , .7]
# try a bunch of alpha values in a Linear Regression (aka Ridge regression) mode
for alpha in tqdm(alphas):
  # create child runs and fit lines for the resulting models
  with root_run.child_run("alpha" + str(alpha)) as run:
 
   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"])
   # End train and eval

# log alpha, mean_squared_error and feature names in run history
   root_run.log("alpha", alpha)
   root_run.log("mse", mse)

Экспорт заданий в TensorBoard

С помощью метода export_to_tensorboard() пакета SDK мы можем экспортировать журнал заданий эксперимента Машинного обучения Azure в журналы TensorBoard, чтобы просмотреть их с помощью TensorBoard.

В следующем коде мы создаем папку logdir в текущем рабочем каталоге. В этой папке мы экспортируем журнал заданий эксперимента и журналы, root_run а затем помечаем это задание как завершенное.

from azureml.tensorboard.export import export_to_tensorboard
import os

logdir = 'exportedTBlogs'
log_path = os.path.join(os.getcwd(), logdir)
try:
    os.stat(log_path)
except os.error:
    os.mkdir(log_path)
print(logdir)

# export job history for the project
export_to_tensorboard(root_run, logdir)

root_run.complete()

Примечание.

Можно также экспортировать в TensorBoard определенный запуск, указав имя запуска: export_to_tensorboard(run_name, logdir)

Запуск и остановка TensorBoard

После экспорта журнала заданий для этого эксперимента можно запустить TensorBoard с помощью метода start().

from azureml.tensorboard import Tensorboard

# The TensorBoard constructor takes an array of jobs, so be sure to pass it in as a single-element array here
tb = Tensorboard([], local_root=logdir, port=6006)

# If successful, start() returns a string with the URI of the instance.
tb.start()

По завершении убедитесь, что вызвали метод stop() объекта TensorBoard. В противном случае TensorBoard продолжает работать, пока не завершите работу ядра записной книжки.

tb.stop()

Следующие шаги

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