La idea clave: la mayoría de los cálculos de redes neuronales no necesitan 32 bits de precisión. Los pesos, activaciones y gradientes pueden representarse en 16 bits sin pérdida significativa de calidad. Pero algunas operaciones (cálculo de pérdida, actualización de pesos) necesitan mayor precisión para evitar inestabilidad numérica. La precisión mixta mantiene una copia maestra de los pesos en FP32 para las actualizaciones, mientras usa FP16/BF16 para los pases hacia adelante y hacia atrás.
FP16 (IEEE media precisión) tiene 5 bits de exponente y 10 bits de mantisa. BF16 (Brain Float 16) tiene 8 bits de exponente y 7 bits de mantisa. El rango de exponente más amplio de BF16 significa que puede representar el mismo rango de valores que FP32 (evitando desbordamiento), mientras que el rango más estrecho de FP16 requiere escalado de pérdida para evitar que los gradientes se desborden a cero. Para entrenamiento, BF16 es más simple y más estable. Para inferencia, FP16 a veces ofrece una precisión ligeramente mejor por el mismo costo de memoria.
Las GPUs más recientes (NVIDIA H100, H200) soportan FP8 (punto flotante de 8 bits) para un cálculo aún más rápido. FP8 reduce a la mitad la memoria y duplica el rendimiento en comparación con FP16, pero requiere un manejo cuidadoso para evitar la degradación de calidad. La práctica actual: entrenar en BF16, servir en FP16 o FP8, y cuantizar a INT4/INT8 para despliegue en el borde. Cada paso hacia abajo en precisión intercambia una pequeña cantidad de calidad por ganancias significativas en velocidad y memoria.