В этом посте кратко рассматривается концепция профилирования и то, как профилировать модель глубокого обучения с помощью TensorFlow.

Почему профилирование?

Профилирование компьютерной программы направлено на то, чтобы узнать больше о ее поведении. Понимая поведение программы, разработчики могут оптимизировать ее, что приведет к повышению производительности. Кроме того, профилируя программу, разработчик обнаружит узкие места программы. Например, предположим, что для модели после ее профилирования мы выясняем, что 90% времени ее выполнения тратится на ожидание предварительно обработанных входных данных. В этом случае это показывает, что предварительная обработка данных является узким местом. Если мы сможем оптимизировать этот шаг, мы получим огромное ускорение. В другом сценарии учтите, что большая часть времени выполнения тратится на вычисления, такие как операции с плавающей запятой. В этом случае методы оптимизации, такие как смешанная точность, могут привести к значительному ускорению, поскольку они выполняют меньше вычислений, сохраняя при этом приемлемое качество вычислений.

Предпосылки

Для профилирования с помощью TensorFlow требуются следующие пакеты:

pip install tensorboard
pip install -U tensorboard_plugin_profile

Для удаленного просмотра TensorBoard в локальном браузере проверьте следующий пост.



Как профилировать с помощью TensorFlow?

Для профилирования с помощью TensorFlow нам нужно создать и добавить обратный вызов в функцию fir нашей модели. Рассмотрим следующий пример.

import tensorflow as tf
import tensorflow_datasets as tfds
import keras
import numpy as np
import datetime
from datetime import datetime
from packaging import version
import os

print(“TensorFlow version: “, tf.__version__)
device_name = tf.test.gpu_device_name()
if not device_name:
   raise SystemError(‘GPU device not found’)
   print(‘Found GPU at: {}’.format(device_name))
tfds.disable_progress_bar()
(ds_train, ds_test), ds_info = tfds.load(‘mnist’, split=[‘train’, ‘test’], shuffle_files=True, as_supervised=True, with_info=True)

def normalize_img(image, label):
“””Normalizes images: `uint8` -> `float32`.”””
    return tf.cast(image, tf.float32) / 255., label
ds_train = ds_train.map(normalize_img)
ds_train = ds_train.batch(128)
ds_test = ds_test.map(normalize_img)
ds_test = ds_test.batch(128)

model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28, 1)),
#tf.keras.layers.Dense(128,activation=’relu’),
tf.keras.layers.Dense(10, activation=’softmax’)
])

model.compile(
loss=’sparse_categorical_crossentropy’,
optimizer=tf.keras.optimizers.Adam(0.001),
metrics=[‘accuracy’]
)

# Create a TensorBoard callback
logs = “logs/” + datetime.now().strftime(“%Y%m%d-%H%M%S”)
tboard_callback = tf.keras.callbacks.TensorBoard(log_dir = logs, histogram_freq = 1, profile_batch = ‘500,520’)
model.fit(ds_train, epochs=10, validation_data=ds_test, callbacks = [tboard_callback])

Что мы можем получить от профилирования с помощью TensorFlow?

Открыв TensorBoard в браузере, появится следующее окно.

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

  1. Скаляры и метрики (разработчик может добавить настраиваемые метрики для отслеживания с течением времени, например, скорость обучения. Нажмите здесь, чтобы узнать, как регистрировать пользовательский скаляр или метрику)
  2. Изображения/Текстовые данные(для просмотра входных изображений/текстовых данных, во-первых, вам нужно записать в лог-файлы. Отметьте здесь для изображений и здесь для текста, если вы хотите показывать изображения, даже создайте свою матрицу путаницы или просмотрите текстовые данные)
  3. Настройка гиперпараметров с помощью панели инструментов HParams (они должны быть зарегистрированы, иначе вы не увидите никакой информации на панели инструментов). Проверьте здесь.
  4. Визуализатор встраивания для отображения многомерных вложений (отметьте здесь)
  5. График вычислений (на этом графике показано, как выполняются операции для выполнения требуемых вычислений моделью в TensorFlow.)

Подробнее об инструментах, которые предоставляет Tensorboard, читайте здесь.

Однако для профилирования нам понадобится панель профилирования:

На странице обзоров TensorFlow дает рекомендации по улучшению производительности. Кроме того, показаны 10 лучших операций TensorFlow на GPU:

В левой части страницы профилирования есть инструменты для профилирования.

  1. Анализатор конвейера ввода предоставляет анализ и рекомендации для конвейера ввода модели.
  2. Статистика ядра: список ядер графического процессора с их потребностями в оборудовании, такими как количество регистров, байтов общей памяти и т. д.
  3. На вкладке Профиль памяти отображается временная шкала использования памяти с информацией о
  4. Статистика TensorFlow: содержит круговые диаграммы, показывающие время, затраченное на различные разделы. Кроме того, операции TensorFlow с количеством вхождений, общим временем и т. д. предлагаются в виде таблицы.
  5. Просмотр трассировки: показывает временную шкалу выполнения ядер и операций. Он раскрывает много информации о том, как TensorFlow выполняет нейронные сети.

Пример средства просмотра трассировки:

Больше увеличено:

Заключение

В этом посте мы рассмотрели профилирование в TensorFlow с помощью Tensorboard. Профилирование выполняется, чтобы найти потенциал оптимизации целевой программы для увеличения скорости.

Рекомендации