Visualizador de patrones de bits FP16 y bfloat16

Visualiza los patrones de bits de coma flotante de media precisión (FP16, IEEE 754 binary16) y bfloat16. Convierte de decimal a bits y viceversa, con el signo, exponente y mantisa resaltados en colores. Útil para aprender sobre cuantización de ML y aceleración de inferencia.

Estructura de FP16 frente a bfloat16

Ambos formatos suman 16 bits en total, pero reparten esos bits entre exponente y mantisa de forma muy distinta, dando a cada uno un rango representable y una precisión muy diferentes.

Elemento FP16 (IEEE 754 media precisión) bfloat16
Bits totales 16 16
Bits de exponente 5 8
Bits de mantisa 10 7
Rango representable Aproximadamente ±6.1×10⁻⁵ a ±65504 (rango más estrecho, pero más bits de mantisa para precisión) Aproximadamente ±1.2×10⁻³⁸ a ±3.4×10³⁸ (mismo rango amplio que float32, pero menor precisión)
Uso principal Procesamiento de imágenes, gráficos e inferencia eficiente en memoria (entrenamiento en media precisión) Entrenamiento de deep learning (TPU y GPU modernas) — sin preocuparse por el desbordamiento del exponente al convertir desde float32

bfloat16 comparte el ancho de exponente (8 bits) y el sesgo (127) de float32, lo que significa que puede obtenerse de un valor float32 simplemente truncando la mantisa — un atajo práctico de implementación.

Ver cómo se disponen los bits en FP16 y bfloat16

Aunque ambos ocupan dieciséis bits, FP16, es decir IEEE 754 binary16, y bfloat16 reparten esos bits de maneras bien distintas. Esta herramienta convierte entre valores decimales y patrones de bits y colorea por separado el signo, el exponente y la mantisa, de modo que la diferencia pueda verse y no solo leerse.

**La clave está en el reparto. FP16 da cinco bits al exponente y diez a la mantisa, mientras que bfloat16 da ocho al exponente y siete a la mantisa.** Ocho bits de exponente es exactamente lo que usa la precisión simple, y de ahí se siguen dos propiedades. La primera es que **bfloat16 abarca el mismo intervalo de valores que FP32**, y la segunda es que **convertir desde FP32 se reduce a truncar a los dieciséis bits superiores.** Por eso el aprendizaje automático prefiere bfloat16: hay mucho menos riesgo de que un valor se salga del intervalo y arruine un entrenamiento. El precio es una mantisa de solo siete bits, de modo que **la precisión resulta más basta que la de FP16.** Elija FP16 donde importe la precisión y bfloat16 donde importe el intervalo.

Cómo se usa

  1. Elija el sentido de la conversión De decimal a bits y de bits a decimal están ambos disponibles.
  2. Introduzca un valor Sirven por igual un número decimal o una cadena de unos y ceros.
  3. Lea los bits coloreados **El signo, el exponente y la mantisa se muestran cada uno con su propio color.**
  4. Enfrente FP16 con bfloat16 **Representar el mismo valor en ambos formatos muestra exactamente dónde se separan.**

Consejos para aprovecharla mejor

  • Incluso para el mismo valor, como 0.1, FP16 y bfloat16 lo redondean de forma muy distinta. Cambia de formato y compara los patrones de bits de la mantisa.
  • Como bfloat16 comparte el ancho de exponente y el sesgo de float32, resiste el desbordamiento incluso con valores grandes por encima de 65504. FP16, en cambio, se desborda a infinito en cuanto se supera 65504.
  • Convertir "70000" a FP16 se desborda a infinito, mientras que bfloat16 lo representa bien (con precisión reducida).
  • Al cuantizar modelos en frameworks como PyTorch o TensorFlow, bfloat16 se convierte fácilmente desde float32, mientras que el rango más estrecho de FP16 a veces requiere un escalado previo.
  • Para convertir bits de vuelta a decimal, introduce un valor hexadecimal de 4 dígitos con prefijo `0x`, o un valor binario de 16 dígitos (el prefijo `0b` es opcional).

Cuándo resulta útil

Entender qué cuesta la cuantización

**Puede establecer en concreto hasta dónde se redondea un valor al bajar un modelo a dieciséis bits.**

Decidir entre los formatos

Le da el material para sopesar si su caso necesita intervalo o precisión.

Hallar dónde empieza el desbordamiento

**Puede probar, con valores reales, qué ocurre en cuanto se rebasa el mayor número representable en FP16.**

Aprender cómo funciona la coma flotante

Puede seguir, bit a bit, cómo un exponente y una mantisa se combinan para expresar un solo número.

Términos de la coma flotante

Bit de signo
El único bit más alto, que da el signo: 0 para positivo y 1 para negativo.
Exponente
La parte que expresa la magnitud del valor. **FP16 le asigna cinco bits y bfloat16 ocho.**
Mantisa
La parte que corresponde a las cifras significativas. **FP16 tiene diez bits y bfloat16 siete, y esa brecha es justamente la diferencia de precisión.**
Bfloat16
**Un formato de dieciséis bits que mantiene el exponente en los ocho bits de FP32.** Reduce a la mitad el almacenamiento sin sacrificar el intervalo.
Número subnormal
La representación empleada cuando el exponente está en su mínimo, que permite valores extremadamente próximos a cero.
Cuantización
La práctica de expresar los pesos de un modelo con menos bits. **Bajan el almacenamiento y el cómputo, y con ellos la precisión.**

Preguntas frecuentes

Ambos suman 16 bits, pero FP16 (media precisión IEEE 754) usa 5 bits de exponente y 10 de mantisa, mientras que bfloat16 usa 8 bits de exponente y 7 de mantisa. Los bits extra de mantisa de FP16 le dan mayor precisión pero un rango más estrecho; bfloat16 sacrifica precisión por el amplio rango de float32.

Durante el entrenamiento de deep learning, los gradientes y parámetros pueden oscilar entre valores extremadamente grandes y pequeños. bfloat16 mantiene el amplio rango representable de float32 (resistiendo el desbordamiento/subdesbordamiento) mientras reduce a la mitad la memoria y el cómputo. El rango más estrecho de FP16 puede desbordarse más fácilmente, a veces requiriendo escalado adicional de la pérdida (loss scaling) durante el entrenamiento.

Aproximadamente 65504. Convertir algo mayor a FP16 se desborda a infinito. bfloat16, al compartir el ancho de exponente de float32, puede representar valores hasta aproximadamente 3.4×10³⁸.

Un patrón de bits donde el exponente es todo ceros pero la mantisa no es cero. Los números de coma flotante normales tienen un 1 implícito al inicio de la mantisa; los subnormales lo omiten, permitiendo valores aún más cercanos a cero que el menor número normal, a costa de precisión.

bfloat16 coincide exactamente con el ancho de exponente (8 bits) y el sesgo (127) de float32, así que la conversión solo consiste en conservar los 7 bits superiores de la mantisa del patrón float32 (con redondeo) — sin necesidad de recalcular el exponente ni comprobar rangos, lo que simplifica la implementación.
Tool-kun

A propósito — Por qué el machine learning quería una representación numérica "menos precisa"

Alrededor de 2018, Google diseñó un nuevo formato de coma flotante de 16 bits llamado bfloat16 para sus Unidades de Procesamiento Tensorial (TPU). FP16 (media precisión IEEE 754) ya existía y se usaba en procesamiento de imágenes y gráficos, pero sus escasos 5 bits de exponente le daban un rango representable estrecho, poco adecuado para los gradientes que se desvanecen o explotan durante el entrenamiento de deep learning.

La idea de diseño de bfloat16 es sencilla: sacrificar precisión en la mantisa, pero mantener el exponente exactamente tan ancho como los 8 bits de float32, para poder manejar con seguridad los valores extremadamente grandes y pequeños que surgen durante el entrenamiento. El nombre "Brain Floating Point" proviene de Google Brain, el equipo de investigación de machine learning que lo creó.

En la informática convencional, reducir la precisión de coma flotante se ha considerado durante mucho tiempo un caldo de cultivo de errores. Pero los modelos de deep learning tienen una propiedad inusual: un error numérico modesto rara vez afecta mucho la precisión final de las predicciones. Aprovechar esa propiedad de "algo impreciso pero que funciona en conjunto" — y reducir a la mitad el coste de memoria y cómputo con un formato de 16 bits — representa una optimización propia del machine learning, bastante alejada de la sabiduría tradicional de la informática.