<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Tensor on KnightLi Blog</title>
        <link>https://www.knightli.com/es/tags/tensor/</link>
        <description>Recent content in Tensor on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>es</language>
        <lastBuildDate>Wed, 22 Apr 2026 22:40:00 +0800</lastBuildDate><atom:link href="https://www.knightli.com/es/tags/tensor/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Guía práctica de formatos tensoriales comunes en LLMs: FP32, FP16, BF16, TF32 y FP8</title>
        <link>https://www.knightli.com/es/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/</link>
        <pubDate>Wed, 22 Apr 2026 22:40:00 +0800</pubDate>
        
        <guid>https://www.knightli.com/es/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/</guid>
        <description>&lt;p&gt;En cuanto empiezas a trabajar con entrenamiento, inferencia o despliegue de modelos grandes, aparece un conjunto familiar de abreviaturas: &lt;code&gt;FP32&lt;/code&gt;, &lt;code&gt;FP16&lt;/code&gt;, &lt;code&gt;BF16&lt;/code&gt;, &lt;code&gt;TF32&lt;/code&gt; y &lt;code&gt;FP8&lt;/code&gt;. Parecen pequeñas etiquetas en una página de modelo, pero su impacto es mucho mayor que una diferencia de nombre.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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í.&lt;/p&gt;
&lt;h2 id=&#34;qué-determinan-realmente-los-formatos-tensoriales&#34;&gt;Qué determinan realmente los formatos tensoriales
&lt;/h2&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;El tradeoff suele girar alrededor de tres dimensiones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;precisión&lt;/li&gt;
&lt;li&gt;uso de VRAM&lt;/li&gt;
&lt;li&gt;velocidad de cómputo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Por eso el mundo de modelos desarrolló toda una familia de formatos de precisión.&lt;/p&gt;
&lt;h2 id=&#34;cómo-se-representa-un-número&#34;&gt;Cómo se representa un número
&lt;/h2&gt;&lt;p&gt;Antes de entrar en formatos, conviene recordar una estructura básica. Un número de punto flotante suele tener tres partes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bit de signo: determina positivo o negativo&lt;/li&gt;
&lt;li&gt;bits de exponente: determinan rango numérico&lt;/li&gt;
&lt;li&gt;bits de mantisa: determinan detalle numérico&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;El diagrama siguiente da una vista general:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/tensor-format-overview.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Overview of the bit layouts of FP32, FP16, BF16, TF32, and FP8&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;fp32-el-más-estable-pero-caro&#34;&gt;FP32: el más estable, pero caro
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;FP32&lt;/code&gt; es el formato tradicional de punto flotante de precisión simple. Usa 32 bits en total, o 4 bytes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/fp32-layout.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;FP32 bit layout diagram&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Sus fortalezas son claras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rango numérico amplio&lt;/li&gt;
&lt;li&gt;alta precisión&lt;/li&gt;
&lt;li&gt;comportamiento de entrenamiento más estable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La desventaja es igual de clara: consume mucha VRAM.&lt;/p&gt;
&lt;p&gt;Una estimación muy aproximada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;VRAM usage ~= parameter count * bytes per parameter
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si un modelo 27B guarda pesos enteramente en &lt;code&gt;FP32&lt;/code&gt;, solo los pesos ocupan aproximadamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;27B * 4 bytes ~= 108GB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Y eso no incluye activaciones, KV cache, estado del optimizador u otros overheads. Por eso, en entrenamiento e inferencia modernos, &lt;code&gt;FP32&lt;/code&gt; ya no es tanto el formato predeterminado como la línea base más estable.&lt;/p&gt;
&lt;h2 id=&#34;fp16-mitad-de-tamaño-pero-menos-estable&#34;&gt;FP16: mitad de tamaño, pero menos estable
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;FP16&lt;/code&gt; comprime cada parámetro a 2 bytes, reduciendo memoria aproximadamente a la mitad frente a &lt;code&gt;FP32&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/fp16-layout.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;FP16 bit layout diagram&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Para el mismo modelo 27B, mirando solo tamaño de pesos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;27B * 2 bytes ~= 54GB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Eso ya explica por qué muchas guías colocan un modelo 27B alrededor de 50GB de VRAM.&lt;/p&gt;
&lt;p&gt;Ventajas de &lt;code&gt;FP16&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mucha menos presión de VRAM&lt;/li&gt;
&lt;li&gt;mayor throughput&lt;/li&gt;
&lt;li&gt;uso amplio en entrenamiento mixed-precision temprano&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Así que &lt;code&gt;FP16&lt;/code&gt; sigue siendo común, pero en muchos escenarios ya no es la opción más cómoda.&lt;/p&gt;
&lt;h2 id=&#34;bf16-una-half-precision-más-práctica-para-la-era-de-modelos-grandes&#34;&gt;BF16: una half precision más práctica para la era de modelos grandes
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;BF16&lt;/code&gt; también usa 2 bytes, pero hace un tradeoff distinto a &lt;code&gt;FP16&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/bf16-layout.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;BF16 bit layout diagram&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Mantiene un rango de exponente mucho mayor, acercando su rango dinámico a &lt;code&gt;FP32&lt;/code&gt;, 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.&lt;/p&gt;
&lt;p&gt;Por eso muchos frameworks de entrenamiento, papers de modelos grandes y setups reales prefieren &lt;code&gt;BF16&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Una forma simple de pensarlo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;coste de VRAM cercano a &lt;code&gt;FP16&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;estabilidad más cercana a &lt;code&gt;FP32&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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 &lt;code&gt;FP16/BF16&lt;/code&gt;, mientras la segunda normalmente avanzó hacia menor precisión o cuantización.&lt;/p&gt;
&lt;h2 id=&#34;tf32-no-ahorra-vram-acelera-flujos-fp32&#34;&gt;TF32: no ahorra VRAM, acelera flujos FP32
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;TF32&lt;/code&gt; es fácil de confundir con otro formato de ahorro de memoria, pero su rol es distinto.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/tf32-layout.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;TF32 computation format diagram&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Pero es importante notar que &lt;code&gt;TF32&lt;/code&gt; 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 &lt;code&gt;FP16&lt;/code&gt; o &lt;code&gt;BF16&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;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 &lt;code&gt;FP32&lt;/code&gt; corran más rápido sin grandes cambios de código.&lt;/p&gt;
&lt;p&gt;Su rol se resume así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;externamente sigue pareciendo un flujo &lt;code&gt;FP32&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;internamente ejecuta math matricial aproximada más rápida&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Así que &lt;code&gt;TF32&lt;/code&gt; resuelve principalmente que &lt;code&gt;FP32&lt;/code&gt; es demasiado lento, no que use demasiada memoria. Si tu pregunta es por qué el mismo modelo puede tener requisitos de VRAM muy distintos, &lt;code&gt;TF32&lt;/code&gt; no es la respuesta principal.&lt;/p&gt;
&lt;h2 id=&#34;fp8-más-compresión-pero-exige-mucha-más-ingeniería&#34;&gt;FP8: más compresión, pero exige mucha más ingeniería
&lt;/h2&gt;&lt;p&gt;Un paso más lleva a &lt;code&gt;FP8&lt;/code&gt;. Comprime cada valor en aún menos bits, reduciendo más el ancho de banda de memoria y el coste de almacenamiento.&lt;/p&gt;
&lt;p&gt;Normalmente no aparece como un único formato, sino como dos variantes comunes: &lt;code&gt;E4M3&lt;/code&gt; y &lt;code&gt;E5M2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/fp8-layout.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;FP8 variant diagram&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Pero &lt;code&gt;FP8&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;Esta familia representa una estrategia más agresiva:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;renunciar a más precisión&lt;/li&gt;
&lt;li&gt;ganar menor coste de almacenamiento y mayor throughput&lt;/li&gt;
&lt;li&gt;depender de hardware y frameworks más maduros&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tiene mucho potencial, pero para la mayoría de usuarios las divisiones prácticas principales siguen siendo &lt;code&gt;FP32&lt;/code&gt;, &lt;code&gt;FP16&lt;/code&gt; y &lt;code&gt;BF16&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-importa-entender-estos-formatos&#34;&gt;Por qué importa entender estos formatos
&lt;/h2&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Por ejemplo, ayudan a explicar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;por qué algunos setups de entrenamiento se preocupan tanto por la estabilidad numérica&lt;/li&gt;
&lt;li&gt;por qué algunas stacks de inferencia priorizan cuantización y baja precisión&lt;/li&gt;
&lt;li&gt;por qué modelos con conteos de parámetros similares pueden tener requisitos de despliegue muy distintos&lt;/li&gt;
&lt;li&gt;por qué algunos formatos son mejores para almacenar pesos y otros tienen más sentido como rutas de cómputo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si sigues desarmando esas preguntas, vuelves al mismo punto: cómo eliges intercambiar precisión, rango, memoria y velocidad.&lt;/p&gt;
&lt;p&gt;Por eso entender &lt;code&gt;FP32&lt;/code&gt;, &lt;code&gt;FP16&lt;/code&gt;, &lt;code&gt;BF16&lt;/code&gt;, &lt;code&gt;TF32&lt;/code&gt; y &lt;code&gt;FP8&lt;/code&gt; 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.&lt;/p&gt;
&lt;h2 id=&#34;un-modelo-mental-práctico&#34;&gt;Un modelo mental práctico
&lt;/h2&gt;&lt;p&gt;Si no quieres memorizar todos los detalles de inmediato, ayuda recordarlos así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FP32&lt;/code&gt;: más estable, más caro&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FP16&lt;/code&gt;: menos uso de VRAM, pero menor rango&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BF16&lt;/code&gt;: coste de VRAM similar a &lt;code&gt;FP16&lt;/code&gt;, pero estabilidad más adecuada para modelos grandes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TF32&lt;/code&gt;: resuelve principalmente lentitud de &lt;code&gt;FP32&lt;/code&gt;, no uso de VRAM&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FP8&lt;/code&gt;: ruta más agresiva de compresión y aceleración&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2026/04/22/common-tensor-formats-fp32-fp16-bf16-tf32-fp8/tensor-format-summary.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Summary chart of common tensor formats&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Después, cuando veas &lt;code&gt;fp16&lt;/code&gt;, &lt;code&gt;bf16&lt;/code&gt; o &lt;code&gt;fp8&lt;/code&gt; 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.&lt;/p&gt;
&lt;h2 id=&#34;cierre&#34;&gt;Cierre
&lt;/h2&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;FP32&lt;/code&gt;, &lt;code&gt;FP16&lt;/code&gt;, &lt;code&gt;BF16&lt;/code&gt;, &lt;code&gt;TF32&lt;/code&gt; y &lt;code&gt;FP8&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
