Визуализируйте задания и метрики экспериментов с помощью TensorBoard и Машинного обучения Azure
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
В этой статье вы узнаете, как просматривать задания и метрики экспериментов в TensorBoard с помощью пакета tensorboard
в основном пакете SDK Машинного обучения Azure. Изучив задания экспериментов, вы сможете лучше настроить и переобучить модели машинного обучения.
TensorBoard — это набор веб-приложений для проверки и понимания структуры и производительности эксперимента.
Способ запуска TensorBoard с экспериментами Машинного обучения Azure зависит от типа эксперимента.
Если ваш эксперимент самостоятельно выводит файлы журналов, которые могут использоваться TensorBoard, например PyTorch, Chain или TensorFlow, то можно запустить TensorBoard напрямую из журнала заданий эксперимента.
Для экспериментов, которые не выводят файлы, которые понимает TensorBoard, например Scikit-learn или Машинное обучение Azure, используйте метод
export_to_tensorboard()
, чтобы экспортировать журналы заданий в виде журналов TensorBoard, и запустите TensorBoard из них.
Совет
Сведения в этом документе предназначены главным образом для специалистов по обработке и анализу данных и разработчиков, желающих отслеживать процесс обучения модели. Если вы администратор, который хочет отслеживать использование ресурсов и событий, таких как квоты, завершенные задания обучения или завершенные развертывания моделей, из Машинного обучения Azure, ознакомьтесь с разделом Мониторинг Машинного обучения Azure.
Необходимые компоненты
- Чтобы запустить TensorBoard и просмотреть журналы заданий экспериментов, необходимо предварительно включить в экспериментах ведение журнала для отслеживания метрик и производительности.
- Код в этом документе можно запустить в любой из следующих сред:
- Машинное обучение Azure вычислительный экземпляр — загрузка или установка не требуется
- Завершите создание ресурсов, чтобы приступить к созданию выделенного сервера записной книжки, предварительно загруженного с помощью пакета SDK и примера репозитория.
- В папке примеров на сервере записной книжки найдите две завершенные и развернутые записные книжки, перейдя к этим каталогам:
- Пакет SDK версии 1>, как использовать azureml > track-and-monitor-experiments > tensorboard export-run-run-history-to-tensorboard > > export-run-run-history-to-tensorboard.ipynb
- Пакет SDK версии 1>, как использовать azureml > track-and-monitor-experiments > tensorboard tensorboard > tensorboard tensorboard.ipynb >
- Собственный сервер записной книжки Juptyer
- Машинное обучение Azure вычислительный экземпляр — загрузка или установка не требуется
Вариант 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
, который принимает журнал заданий эксперимента, загруженный в job
, а затем запускает TensorBoard с помощью метода start()
.
Конструктор TensorBoard принимает массив заданий, поэтому убедитесь, что задание передается в виде одноэлементного массива.
from azureml.tensorboard import Tensorboard
tb = Tensorboard([job])
# 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 and 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 для своих журналов заданий, чтобы определить области для потенциальной настройки и повторного обучения.
- Если вы удовлетворены вашей моделью, перейдите к статье Как развернуть модель.
- Дополнительные сведения о настройке гиперпараметров.