El formato numérico bfloat16

El uso de números de punto flotante de precisión reducida es un método común que se utiliza para disminuir el tiempo hasta la convergencia sin perder exactitud. Las TPU usan el formato de número bfloat16 cuando realizan operaciones de matriz. Las operaciones de multiplicación de matrices se realizan en valores bfloat16 y las acumulaciones se realizan en valores float32 de IEEE.

bfloat16 es un formato personalizado de punto flotante de 16 bits para el aprendizaje automático que consta de un bit de signo, ocho bits de exponente y siete mantisas. En el siguiente diagrama, se muestran los componentes internos de tres formatos de punto flotante: float32: precisión simple de IEEE, float16: precisión de IEEE y bfloat16.

imagen

El rango dinámico de bfloat16 es el mismo que float32 y requiere la mitad de memoria. Investigación muestra que el formato bfloat16 converge y el formato float32, mientras entrega un mayor rendimiento y reduce el uso de memoria.

Elige bfloat16

El equipo de hardware de Google eligió bfloat16 para Cloud TPU a fin de mejorar la eficiencia del hardware y, al mismo tiempo, mantener la capacidad de entrenar modelos de aprendizaje profundo con precisión, todo con costos de cambio mínimos desde float32. El tamaño físico de un multiplicador de hardware escala con el cuadrado del ancho de la mantisa. Con menos bits de mantisa que FP16, los multiplicadores bfloat16 son aproximadamente la mitad del tamaño en silicio de un multiplicador FP16 típico, y son ocho veces más pequeños que un float32 multiplicador.

Las redes neuronales son mucho más sensibles al tamaño del exponente que a la mantisa. Para garantizar un comportamiento idéntico para subdesbordamientos, desbordamientos y NaNs, bfloat16 tiene el mismo tamaño de exponente que float32. bfloat16 controla las desnormales de manera diferente a float32 y las limpia a cero. A diferencia de float16, que por lo general requiere un control especial, como el escalamiento de pérdida, bfloat16 es un reemplazo directo para float32 cuando se entrena y ejecuta redes neuronales profundas.

Entrenamiento en precisión mixta

Para la mayoría de los cálculos dentro de una red neuronal profunda, no es esencial calcular, por ejemplo, el 18.o dígito de cada número. la red puede realizar una tarea con la misma precisión usando una aproximación de menor precisión. Algunos modelos pueden alcanzar una mayor precisión con una precisión menor.

Cuando se programan Cloud TPU, el entorno de ejecución del TPU proporciona una conversión de formato automática. El compilador de XLA convierte los valores entre float32 y bfloat16 sin problemas. Esto te permite escribir modelos con el formato float32 de forma predeterminada y obtener algunos beneficios de rendimiento sin ningún cambio en el código.

Portabilidad del modelo

Los valores de los parámetros y las activaciones en un modelo se pueden almacenar en formato completo de 32 bits porque el hardware de TPU puede convertir estos valores automáticamente en bfloat16. 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 en CPU o GPU) sin extensas conversiones manuales.

Mejora el rendimiento con bfloat16

Si bien la conversión de formato automática en las TPU te permite evitar pensar en la precisión numérica, se pueden lograr otras mejoras de rendimiento mediante la conversión explícita de valores en bfloat16. Existen dos motivos para convertir valores explícitos en bfloat16:

  1. El almacenamiento de valores en formato bfloat16 ahorra memoria en 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 los operandos y los 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 obtengas experiencia práctica con uno de los modelos de referencia habilitados con bfloat16 que optimizamos para Cloud TPU. Luego, nuestra guía de rendimiento, 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 la máquina. por tu cuenta.