<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>LLM on </title>
    <link>https://hiren.me/tags/llm/</link>
    <description>Recent content in LLM on </description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 24 Sep 2026 15:54:50 -0700</lastBuildDate>
    <atom:link href="https://hiren.me/tags/llm/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Watching a KV cache grow (part 3): move it or rebuild it?</title>
      <link>https://hiren.me/posts/watching-a-kv-cache-grow-part-3/</link>
      <pubDate>Thu, 24 Sep 2026 15:54:50 -0700</pubDate>
      <guid>https://hiren.me/posts/watching-a-kv-cache-grow-part-3/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://hiren.me/posts/watching-a-kv-cache-grow/&#34; &gt;Part 1&lt;/a&gt; showed what a KV cache is as bytes: 23,040 per token for SmolLM2-135M. &lt;a href=&#34;https://hiren.me/posts/watching-a-kv-cache-grow-part-2/&#34; &gt;Part 2&lt;/a&gt; showed that decode gets slower as the cache grows, because every step has to move it through memory.&lt;/p&gt;&#xA;&lt;p&gt;Where I&amp;rsquo;m heading with this series is disaggregated inference. The idea is to run prefill on one set of GPUs and decode on another, because the two phases want different things (parts 1 and 2 are really about that difference). The catch is that the cache prefill builds has to get from the prefill machine to the decode machine before decoding can start.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Watching a KV cache grow (part 2)</title>
      <link>https://hiren.me/posts/watching-a-kv-cache-grow-part-2/</link>
      <pubDate>Thu, 24 Sep 2026 12:20:56 -0700</pubDate>
      <guid>https://hiren.me/posts/watching-a-kv-cache-grow-part-2/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://hiren.me/posts/watching-a-kv-cache-grow/&#34; &gt;part 1&lt;/a&gt; I watched a KV cache fill up one token at a time on my laptop, and worked out that SmolLM2-135M&amp;rsquo;s cache costs 23,040 bytes per token. The post ended with a question: every decode step has to read the weights and the whole cache, so as the cache grows, does each step get slower in proportion to the extra bytes?&lt;/p&gt;&#xA;&lt;p&gt;The short answer is yes, in a straight line, but each step moves the cache through memory about 3 times rather than once. With a different cache class it&amp;rsquo;s closer to 7.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Watching a KV cache grow (part 1)</title>
      <link>https://hiren.me/posts/watching-a-kv-cache-grow/</link>
      <pubDate>Thu, 24 Sep 2026 11:12:06 -0700</pubDate>
      <guid>https://hiren.me/posts/watching-a-kv-cache-grow/</guid>
      <description>&lt;p&gt;Glenn Lockwood&amp;rsquo;s &lt;a href=&#34;https://blog.glennklockwood.com/2026/09/what-are-kv-caches-really.html&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;What are KV caches, really?&lt;/a&gt; explains prefill, decode, and why a KV cache exists, and then takes apart some vendor speedup claims for KV offload. It&amp;rsquo;s a good read and it got me curious.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m an infra person, not an ML person, so I wanted to see a KV cache for real, the way I&amp;rsquo;d look at any other buffer: what&amp;rsquo;s in it, how it grows, and how big it gets.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
