BF16 frente a FP16 y FP8: ¿en qué formato debería entrenar?

Traducción automática

Este artículo se tradujo automáticamente a partir de la versión original en inglés.

Empieza con BF16 cuando la GPU y el entorno de entrenamiento lo admitan. Usa FP16 con escalado de la pérdida cuando BF16 no esté disponible o las mediciones de la carga de trabajo favorezcan FP16. Prueba FP8 mediante una implementación compatible de precisión mixta cuando el rendimiento del entrenamiento justifique las comprobaciones numéricas adicionales.

La precisión mixta utiliza formatos distintos para diferentes operaciones y estados. Elegir BF16 o FP8 no significa que todos los tensores utilicen ese formato.

El rango y la precisión resuelven problemas distintos

El exponente determina el rango de valores. Los bits de la fracción determinan lo próximos que pueden estar los valores representables. BF16 conserva el mismo número de bits del exponente que FP32, pero tiene menos bits de fracción. FP16 ofrece una precisión más fina que BF16 dentro de su rango más estrecho.

FormatoBits del exponente / de la fracciónConsideración práctica
BF168 / 7Rango amplio; suele evitar el escalado de la pérdida
FP165 / 10Los gradientes pequeños pueden sufrir subdesbordamiento; usa escalado de la pérdida
FP8 E4M34 / 3Más precisión que E5M2, menos rango
FP8 E5M25 / 2Rango más amplio para tensores como los gradientes

Con FP16, el escalado de la pérdida multiplica la pérdida antes del cálculo hacia atrás y revierte el escalado de los gradientes antes de la actualización del optimizador. Esto ayuda a mantener representables los gradientes pequeños. Aún hay que gestionar los desbordamientos.

La documentación de Transformer Engine de NVIDIA describe una configuración híbrida convencional de FP8: E4M3 para los tensores del cálculo hacia delante y E5M2 para los del cálculo hacia atrás, con un escalado elegido para los tensores. Los formatos de Blackwell con escalado por bloques añaden otras configuraciones; el soporte del hardware por sí solo no elige una para tu modelo.

Establece una referencia numérica

Ejecuta un tramo representativo de entrenamiento con el mismo orden de datos y la misma configuración del optimizador. Compara el uso máximo de memoria, el tiempo por paso, el comportamiento de la pérdida, los valores no finitos y la calidad en datos reservados para evaluación. Mantén las operaciones numéricamente sensibles y los estados del optimizador en la precisión que requiera la implementación.

Una ejecución más rápida que diverge o no cumple el requisito de calidad no reduce el coste del entrenamiento. Por otra parte, una referencia estable en BF16 puede ser suficiente sin añadir trabajo con FP8.

La sección sobre entrenamiento con precisión mixta de la LLM Engineering Guide incluye los rangos de los formatos y resultados de entrenamiento publicados.