跳转至

第 3 部分 · 内存系统(Memory System)

本部分内容

第 2 部分回答了"谁在跑";本部分回答"数据住哪"。KV Cache 是 显存的最大消费者(长上下文下可超过模型权重),本部分推导:为什么 需要 KV Cache(ch11)、如何用分页消除碎片(ch12)、如何用前缀树 复用重复计算(ch13)、如何用内存池消除分配开销(ch14)、以及 CUDA 显存管理的完整图景(ch15)。本部分对应 mini-runtime 的 mini_runtime/cache/ 目录。

flowchart TD
    subgraph 显存预算
        W[模型权重 ~1GB] --> T[总显存]
        K[KV Cache 池] --> T
        A[激活/临时] --> T
    end
    subgraph 缓存设计
        K --> P[ch12 Paged<br/>BlockTable + ref_count]
        K --> PC[ch13 Prefix<br/>Radix Tree + LRU]
        P --> M[ch14 Memory Pool<br/>free list]
        M --> C[ch15 CUDA 管理<br/>allocated vs reserved]
    end
    subgraph 根源
        KV[ch11 为什么需要 KV] --> K
    end

章节地图

章节 核心问题 关键代码
第 11 章 KV Cache 为什么必须缓存 K/V?多大? attention.py:40-41
第 12 章 Paged KV Cache 如何消除连续分配的浪费? kv_cache.py:12-111
第 13 章 Prefix Cache 如何复用重复前缀的计算? prefix_cache.py
第 14 章 Memory Pool 如何消除分配/释放开销? kv_cache.py:48
第 15 章 CUDA Memory 显存分配策略的全景 profiler.py:216-237

阅读建议

  • 本部分是 第 2 部分 的资源层: Engine 的每个准入/扩容决策都调用本部分的分配接口。
  • ch11–ch13 有清晰的演进关系:缓存为什么存在 → 如何分页 → 如何复用, 建议连续阅读。