В этом посте кратко рассматривается концепция профилирования и то, как профилировать модель глубокого обучения с помощью 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 в браузере, появится следующее окно.
Следующие подменю предназначены для анализа показателей модели, которые обычно используются для анализа производительности моделей:
- Скаляры и метрики (разработчик может добавить настраиваемые метрики для отслеживания с течением времени, например, скорость обучения. Нажмите здесь, чтобы узнать, как регистрировать пользовательский скаляр или метрику)
- Изображения/Текстовые данные(для просмотра входных изображений/текстовых данных, во-первых, вам нужно записать в лог-файлы. Отметьте здесь для изображений и здесь для текста, если вы хотите показывать изображения, даже создайте свою матрицу путаницы или просмотрите текстовые данные)
- Настройка гиперпараметров с помощью панели инструментов HParams (они должны быть зарегистрированы, иначе вы не увидите никакой информации на панели инструментов). Проверьте здесь.
- Визуализатор встраивания для отображения многомерных вложений (отметьте здесь)
- График вычислений (на этом графике показано, как выполняются операции для выполнения требуемых вычислений моделью в TensorFlow.)
Подробнее об инструментах, которые предоставляет Tensorboard, читайте здесь.
Однако для профилирования нам понадобится панель профилирования:
На странице обзоров TensorFlow дает рекомендации по улучшению производительности. Кроме того, показаны 10 лучших операций TensorFlow на GPU:
В левой части страницы профилирования есть инструменты для профилирования.
- Анализатор конвейера ввода предоставляет анализ и рекомендации для конвейера ввода модели.
- Статистика ядра: список ядер графического процессора с их потребностями в оборудовании, такими как количество регистров, байтов общей памяти и т. д.
- На вкладке Профиль памяти отображается временная шкала использования памяти с информацией о
- Статистика TensorFlow: содержит круговые диаграммы, показывающие время, затраченное на различные разделы. Кроме того, операции TensorFlow с количеством вхождений, общим временем и т. д. предлагаются в виде таблицы.
- Просмотр трассировки: показывает временную шкалу выполнения ядер и операций. Он раскрывает много информации о том, как TensorFlow выполняет нейронные сети.
Пример средства просмотра трассировки:
Больше увеличено:
Заключение
В этом посте мы рассмотрели профилирование в TensorFlow с помощью Tensorboard. Профилирование выполняется, чтобы найти потенциал оптимизации целевой программы для увеличения скорости.