<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>GPU Tuning on KnightLi Blog</title>
        <link>https://www.knightli.com/es/tags/gpu-tuning/</link>
        <description>Recent content in GPU Tuning on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>es</language>
        <lastBuildDate>Thu, 23 Apr 2026 12:13:04 +0800</lastBuildDate><atom:link href="https://www.knightli.com/es/tags/gpu-tuning/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Cómo ajustar llama.cpp con 8GB de VRAM: por qué 32K es más seguro y 64K necesita cuantización de KV Cache</title>
        <link>https://www.knightli.com/es/2026/04/23/llama-cpp-8g-vram-32k-64k-kv-cache-tuning/</link>
        <pubDate>Thu, 23 Apr 2026 12:13:04 +0800</pubDate>
        
        <guid>https://www.knightli.com/es/2026/04/23/llama-cpp-8g-vram-32k-64k-kv-cache-tuning/</guid>
        <description>&lt;p&gt;Si &lt;code&gt;8GB&lt;/code&gt; de VRAM bastan para ejecutar LLMs locales con fluidez, especialmente con contextos largos, es una de las preguntas más comunes al usar &lt;code&gt;llama.cpp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tres conclusiones clave:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Con &lt;code&gt;8GB&lt;/code&gt; de VRAM, contexto &lt;code&gt;32K&lt;/code&gt; suele ser el equilibrio más seguro&lt;/li&gt;
&lt;li&gt;Si realmente quieres &lt;code&gt;64K&lt;/code&gt;, la cuantización de &lt;code&gt;KV Cache&lt;/code&gt; suele ser esencial&lt;/li&gt;
&lt;li&gt;En inferencia full-GPU, subir a ciegas el número de hilos &lt;code&gt;CPU&lt;/code&gt; puede empeorar el rendimiento&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-qué-significan-32k-64k-y-kv-cache&#34;&gt;1. Qué significan 32K, 64K y KV Cache
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;32K&lt;/code&gt; y &lt;code&gt;64K&lt;/code&gt; se refieren a longitud de contexto, es decir, cuántos &lt;code&gt;tokens&lt;/code&gt; puede procesar el modelo a la vez. &lt;code&gt;K&lt;/code&gt; significa miles: &lt;code&gt;32K&lt;/code&gt; son unos &lt;code&gt;32000 tokens&lt;/code&gt;, y &lt;code&gt;64K&lt;/code&gt; unos &lt;code&gt;64000 tokens&lt;/code&gt;. Cuanto más largo el contexto, más contenido previo puede ver el modelo.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;KV Cache&lt;/code&gt; es una caché de resultados intermedios que el modelo mantiene para acelerar la generación autoregresiva. Una vez que el modelo leyó parte del contexto, no necesita recalcular todo desde cero cada vez. Guarda información intermedia y la reutiliza. &lt;code&gt;K&lt;/code&gt; y &lt;code&gt;V&lt;/code&gt; vienen de &lt;code&gt;Key&lt;/code&gt; y &lt;code&gt;Value&lt;/code&gt; en Transformers.&lt;/p&gt;
&lt;p&gt;Estos términos aparecen juntos porque:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;32K&lt;/code&gt; y &lt;code&gt;64K&lt;/code&gt; definen cuánto contenido quieres recordar&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KV Cache&lt;/code&gt; determina cuánta VRAM extra hace falta para mantener esa memoria&lt;/li&gt;
&lt;li&gt;cuanto más largo el contexto, más grande suele ser la &lt;code&gt;KV Cache&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cuando la inferencia de contexto largo se ralentiza, el problema raíz suele ser que la caché creció hasta presionar el límite de VRAM.&lt;/p&gt;
&lt;h2 id=&#34;2-por-qué-32k-y-64k-se-comportan-tan-distinto&#34;&gt;2. Por qué 32K y 64K se comportan tan distinto
&lt;/h2&gt;&lt;p&gt;Usando unas &lt;code&gt;30000&lt;/code&gt; letras chinas de &lt;em&gt;The Three-Body Problem&lt;/em&gt; como stress test, la comparación entre &lt;code&gt;32K&lt;/code&gt; y &lt;code&gt;64K&lt;/code&gt; puede verse dramática: con tamaño de documento similar, &lt;code&gt;64K&lt;/code&gt; puede volverse mucho más lento.&lt;/p&gt;
&lt;p&gt;La razón no es que el modelo empeore de repente. El problema real es tocar el límite de VRAM.&lt;/p&gt;
&lt;p&gt;En &lt;code&gt;32K&lt;/code&gt;, pesos del modelo más caché quizá aún caben en &lt;code&gt;8GB&lt;/code&gt;, así que la mayoría del tráfico se queda en la memoria de la GPU. Al pasar a &lt;code&gt;64K&lt;/code&gt;, la caché crece, el uso total se acerca o supera el techo de VRAM, y parte de los datos se empuja a memoria compartida o del sistema.&lt;/p&gt;
&lt;p&gt;En ese punto no colapsa el cómputo bruto, sino el ancho de banda.&lt;/p&gt;
&lt;p&gt;Lo que parece &amp;ldquo;el contexto se duplicó y el rendimiento se hundió&amp;rdquo; suele ser que la ruta de datos salió de VRAM hacia memoria mucho más lenta.&lt;/p&gt;
&lt;h2 id=&#34;3-para-64k-la-cuantización-de-kv-cache-importa-mucho&#34;&gt;3. Para 64K, la cuantización de KV Cache importa mucho
&lt;/h2&gt;&lt;p&gt;Para usuarios de &lt;code&gt;8GB&lt;/code&gt; de VRAM, una conclusión importante es que cuantizar &lt;code&gt;KV Cache&lt;/code&gt; importa muchísimo.&lt;/p&gt;
&lt;p&gt;Sin cambiar el modelo, cuantizar solo la caché reduce directamente el uso de memoria en contexto largo. Eso permite que parte de los datos que antes salían de VRAM vuelvan a caber. &lt;code&gt;64K&lt;/code&gt; seguirá siendo más pesado que &lt;code&gt;32K&lt;/code&gt;, pero es menos probable que caiga en la zona más lenta.&lt;/p&gt;
&lt;p&gt;En simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;32K&lt;/code&gt; es el rango predeterminado más práctico para &lt;code&gt;8GB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;64K&lt;/code&gt; no es imposible&lt;/li&gt;
&lt;li&gt;pero sin cuantización de caché, puede pasar de usable a difícil de usar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prioridad habitual:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Revisar si la VRAM ya está cerca del techo&lt;/li&gt;
&lt;li&gt;Decidir si activar cuantización de &lt;code&gt;KV Cache&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Solo después experimentar con ajustes de throughput&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;4-baja-utilización-gpu-no-significa-que-esté-inactiva&#34;&gt;4. Baja utilización GPU no significa que esté inactiva
&lt;/h2&gt;&lt;p&gt;Este punto rompe la intuición.&lt;/p&gt;
&lt;p&gt;Cuando Task Manager muestra 20% o 30% de &lt;code&gt;GPU&lt;/code&gt;, mucha gente asume:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;los parámetros están mal&lt;/li&gt;
&lt;li&gt;el modelo no corre realmente en GPU&lt;/li&gt;
&lt;li&gt;la GPU no se usa completa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pero en inferencia &lt;code&gt;llama.cpp&lt;/code&gt;, lo más probable es que el cuello de botella no sea cómputo del core, sino lecturas y escrituras de memoria.&lt;/p&gt;
&lt;p&gt;Los cores GPU pueden terminar rápido un lote de cálculo y pasar el resto del tiempo esperando el siguiente lote de pesos o datos cacheados.&lt;/p&gt;
&lt;p&gt;Por eso:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la utilización de cores no parece alta&lt;/li&gt;
&lt;li&gt;pero la velocidad end-to-end no mejora&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No es una GPU perezosa. Es una ruta de datos estrecha.&lt;/p&gt;
&lt;h2 id=&#34;5-aumentar-parámetros-de-throughput-ayuda-solo-si-la-vram-aguanta&#34;&gt;5. Aumentar parámetros de throughput ayuda solo si la VRAM aguanta
&lt;/h2&gt;&lt;p&gt;Si los cores GPU no están saturados, aumentar parámetros relacionados con throughput puede hacer que la GPU procese más datos a la vez y use mejor el paralelismo.&lt;/p&gt;
&lt;p&gt;Puede mejorar velocidad, pero con una condición: debe quedar margen de VRAM.&lt;/p&gt;
&lt;p&gt;Si ya estás en &lt;code&gt;64K&lt;/code&gt;, con una caché grande y VRAM casi agotada, subir esos parámetros puede terminar en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;crash&lt;/li&gt;
&lt;li&gt;fallback a memoria compartida mucho más lenta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La secuencia más segura:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;proteger primero el límite de VRAM&lt;/li&gt;
&lt;li&gt;luego probar optimizaciones de throughput&lt;/li&gt;
&lt;li&gt;tras cada cambio, revisar velocidad y estabilidad&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;6-más-hilos-cpu-no-siempre-son-mejores&#34;&gt;6. Más hilos CPU no siempre son mejores
&lt;/h2&gt;&lt;p&gt;Es una trampa fácil.&lt;/p&gt;
&lt;p&gt;Parece natural pensar que más hilos dan más velocidad. Pero si el modelo ya corre casi todo en GPU, forzar más hilos &lt;code&gt;CPU&lt;/code&gt; puede empeorar claramente el rendimiento.&lt;/p&gt;
&lt;p&gt;En inferencia full-GPU, la &lt;code&gt;CPU&lt;/code&gt; es más scheduler y ayudante de preprocesamiento que motor principal. Demasiados hilos aumentan contención, overhead de scheduling y cambios de contexto, interrumpiendo el flujo de datos.&lt;/p&gt;
&lt;p&gt;Resultado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la &lt;code&gt;CPU&lt;/code&gt; parece más ocupada&lt;/li&gt;
&lt;li&gt;la velocidad general baja&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En este setup, valores predeterminados o hilos más bajos suelen ser más fiables que maximizar todo.&lt;/p&gt;
&lt;h2 id=&#34;7-enfoque-práctico-para-8gb-de-vram&#34;&gt;7. Enfoque práctico para 8GB de VRAM
&lt;/h2&gt;&lt;h3 id=&#34;1-trata-32k-como-objetivo-predeterminado&#34;&gt;1. Trata 32K como objetivo predeterminado
&lt;/h3&gt;&lt;p&gt;Con una GPU de &lt;code&gt;8GB&lt;/code&gt;, no persigas &lt;code&gt;64K&lt;/code&gt; de inmediato. &lt;code&gt;32K&lt;/code&gt; suele equilibrar mejor velocidad, estabilidad y memoria.&lt;/p&gt;
&lt;h3 id=&#34;2-si-quieres-64k-resuelve-primero-la-caché&#34;&gt;2. Si quieres 64K, resuelve primero la caché
&lt;/h3&gt;&lt;p&gt;Confirma si &lt;code&gt;KV Cache&lt;/code&gt; está cuantizada y si la VRAM ya está al límite.&lt;/p&gt;
&lt;h3 id=&#34;3-no-juzgues-todo-por-utilización-gpu&#34;&gt;3. No juzgues todo por utilización GPU
&lt;/h3&gt;&lt;p&gt;Baja utilización no implica ajustes incorrectos. Puede indicar que el cuello de botella es memoria.&lt;/p&gt;
&lt;h3 id=&#34;4-optimiza-throughput-sin-cruzar-el-límite-de-vram&#34;&gt;4. Optimiza throughput sin cruzar el límite de VRAM
&lt;/h3&gt;&lt;p&gt;Estos parámetros pueden ayudar, pero solo con margen suficiente.&lt;/p&gt;
&lt;h3 id=&#34;5-sé-conservador-con-hilos-cpu&#34;&gt;5. Sé conservador con hilos CPU
&lt;/h3&gt;&lt;p&gt;Si el modelo corre principalmente en GPU, más hilos CPU no son automáticamente mejores.&lt;/p&gt;
&lt;h2 id=&#34;conclusión&#34;&gt;Conclusión
&lt;/h2&gt;&lt;p&gt;El valor de esta discusión no son solo números de benchmark, sino una verdad fácil de olvidar:&lt;/p&gt;
&lt;p&gt;ajustar LLMs locales no consiste en poner cada valor al máximo. Consiste en entender si tu cuello de botella real es cómputo, capacidad de VRAM, ancho de banda de memoria o scheduling de &lt;code&gt;CPU&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Para usuarios de &lt;code&gt;8GB&lt;/code&gt;, la estrategia más segura suele ser proteger primero el límite de VRAM y solo entonces decidir cuánto más empujar.&lt;/p&gt;
&lt;p&gt;Si recuerdas una frase:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;32K&lt;/code&gt; suele ser el rango de trabajo más estable para &lt;code&gt;8GB&lt;/code&gt; de VRAM; &lt;code&gt;64K&lt;/code&gt; es posible, pero solo si ya controlaste &lt;code&gt;KV Cache&lt;/code&gt; y uso de VRAM.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
