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:
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.
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:
|
|
Si un modelo 27B guarda pesos enteramente en FP32, solo los pesos ocupan aproximadamente:
|
|
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.
Para el mismo modelo 27B, mirando solo tamaño de pesos:
|
|
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.
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.
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.
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 caroFP16: menos uso de VRAM, pero menor rangoBF16: coste de VRAM similar aFP16, pero estabilidad más adecuada para modelos grandesTF32: resuelve principalmente lentitud deFP32, no uso de VRAMFP8: ruta más agresiva de compresión y aceleración
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.