Spec-Zone.ru › TensorFlow 1.15

tf.train.experimental.enable_mixed_precision_graph_rewrite

Просмотреть исходный код на GitHub

Включить смешанную точность с помощью переписывания графа.

Просмотр псевдонимов

Псевдонимы совместимости для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.train.experimental.enable_mixed_precision_graph_rewrite

tf.train.experimental.enable_mixed_precision_graph_rewrite(
    opt, loss_scale='dynamic'
)

Смешанная точность — это использование типов данных float32 и float16 при обучении модели для повышения производительности. Это достигается с помощью операции переписывания графа и оптимизатора с масштабированием потерь.

Выполнение арифметических операций с типом float16 использует специализированные вычислительные блоки, такие как NVIDIA Tensor Cores, для существенно большей производительности арифметических операций. Однако из-за меньшего диапазона представимых значений выполнение всего обучения с типом float16 может привести к переполнению градиента, то есть к преобразованию небольших значений градиента в нули. Вместо этого выполнение только некоторых арифметических операций в формате float16 приводит к большей пропускной способности и уменьшению времени обучения при использовании совместимых аппаратных ускорителей, а также к снижению использования памяти, обычно без потери точности модели.

Примечание: Хотя переписывание смешанной точности изменяет тип данных различных слоёв модели, ожидается достижение той же точности, что и при использовании float32. Если при динамическом масштабировании потерь произойдёт NaN градиента, обновление модели для этой пакетной обработки пропускается. В этом случае счётчик глобальных шагов не увеличивается, и LossScaleOptimizer пытается уменьшить значение масштабирования потерь, чтобы избежать NaN значений в последующих итерациях. Этот подход показал достижение той же точности, что и float32, и в большинстве случаев лучшей производительности обучения.

Пример:

model = tf.keras.models.Sequential([
  ...
])

opt = tf.keras.optimizers.SGD()
opt = tf.train.experimental.enable_mixed_precision_graph_rewrite(opt)

model.compile(loss="categorical_crossentropy",
            optimizer=opt,
            metrics=["accuracy"])

model.fit(x_train, y_train,
        batch_size=batch_size,
        epochs=epochs)

Для получения полного примера, демонстрирующего ускорение при обучении задачи классификации изображений на CIFAR10, ознакомьтесь с этим блокнотом Colab.

Вызов enable_mixed_precision_graph_rewrite(opt) включает операцию переписывания графа перед вычислением градиентов. Функция также возвращает Optimizer(opt) в обёртке LossScaleOptimizer. Это предотвращает переполнение тензоров float16 во время обратного прохода.

Оптимизатор типа tf.train.Optimizer или tf.keras.optimizers.Optimizer должен быть передан в эту функцию, которая затем будет обернута для использования масштабирования потерь.

http://developer.download.nvidia.com/compute/machine-learning/frameworks/ TF_mixed_precision_training.png" width="500px">

Операция переписывания графа изменяет dtype некоторых операций в графе с float32 на float16. Существует несколько категорий операций, которые либо включены, либо исключены этой операцией переписывания. Следующие категории операций определены внутри соответствующих функций в классе AutoMixedPrecisionLists в auto_mixed_precision_lists.h:

  • ClearList: Операции, которые не оказывают значительного негативного влияния на точность. Например, ArgMax и Floor.
  • WhiteList: Операции, которые считаются числовыми безопасными для выполнения в float16 и, следовательно, всегда преобразуются. Например, Conv2D.
  • BlackList: Операции, которые числово небезопасны для выполнения в float16 и могут негативно повлиять на последующие узлы. Например, Softmax.
  • GrayList: Операции, которые считаются числово безопасными для выполнения в float16, если они не расположены ниже узла в списке BlackList. Например, Add и AvgPool.

При использовании этой функции градиенты должны вычисляться и применяться только с возвращенным оптимизатором, вызывая либо opt.minimize() либо opt.compute_gradients(), за которым следует opt.apply_gradients(). Градиенты не должны вычисляться с помощью tf.gradients или tf.GradientTape. Это связано с тем, что возвращенный оптимизатор применяет масштабирование потерь, а tf.gradients или tf.GradientTape — нет. Если вы напрямую используете tf.gradients или tf.GradientTape, ваша модель может не сойтись из-за проблем с переполнением float16.

При включенном режиме Eager execution переписывание графа смешанной точности включено только в рамках tf.function, так как вне tf.function графа нет.

Для NVIDIA GPU с Tensor Cores в качестве общего руководства по производительности размеры (такие как размер пакета, размер входных данных, размер выходных данных и количество каналов) должны быть степенями двойки, если они меньше 256, или в противном случае делиться на 8, если они больше 256. Для получения дополнительной информации ознакомьтесь с Руководством NVIDIA по производительности в глубоком обучении.

В настоящее время смешанная точность включена только на NVIDIA Tensor Core GPU с вычислительной способностью 7.0 и выше (Volta, Turing или более новые архитектуры). Части графа на процессорах CPU и TPU не затрагиваются операцией переписывания. Поддержка TPU появится в ближайшее время. Поддержка процессоров CPU не предусмотрена, так как процессоры CPU не выполняют операции float16 быстрее, чем операции float32.

Возможные исключения
ValueError когда mixed_precision_global_state.using_default_mixed_precision_policy установлено в False до вызова tf.train.experimental.enable_mixed_precision_graph_rewrite().
Аргументы
opt Экземпляр tf.keras.optimizers.Optimizer или tf.train.Optimizer.
loss_scale Целое/вещественное число, строка "dynamic", или экземпляр tf.train.experimental.LossScale. Масштаб потерь для использования. Рекомендуется оставлять значение по умолчанию "dynamic", которое будет автоматически корректировать масштабирование, чтобы избежать Inf или NaN значений.
Возвращаемое значение
Версия opt, которая будет использовать масштабирование потерь для предотвращения переполнения.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/train/experimental/enable_mixed_precision_graph_rewrite

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API