Spec-Zone.ru › TensorFlow 2.9

tf.compat.v1.mixed_precision.enable_mixed_precision_graph_rewrite

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

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

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

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

tf.compat.v1.train.experimental.enable_mixed_precision_graph_rewrite

tf.compat.v1.mixed_precision.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([
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(64, activation='softmax'),
])

opt = tf.keras.optimizers.SGD()
opt = tf.train.experimental.enable_mixed_precision_graph_rewrite(opt)
model.compile(loss="mse", optimizer=opt)

x_train = np.random.random((1024, 64))
y_train = np.random.random((1024, 64))
model.fit(x_train, y_train)

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

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

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

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

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

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

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

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

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

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/compat/v1/mixed_precision/enable_mixed_precision_graph_rewrite

Spec-Zone.ru

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