Guía práctica de formatos tensoriales comunes en LLMs: FP32, FP16, BF16, TF32 y FP8

Introducción práctica a los formatos tensoriales más comunes en modelos grandes: FP32, FP16, BF16, TF32 y FP8, con sus layouts de bits, tradeoffs y por qué moldean entrenamiento y despliegue.

En cuanto empiezas a trabajar con entrenamiento, inferencia o despliegue de modelos grandes, aparece un conjunto familiar de abreviaturas: FP32, FP16, BF16, TF32 y FP8. Parecen pequeñas etiquetas en una página de modelo, pero su impacto es mucho mayor que una diferencia de nombre.

Estos formatos determinan cómo se almacenan los números en memoria y cómo se representan durante el cálculo. Afectan directamente la estabilidad del entrenamiento, la velocidad de inferencia e incluso qué tamaño de modelo puede manejar realmente una GPU.

Así que si quieres entender los tradeoffs de precisión en modelos grandes, uno de los mejores puntos de partida no es una tabla de benchmarks de un modelo concreto, sino una imagen clara de qué son estos formatos tensoriales y por qué se diseñaron así.

Qué determinan realmente los formatos tensoriales

En esencia, un modelo grande es un conjunto masivo de operaciones matriciales sobre enormes cantidades de parámetros, y el formato tensorial es cómo esos números se almacenan en memoria y se representan durante el cálculo.

El tradeoff suele girar alrededor de tres dimensiones:

  • precisión
  • uso de VRAM
  • velocidad de cómputo

Se parece bastante a los formatos de imagen. Los formatos sin pérdida preservan más detalle, pero ocupan más espacio y cargan más lento. Los formatos comprimidos descartan información menos perceptible a cambio de menor tamaño y manejo más rápido. Los modelos grandes aceptan tradeoffs similares porque, en conjuntos enormes de parámetros, muchos cambios numéricos diminutos no afectan significativamente la salida final.

Por eso el mundo de modelos desarrolló toda una familia de formatos de precisión.

Cómo se representa un número

Antes de entrar en formatos, conviene recordar una estructura básica. Un número de punto flotante suele tener tres partes:

  • bit de signo: determina positivo o negativo
  • bits de exponente: determinan rango numérico
  • bits de mantisa: determinan detalle numérico

En modelos grandes, la precisión de mantisa importa, pero muchos modelos son incluso más sensibles a un rango numérico insuficiente, es decir, muy pocos bits de exponente y mayor riesgo de overflow o entrenamiento inestable. Mucho del diseño de formatos tensoriales consiste en redistribuir un número limitado de bits entre rango y detalle.

El diagrama siguiente da una vista general:

Overview of the bit layouts of FP32, FP16, BF16, TF32, and FP8

FP32: el más estable, pero caro

FP32 es el formato tradicional de punto flotante de precisión simple. Usa 32 bits en total, o 4 bytes.

FP32 bit layout diagram

Sus fortalezas son claras:

  • rango numérico amplio
  • alta precisión
  • comportamiento de entrenamiento más estable

La desventaja es igual de clara: consume mucha VRAM.

Una estimación muy aproximada:

1
VRAM usage ~= parameter count * bytes per parameter

Si un modelo 27B guarda pesos enteramente en FP32, solo los pesos ocupan aproximadamente:

1
27B * 4 bytes ~= 108GB

Y eso no incluye activaciones, KV cache, estado del optimizador u otros overheads. Por eso, en entrenamiento e inferencia modernos, FP32 ya no es tanto el formato predeterminado como la línea base más estable.

FP16: mitad de tamaño, pero menos estable

FP16 comprime cada parámetro a 2 bytes, reduciendo memoria aproximadamente a la mitad frente a FP32.

FP16 bit layout diagram

Para el mismo modelo 27B, mirando solo tamaño de pesos:

1
27B * 2 bytes ~= 54GB

Eso ya explica por qué muchas guías colocan un modelo 27B alrededor de 50GB de VRAM.

Ventajas de FP16:

  • mucha menos presión de VRAM
  • mayor throughput
  • uso amplio en entrenamiento mixed-precision temprano

Su debilidad es el rango de exponente relativamente pequeño. En entrenamiento de modelos grandes, eso hace más probable el overflow y suele requerir técnicas extra como loss scaling, añadiendo complejidad de ingeniería.

Así que FP16 sigue siendo común, pero en muchos escenarios ya no es la opción más cómoda.

BF16: una half precision más práctica para la era de modelos grandes

BF16 también usa 2 bytes, pero hace un tradeoff distinto a FP16.

BF16 bit layout diagram

Mantiene un rango de exponente mucho mayor, acercando su rango dinámico a FP32, mientras sacrifica algo de precisión de mantisa. Ese tradeoff funciona especialmente bien en modelos grandes, porque suelen ser más sensibles al rango que a perder unos pocos bits de mantisa.

Por eso muchos frameworks de entrenamiento, papers de modelos grandes y setups reales prefieren BF16.

Una forma simple de pensarlo:

  • coste de VRAM cercano a FP16
  • estabilidad más cercana a FP32

Si una guía de despliegue 27B pide alrededor de 50GB de VRAM y otra optimizada se acerca a 30GB, la primera suele vivir aún en la capa FP16/BF16, mientras la segunda normalmente avanzó hacia menor precisión o cuantización.

TF32: no ahorra VRAM, acelera flujos FP32

TF32 es fácil de confundir con otro formato de ahorro de memoria, pero su rol es distinto.

En términos comunes, puedes pensarlo como un formato de cómputo que mantiene un rango de exponente grande y acorta la precisión de mantisa.

TF32 computation format diagram

Pero es importante notar que TF32 se parece más a un formato interno de cálculo usado en la ruta Tensor Core, no algo usado principalmente para almacenar pesos como FP16 o BF16.

Es sobre todo un modo de cómputo que NVIDIA ofrece en GPUs nuevas. El objetivo no es reducir VRAM, sino hacer que flujos originalmente basados en FP32 corran más rápido sin grandes cambios de código.

Su rol se resume así:

  • externamente sigue pareciendo un flujo FP32
  • internamente ejecuta math matricial aproximada más rápida

Así que TF32 resuelve principalmente que FP32 es demasiado lento, no que use demasiada memoria. Si tu pregunta es por qué el mismo modelo puede tener requisitos de VRAM muy distintos, TF32 no es la respuesta principal.

FP8: más compresión, pero exige mucha más ingeniería

Un paso más lleva a FP8. Comprime cada valor en aún menos bits, reduciendo más el ancho de banda de memoria y el coste de almacenamiento.

Normalmente no aparece como un único formato, sino como dos variantes comunes: E4M3 y E5M2.

FP8 variant diagram

Pero FP8 tiene un coste obvio: con tan pocos bits, es muy difícil preservar rango y precisión al mismo tiempo. En la práctica, distintas variantes se usan en distintas etapas para equilibrar forward pass, backward pass y gradientes.

Esta familia representa una estrategia más agresiva:

  • renunciar a más precisión
  • ganar menor coste de almacenamiento y mayor throughput
  • depender de hardware y frameworks más maduros

Tiene mucho potencial, pero para la mayoría de usuarios las divisiones prácticas principales siguen siendo FP32, FP16 y BF16.

Por qué importa entender estos formatos

Mucha gente primero trata estas abreviaturas como detalles de implementación en una página de descarga. Pero en la práctica cambian cómo piensas sobre entrenamiento y despliegue.

Por ejemplo, ayudan a explicar:

  • por qué algunos setups de entrenamiento se preocupan tanto por la estabilidad numérica
  • por qué algunas stacks de inferencia priorizan cuantización y baja precisión
  • por qué modelos con conteos de parámetros similares pueden tener requisitos de despliegue muy distintos
  • por qué algunos formatos son mejores para almacenar pesos y otros tienen más sentido como rutas de cómputo

Si sigues desarmando esas preguntas, vuelves al mismo punto: cómo eliges intercambiar precisión, rango, memoria y velocidad.

Por eso entender FP32, FP16, BF16, TF32 y FP8 no es solo decodificar un glosario. Es entender qué se está intercambiando realmente al leer una config de entrenamiento, elegir un motor de inferencia o comparar opciones de despliegue.

Un modelo mental práctico

Si no quieres memorizar todos los detalles de inmediato, ayuda recordarlos así:

  • FP32: más estable, más caro
  • FP16: menos uso de VRAM, pero menor rango
  • BF16: coste de VRAM similar a FP16, pero estabilidad más adecuada para modelos grandes
  • TF32: resuelve principalmente lentitud de FP32, no uso de VRAM
  • FP8: ruta más agresiva de compresión y aceleración

Summary chart of common tensor formats

Después, cuando veas fp16, bf16 o fp8 en una página de modelo, o cuando distintas guías den umbrales de VRAM muy diferentes, ya no parecerá una diferencia de palabras. Esas etiquetas reflejan presupuestos de precisión y elecciones de ingeniería muy distintos.

Cierre

Los formatos tensoriales en modelos grandes parecen una discusión sobre anchos de bits, pero debajo son una discusión sobre tradeoffs de ingeniería.

FP32, FP16, BF16, TF32 y FP8 no son simplemente mejores o peores entre sí. Cada uno se ubica en un punto diferente de la curva entre estabilidad, rango, precisión, memoria y velocidad.

Cuando entiendes claramente esa capa, resulta mucho más fácil leer papers de entrenamiento, ajustar inferencia y comparar estrategias de despliegue con el modelo mental correcto.

记录并分享
Creado con Hugo
Tema Stack diseñado por Jimmy