Home Ciencia y Tecnología Su guía única para todos los cambios de promoción de tipo en...

Su guía única para todos los cambios de promoción de tipo en TensorFlow 2.15

31
0

Descripción basic del contenido

  • Descripción basic
  • Configuración
  • Habilitar la promoción del nuevo tipo
  • Dos modos: todo modo vs modo seguro
  • Dtypes
  • Ejemplo de operaciones de pérdida de precisión
  • Ejemplo de operaciones de reducción de bits
  • Un sistema basado en una purple
  • Tipo de purple de promoción
  • Tabla de promoción de tipo
  • Ventajas de la nueva promoción de tipo
  • Tébalo
  • Descripción basic
  • Construcción de tébiltensor

Descripción basic

Hay 4 opciones para la promoción de tipos en TensorFlow.

  • Por defecto, TensorFlow aumenta los errores en lugar de promover tipos para operaciones de tipo mixto.
  • Correr tf.numpy.experimental_enable_numpy_behavior() Cambia de TensorFlow para usar reglas de promoción de tipo Numpy.
  • Este physician describe dos nuevas opciones que estarán disponibles en Tensorflow 2.15 (o actualmente en tf-nightly)
pip set up -q tf_nightly

Nota: experimental_enable_numpy_behavior Cambia el comportamiento de todo el flujo de tensor.

Configuración

import numpy as np
import tensorflow as tf
import tensorflow.experimental.numpy as tnp

print("Utilizing TensorFlow model %s" % tf.__version__)
Utilizing TensorFlow model 2.20.0-dev20250306

Habilitar la promoción del nuevo tipo

Para usar la promoción de tipo Jax tipo Jax en TF-Numpy, especifique 'all' o 'secure' Como el modo de conversión Dtype al habilitar el comportamiento numpy para TensorFlow.

Este nuevo sistema (con dtype_conversion_mode="all") es asociativo, conmutativo y facilita el management de qué ancho de flotación termina (no se convierte automáticamente en flotadores más anchos). Introduce algunos riesgos de desbordamientos y pérdida de precisión, pero dtype_conversion_mode="secure" te obliga a manejar esos casos explícitamente. Los dos modos se explican más en detalle en la siguiente sección.

tnp.experimental_enable_numpy_behavior(dtype_conversion_mode="all")
WARNING:tensorflow:UserWarning: enabling the brand new kind promotion should occur originally of this system. Please guarantee no TF APIs have been used but.

Dos modos: todo modo vs modo seguro

En el nuevo sistema de promoción de tipo, presentamos dos modos: ALL modo y SAFE modo. SAFE El modo se usa para mitigar las preocupaciones de las promociones “riesgosas” que pueden resultar en pérdida de precisión o reducción de bits.

Dtypes

Usaremos las siguientes abreviaturas para la brevedad.

  • b medio tf.bool
  • u8 medio tf.uint8
  • i16 medio tf.int16
  • i32 medio tf.int32
  • bf16 medio tf.bfloat16
  • f32 medio tf.float32
  • f64 medio tf.float64
  • i32* significa pitón int o débilmente tipado i32
  • f32* significa pitón float o débilmente tipado f32
  • c128* significa pitón complicated o débilmente tipado c128

El asterisco

Denota que el tipo correspondiente es “débil”: tal dtype es inferido temporalmente por el sistema y podría diferir a otros dtitipos. Este concepto se explica más en detalle aquí.

Ejemplo de operaciones de pérdida de precisión i32 En el siguiente ejemplo, f32 + + ALL está permitido en SAFE modo pero no en

# i32 + f32 returns a f32 lead to ALL mode.
tnp.experimental_enable_numpy_behavior(dtype_conversion_mode="all")
a = tf.fixed(10, dtype = tf.int32)
b = tf.fixed(5.0, dtype = tf.float32)
a + b  # 
WARNING:tensorflow:UserWarning: enabling the brand new kind promotion should occur originally of this system. Please guarantee no TF APIs have been used but.
WARNING: All log messages earlier than absl::InitializeLog() is known as are written to STDERR
I0000 00:00:1741314679.354086   16587 gpu_device.cc:2018] Created gadget /job:localhost/duplicate:0/process:0/gadget:GPU:0 with 13638 MB reminiscence:  -> gadget: 0, identify: Tesla T4, pci bus id: 0000:00:05.0, compute functionality: 7.5
I0000 00:00:1741314679.356319   16587 gpu_device.cc:2018] Created gadget /job:localhost/duplicate:0/process:0/gadget:GPU:1 with 13756 MB reminiscence:  -> gadget: 1, identify: Tesla T4, pci bus id: 0000:00:06.0, compute functionality: 7.5
I0000 00:00:1741314679.358627   16587 gpu_device.cc:2018] Created gadget /job:localhost/duplicate:0/process:0/gadget:GPU:2 with 13756 MB reminiscence:  -> gadget: 2, identify: Tesla T4, pci bus id: 0000:00:07.0, compute functionality: 7.5
I0000 00:00:1741314679.360752   16587 gpu_device.cc:2018] Created gadget /job:localhost/duplicate:0/process:0/gadget:GPU:3 with 13756 MB reminiscence:  -> gadget: 3, identify: Tesla T4, pci bus id: 0000:00:08.0, compute functionality: 7.5

# This promotion is just not allowed in SAFE mode.
tnp.experimental_enable_numpy_behavior(dtype_conversion_mode="secure")
a = tf.fixed(10, dtype = tf.int32)
b = tf.fixed(5.0, dtype = tf.float32)
attempt:
  a + b
besides TypeError as e:
   print(f'{kind(e)}: {e}')  # TypeError: explicitly specify the dtype or swap to ALL mode.
WARNING:tensorflow:UserWarning: enabling the brand new kind promotion should occur originally of this system. Please guarantee no TF APIs have been used but.
: In promotion mode PromoMode.SAFE, implicit dtype promotion between (, weak=False) and (, weak=False) is disallowed. You must explicitly specify the dtype in your op, or loosen up your dtype promotion guidelines (akin to from SAFE mode to ALL mode).

modo Debido al riesgo de pérdida de precisión.

Ejemplo de operaciones de reducción de bits i8 En el siguiente ejemplo, u32 + + ALL está permitido en SAFE modo pero no en

# i8 + u32 returns an i64 lead to ALL mode.
tnp.experimental_enable_numpy_behavior(dtype_conversion_mode="all")
a = tf.fixed(10, dtype = tf.int8)
b = tf.fixed(5, dtype = tf.uint32)
a + b
WARNING:tensorflow:UserWarning: enabling the brand new kind promotion should occur originally of this system. Please guarantee no TF APIs have been used but.

# This promotion is just not allowed in SAFE mode.
tnp.experimental_enable_numpy_behavior(dtype_conversion_mode="secure")
a = tf.fixed(10, dtype = tf.int8)
b = tf.fixed(5, dtype = tf.uint32)
attempt:
  a + b
besides TypeError as e:
   print(f'{kind(e)}: {e}')  # TypeError: explicitly specify the dtype or swap to ALL mode.
WARNING:tensorflow:UserWarning: enabling the brand new kind promotion should occur originally of this system. Please guarantee no TF APIs have been used but.
: In promotion mode PromoMode.SAFE, implicit dtype promotion between (, weak=False) and (, weak=False) is disallowed. You must explicitly specify the dtype in your op, or loosen up your dtype promotion guidelines (akin to from SAFE mode to ALL mode).

Modo debido al aumento de bits, lo que significa usar más bits que el número de bits en las entradas. Tenga en cuenta que la semántica de promoción del nuevo tipo solo permite el nivel de bits necesario.

Un sistema basado en una purple

Tipo de purple de promoción

El nuevo comportamiento de promoción de tipo se determina a través de la siguiente purple de promoción de tipo:

Más específicamente, la promoción entre dos tipos se determina al encontrar el primer niño común de los dos nodos (incluidos los nodos). i8 Por ejemplo, en el diagrama anterior, el primer niño común de i32 y i32 es i32 Porque los dos nodos se cruzan por primera vez en

cuando sigue la dirección de las flechas. u64 Del mismo modo como otro ejemplo, el tipo de promoción de resultados entre f16 y f16sería

.

Tabla de promoción de tipo

Seguir la purple genera la tabla de promoción binaria a continuación: Nota:SAFE ALL El modo no permite las celdas resaltadas.

El modo permite todos los casos.

Adoptamos un sistema basado en redes tipo Jax para nuestra nueva promoción de tipo, que ofrece las siguientes ventajas:

Ventajas del sistema basado en la purple

  • Primero, el uso de un sistema basado en la purple garantiza tres propiedades muy importantes:
  • Existencia: hay un tipo de promoción de resultados único para cualquier combinación de tipos. a + b = b + a
  • Commutatividad: a + (b + c) = (a + b) = c

Asociatividad:

Estas tres propiedades son críticas para construir una semántica de promoción de tipo que sea consistente y predecible.

Ventajas del sistema de celosía tipo Jax

Otra ventaja essential del sistema de celosía tipo JAX es que fuera de los ints sin firmar, evita todas las promociones más amplias de lo que nota. Esto significa que no puede obtener resultados de 64 bits sin entradas de 64 bits. Esto es especialmente beneficioso para trabajar en aceleradores, ya que evita valores innecesarios de 64 bits, lo que fue frecuente en la promoción de tipo anterior. i64 Sin embargo, esto viene con una compensación: la promoción de flotantes/enteros mixtos es muy propenso a la pérdida de precisión. Por ejemplo, en el ejemplo a continuación, f16 + + i64 Resulta en la promoción f16a

# The primary enter is promoted to f16 in ALL mode.
tnp.experimental_enable_numpy_behavior(dtype_conversion_mode="all")
tf.fixed(1, tf.int64) + tf.fixed(3.2, tf.float16)  # 
WARNING:tensorflow:UserWarning: enabling the brand new kind promotion should occur originally of this system. Please guarantee no TF APIs have been used but.

. SAFE Para migrar esta preocupación, presentamos un

modo que rechazará estas promociones “riesgosas”.

Tébalo

Descripción basic Tensores débiles

WeakTensorson tensores que están “débilmente escritos”, similares a un concepto en Jax.

El sistema infere temporalmente por el sistema y podría diferir a otros dtypes. Este concepto se introduce en el nuevo tipo de promoción para evitar la promoción del tipo no deseado dentro de las operaciones binarias entre los valores y valores de TF sin tipo explícitamente especificado por el usuario, como literales escalares de Python. tf.fixed(1.2) Por ejemplo, en el ejemplo a continuación, tf.fixed(1.2) se considera “débil” porque no tiene un dtype específico. Por lo tanto, tf.fixed(3.1, tf.float16)defiende al tipo de f16 resultando en un

tf.fixed(1.2) + tf.fixed(3.1, tf.float16)  # 

producción.

Construcción de tébiltensor

Se crean tídicos si crea un tensor sin especificar un dtype, el resultado es un tébiltensor. Puede verificar si un tensor es “débil” o no verificando el atributo débil al last de la representación de la cadena del tensor.Primer caso tf.fixed : Cuando

tf.fixed(5)  # 

se llama con una entrada sin dtype especificado por el usuario.[5.0, 10.0, 3]tf.fixed ([" weak="True">

# A normal Tensor is created when dtype arg is specified.
tf.constant(5, tf.int32)  # 

Second Case: When an input with no user-specified dtype is passed into a WeakTensor-supporting API.

tf.math.abs([100.0, 4.0]) # 

) # Publicado originalmente en el Flujo tensor

Sitio internet, este artículo aparece aquí en un nuevo titular y tiene licencia bajo CC por 4.0. Muestras de código compartidas bajo la licencia Apache 2.0.

fuente

LEAVE A REPLY

Please enter your comment!
Please enter your name here