Mejora el rendimiento de tu modelo con bfloat16

De forma predeterminada, las TPU realizan operaciones de multiplicación de matrices con valores bfloat16 y acumulaciones con valores float32 de IEEE. El uso de números de punto flotante de precisión reducida disminuye el tiempo de convergencia sin perder precisión.

El rango dinámico de bfloat16 y float32 es equivalente. Sin embargo, bfloat16 usa la mitad del espacio de memoria. Para obtener más información sobre el rendimiento de bfloat16, consulta A Study of BFLOAT16 for Deep Learning Training.

Usa bfloat16 de forma explícita

Si bien la conversión automática de formato en las TPUs te permite evitar pensar en la precisión numérica, puedes lograr mejoras de rendimiento asignando valores de forma explícita a bfloat16. Existen dos motivos para transmitir valores de forma explícita a bfloat16:

  1. El almacenamiento de valores en formato bfloat16 ahorra memoria en el chip, lo que permite que las Cloud TPU entrenen modelos más grandes o usen tamaños de lotes más grandes.

  2. Algunas operaciones dependen del ancho de banda de la memoria, lo que significa que la cantidad de tiempo que se tarda en cargar datos desde la memoria puede ralentizar el tiempo total dedicado a realizar el cálculo. El almacenamiento de operandos y resultados de esas operaciones en formato bfloat16 reduce la cantidad de datos que se deben transferir, lo que mejora la velocidad general.

Para comenzar, te recomendamos que adquieras experiencia con uno de los modelos de referencia de Cloud TPU. Luego, la guía de herramientas de generación de perfiles y la guía de solución de problemas proporcionan información técnica detallada para ayudarte a crear y optimizar modelos de aprendizaje automático por tu cuenta.

Detalles de la conversión de formato

El compilador XLA inserta automáticamente la conversión de formato de float32 a bfloat16. En TPU, el esquema de redondeo en la conversión es redondear al número par más cercano y desbordar a inf. Además, bfloat16 en Cloud TPU no admite números subnormales, por lo que todos se restablecen a cero durante la conversión. Los valores especiales, como NaN y inf, se conservan en la conversión.

El compilador XLA también inserta automáticamente la conversión de formato de bfloat16 a float32. Dado que float32 puede representar todos los valores exactos en bfloat16, la conversión agrega 16 ceros en los bits de mantisa. Los valores especiales se conservan en la conversión.

Los puntos de control obtenidos de un modelo entrenado en Cloud TPU se pueden implementar en otras plataformas de hardware (por ejemplo, inferencia o ajuste fino en CPUs o GPUs) sin conversiones manuales extensas.