KV Cache优化

KV Cache优化技术全景

为什么KV Cache如此重要? 在自回归生成中,每生成一个新token都需要计算它与之前所有token的注意力。如果不缓存,生成第N个token需要重新计算前N-1个token的K和V,复杂度为O(N²)。KV Cache将已计算的K/V存储起来,使每步生成只需O(N)的计算。 但缓存本身带来了巨大的显存压力。以Llama-3-70B为例,FP16精度下单个token的KV Cache占用约320KB。在32K上下文、batch_size=32的场景下,KV Cache总量达到约320GB——远超模型本身的140GB。 KV Cache的显存构成 单个token的KV Cache大小为: cache_per_token = 2 (K和V) × n_layers × n_kv_heads × head_dim × 2 (FP16字节) 以Llama-3-70B为例: n_layers = 80 n_kv_heads = 8 (GQA) head_dim = 128 FP16 = 2字节 cache_per_token = 2 × 80 × 8 × 128 × 2 = 327,680 bytes ≈ 320KB 理解这个公式是所有优化方案的出发点。 PagedAttention:分页式KV管理 vLLM团队提出的PagedAttention借鉴了操作系统的虚拟内存管理。核心思想: 块式管理 将KV Cache分为固定大小的块(Block),每个块存储若干token的KV。块不需要在物理上连续,通过块表(Block Table)映射逻辑位置到物理位置。 class PagedKVCache: def __init__(self, n_blocks, block_size, n_layers, n_kv_heads, head_dim): self.block_size = block_size # 每块的token数 self.n_blocks = n_blocks # 预分配所有块的存储 self.k_blocks = torch.zeros(n_blocks, n_layers, block_size, n_kv_heads, head_dim) self.v_blocks = torch.zeros(n_blocks, n_layers, block_size, n_kv_heads, head_dim) self.free_blocks = list(range(n_blocks)) self.block_tables = {} # seq_id -> [block_indices] def allocate(self, seq_id, n_tokens): n_blocks_needed = (n_tokens + self.block_size - 1) // self.block_size blocks = [] for _ in range(n_blocks_needed): if not self.free_blocks: raise OOMError("No free KV cache blocks") blocks.append(self.free_blocks.pop()) self.block_tables[seq_id] = blocks def append(self, seq_id, token_idx, k, v): block_idx = token_idx // self.block_size offset = token_idx % self.block_size physical_block = self.block_tables[seq_id][block_idx] self.k_blocks[physical_block, :, offset] = k self.v_blocks[physical_block, :, offset] = v 优势 消除碎片:无需为最大可能长度预分配连续空间 灵活共享:不同序列可以共享相同的块(如系统提示词部分) 按需分配:序列增长时动态分配新块 Prefix Sharing 多个请求共享相同的前缀(如系统提示词)时,PagedAttention可以让这些请求共享同一组物理块。这在对话AI场景中可节省30-50%的显存。 ...

2026-07-02 · 2 min · 322 words · 硅基 AGI 探索者
KV Cache优化全攻略

KV Cache优化全攻略:从PagedAttention到MLA

引言 KV Cache(键值缓存)是大模型推理中显存占用的最大头。一个512K上下文的推理,KV Cache可能占用数十GB显存。2026年,KV Cache优化技术已经非常成熟,从vLLM的PagedAttention到DeepSeek的MLA,各种创新层出不穷。本文将全面解析KV Cache的优化技术,帮助开发者深入理解并合理选择。 KV Cache基础 为什么需要KV Cache? Transformer的自注意力机制: Attention(Q, K, V) = softmax(QK^T / √d_k) × V 问题:生成第t个token时,需要K_1, K_2, …, K_{t-1}和V_1, …, V_{t-1}。如果每次都重新计算,复杂度O(n²)。 解决:缓存历史K和V → KV Cache KV Cache的显存占用 对于Llama 4 70B(32层,hidden_size=8192): 上下文长度 FP16 KV Cache INT8 KV Cache INT4 KV Cache 2K 512MB 256MB 128MB 8K 2GB 1GB 512MB 32K 8GB 4GB 2GB 128K 32GB 16GB 8GB 512K 128GB 64GB 32GB 关键观察:上下文长度每增加4倍,KV Cache增大4倍。 优化技术全景 技术分类 技术路线 核心思路 压缩比 质量损失 注意力优化 减少KV Cache占用 - - ├─ Multi-Query Attention (MQA) 多查询共享KV 1/n_heads 0% ├─ Grouped-Query Attention (GQA) 分组共享KV 1/group_size <0.5% └─ Multi-Head Latent Attention (MLA) 低维潜在表示 8-10× <1% 分页管理 动态内存管理 - - ├─ PagedAttention 分页管理KV Cache 减少碎片 0% └─ RadixAttention 前缀树缓存 复用公共前缀 0% 量化压缩 降低精度 - - ├─ INT8量化 8-bit量化 2× <1% ├─ INT4量化 4-bit量化 4× 2-3% └─ FP8量化 8-bit浮点 2× <0.5% 稀疏化 只保留重要token - - ├─ StreamingLLM 保留初始+近期token 可变 1-3% ├─ H2O 动态淘汰低注意力token 2-4× 2-5% └─ ScissorHands 基于重要性的稀疏化 2-3× 2-4% 注意力优化 1. Multi-Query Attention (MQA) 原理:所有查询头共享同一组KV。 ...

2026-06-30 · 3 min · 631 words · 硅基 AGI 探索者
MoE架构深度对比

MoE架构深度对比:DeepSeek V4 vs Qwen3.5 vs Llama 4

引言 2026年,MoE(Mixture of Experts)架构已经成为大语言模型的主流选择。三大开源旗舰——DeepSeek V4、Qwen3.5和Llama 4——都采用了MoE架构,但实现方式各有不同。本文将深入对比这三者的MoE架构设计,分析其技术差异、性能表现和工程影响。 MoE架构基础 核心原理 MoE的核心思想是用稀疏激活替代稠密计算: 总参数量大:拥有大量"专家"参数 激活参数少:每次推理只使用少量专家 效果:大模型的知识容量 + 小模型的推理速度 MoE关键指标 指标 说明 影响 总参数量 所有专家参数之和 显存需求 激活参数 每次推理使用的参数 计算量/速度 专家数量 路由可选的专家总数 专业化程度 Top-K 每次选择的专家数 计算量/质量 共享专家 所有token都经过的专家 通用能力 负载均衡 各专家使用是否均匀 效率 三大MoE架构详解 DeepSeek V4:MLA + 细粒度MoE 架构参数: 参数 值 总参数量 671B 激活参数 37B 专家数量 256 Top-K 8 共享专家 4 注意力机制 MLA 2.0 上下文 256K 核心创新: 1. MLA 2.0(多头潜在注意力) DeepSeek V4的核心创新是MLA 2.0: 将KV Cache压缩到低维潜在空间 KV Cache大小减少65%(vs标准MHA) 长序列推理速度提升28% 信息损失比V1降低50% MLA 2.0的KV Cache对比: ...

2026-06-30 · 3 min · 566 words · 硅基 AGI 探索者
Prompt工程进阶

Prompt工程进阶:Chain-of-Thought的变体与实践

Chain-of-Thought:让模型"思考" Chain-of-Thought(思维链,简称CoT)于2022年提出,至今仍是Prompt工程领域最具影响力的技术之一。核心思想是:让模型显式输出推理过程,而非直接给出答案。 2026年,CoT已经从单一技术演化为一个完整的技术家族,包括CoT-SC、ToT、GoT、PoT等多种变体。本文将系统梳理这些技术,并提供实战代码。 CoT基础:显式推理 为什么CoT有效? # 对比:标准Prompt vs CoT Prompt # 标准Prompt standard_prompt = """ 问:小明有5个苹果,小红给了他3个, 然后小明吃掉了2个。小明现在有多少苹果? 答: """ # CoT Prompt cot_prompt = """ 问:小明有5个苹果,小红给了他3个, 然后小明吃掉了2个。小明现在有多少苹果? 让我们逐步推理: 1. 小明开始有5个苹果 2. 小红给了他3个,所以:5 + 3 = 8个 3. 小明吃掉了2个,所以:8 - 2 = 6个 答:6个 """ CoT有效的原因: 计算重分配:将计算能力分配给推理过程 注意力锚定:中间步骤提供"锚点" 错误可追溯:发现推理错误时容易定位 CoT触发方法 class CoTTriggerMethods: """ 2026年主流CoT触发方法 """ @staticmethod def few_shot_cot(examples: list[dict]) -> str: """ Few-shot CoT:通过示例展示推理过程 """ prompt = "请在回答时展示完整的推理过程。\n\n" prompt += "示例:\n" for ex in examples: prompt += f"问题:{ex['question']}\n" prompt += "推理过程:\n" for step in ex['reasoning_steps']: prompt += f" {step}\n" prompt += f"答案:{ex['answer']}\n\n" return prompt @staticmethod def zero_shot_cot(question: str) -> str: """ Zero-shot CoT:使用触发词 2026年最佳触发词组合 """ return f"""{question} 请逐步思考(Step by Step),展示完整的推理过程,最后给出答案。""" @staticmethod def auto_cot(dataset: list[dict], model) -> list[dict]: """ Auto-CoT:自动构建CoT示例 1. 使用聚类选择多样性问题 2. 使用模型生成推理过程 3. 验证生成的正确性 """ # 步骤1:问题聚类 embeddings = model.encode([d['question'] for d in dataset]) clusters = cluster(embeddings, n_clusters=10) # 步骤2:从每个簇中选择代表性问题 selected = [] for cluster_id in range(10): cluster_samples = [dataset[i] for i in range(len(dataset)) if clusters[i] == cluster_id] # 选择最接近簇中心的问题 centroid = embeddings[clusters == cluster_id].mean(axis=0) closest = min(cluster_samples, key=lambda x: cosine_sim(x['embedding'], centroid)) selected.append(closest) # 步骤3:生成CoT cot_examples = [] for sample in selected: reasoning = model.generate( f"请逐步推理并给出答案:{sample['question']}" ) # 验证正确性(通过答案对比) if verify_reasoning(reasoning, sample['answer']): cot_examples.append({ 'question': sample['question'], 'reasoning': reasoning, 'answer': sample['answer'] }) return cot_examples CoT-SC:Self-Consistency自洽性 核心思想 Self-Consistency(自洽性)通过多次采样+投票提升推理可靠性。 ...

2026-06-30 · 5 min · 994 words · 硅基 AGI 探索者
大模型推理优化2026:KV Cache管理前沿方案

大模型推理优化2026:KV Cache管理前沿方案

KV Cache是大模型推理中最关键的优化技术,也是最大的内存瓶颈。在70B模型、128K上下文的典型配置下,KV Cache占用超过40GB显存,远超模型权重本身。2026年,KV Cache管理已成为推理系统的核心竞争力。 1. KV Cache基础 1.1 为什么需要KV Cache Transformer自回归生成时,每生成一个新token需要关注之前所有token的Key和Value。为了避免重复计算,将历史K,V缓存下来: $$\text{KV Cache}_t = {(K_1, V_1), (K_2, V_2), …, (K_t, V_t)}$$ 1.2 内存占用计算 KV Cache的显存占用公式: $$\text{Memory}_{KV} = 2 \times L \times H \times S \times d_h \times P \times b$$ 其中: $L$:层数 $H$:注意力头数 $S$:序列长度 $d_h$:每头维度 $P$:精度字节(fp16=2) $b$:batch size 以Llama-4-70B为例($L=80, H=64, d_h=128$),128K上下文、batch=1: $$2 \times 80 \times 64 \times 131072 \times 128 \times 2 = 274\text{GB}$$ 这个数字远超单GPU显存容量。 2. PagedAttention:分页KV Cache 2.1 核心思想 vLLM提出的PagedAttention借鉴了操作系统的虚拟内存管理,将KV Cache组织为固定大小的页(block),按需分配: ...

2026-06-30 · 4 min · 655 words · 硅基 AGI 探索者
test time compute theory practice

大模型推理时计算:Test-time Compute 的理论与实践

Test-time Compute:推理 Scaling 的新范式 2026 年 AI 领域最重要的范式转变之一是 Test-time Compute(推理时计算)。如果说预训练 Scaling 是"让模型更聪明",那 Test-time Compute 就是"给模型更多时间思考"。这一方向正在成为突破预训练数据墙的关键路径。 一、为什么需要 Test-time Compute 1.1 预训练的边际递减 传统 Scaling Laws 显示,预训练计算量增加 10 倍,损失仅降低约 17%。但推理时计算的 Scaling 效率更高: 预训练 Scaling: 10x 计算量 → ~17% 损失降低 → ~3% 准确率提升 Test-time Compute Scaling: 10x 推理计算 → ~30-50% 准确率提升 (在推理任务上) 1.2 人类的类比 人类面对简单问题可以快速回答,面对复杂问题需要更多思考时间。大模型也应该如此: $$\text{能力} = f(\text{模型参数}, \text{训练数据}, \text{推理计算量})$$ 传统方法只优化前两项,Test-time Compute 优化第三项。 1.3 OpenAI o1/o3 的启示 OpenAI o1(2024)和 o3(2025)证明了 Test-time Compute 的巨大价值: ...

2026-06-28 · 5 min · 927 words · 硅基 AGI 探索者
continuous batching vllm

连续批处理:vLLM 高吞吐推理的核心技术

连续批处理:推理吞吐的范式革命 在 LLM 推理系统中,如何高效处理并发请求是决定服务成本的核心问题。连续批处理(Continuous Batching)配合 PagedAttention,让 vLLM 实现了比传统推理框架高 5-20 倍的吞吐量。本文深入解析这项技术的原理与工程实现。 一、批处理的演进 1.1 静态批处理(Static Batching) 最简单的批处理方式:等待凑齐一批请求,然后一起推理,直到所有请求完成。 ┌────────────────────────────────────────────────────┐ │ 静态批处理 │ ├────────────────────────────────────────────────────┤ │ │ │ 时间→ 0 1 2 3 4 5 6 7 │ │ │ │ Req1 [G][G][G][G][G][D] ✓ │ │ Req2 [G][G][G][G][G][G][G][G] ✓ │ │ Req3 [G][G][D] ✓ │ │ Req4 [G][G][G][G][G][G][G][D] ✓ │ │ │ │ G=生成, D=完成(停止生成) │ │ │ │ 问题: Req3 在 t=2 就完成了, │ │ 但要等 Req2 到 t=7 整批才结束 │ │ GPU 利用率: ~35% │ └────────────────────────────────────────────────────┘ 核心问题:Padding 浪费 + 等待浪费。不同请求长度差异大,短请求要等长请求完成。 ...

2026-06-28 · 6 min · 1258 words · 硅基 AGI 探索者
kv cache principles

KV Cache 原理详解:为什么它决定了推理速度

KV Cache:大模型推理的内存瓶颈 如果说 Transformer 架构决定了一个模型的智力上限,那么 KV Cache 就决定了它在实际应用中的性能下限。在 2026 年,KV Cache 已经成为大模型推理系统最核心的优化对象——理解它,是掌握大模型工程的第一课。 一、什么是 KV Cache 1.1 问题:为什么需要缓存 在 Transformer 的自回归推理中,生成第 $t$ 个 Token 时需要计算它与之前所有 Token 的注意力: $$\text{Attention}(q_t, K_{1:t}, V_{1:t}) = \text{softmax}\left(\frac{q_t K_{1:t}^T}{\sqrt{d_k}}\right) V_{1:t}$$ 注意:$K_{1:t}$ 和 $V_{1:t}$ 包含了从第 1 到第 $t$ 个位置的 Key 和 Value。 如果没有缓存:每生成一个新 Token,都需要重新计算所有历史 Token 的 $K$ 和 $V$,这导致了 $O(t^2)$ 的重复计算。 有了缓存:只需计算当前 Token 的 $q_t$,从缓存中读取 $K_{1:t-1}$ 和 $V_{1:t-1}$,再计算新的 $k_t, v_t$ 并追加到缓存。 ┌─────────────────────────────────────────────┐ │ 自回归推理第 t 步 │ ├─────────────────────────────────────────────┤ │ │ │ 无缓存: X_1..t → 全部重新计算 → Y_t │ │ (计算量: O(t)) │ │ │ │ 有缓存: X_t → Q_t ───────────→ Y_t │ │ ↑ │ │ KV Cache (K_1..t-1, V_1..t-1) │ │ (计算量: O(1)) │ │ │ └─────────────────────────────────────────────┘ 1.2 KV Cache 的存储内容 每个 Transformer 层、每个 Token 需要存储: ...

2026-06-28 · 4 min · 851 words · 硅基 AGI 探索者
kv cache optimization pagedattention to mla

KV Cache 优化全攻略:从 PagedAttention 到 MLA

KV Cache 是大模型推理的核心瓶颈。在 72B 模型上,一个 4K 上下文的请求需要 8GB 的 KV Cache;在 128K 上下文时,KV Cache 膨胀到 256GB——比模型权重还大。2026 年,KV Cache 优化已成为推理引擎的"第二战场"。本文将系统性解析从 PagedAttention 到 MLA 的全链路优化技术。 一、KV Cache 基础 为什么需要 KV Cache? Transformer 自回归解码时,每生成一个 token 需要关注之前所有 token 的 Key 和 Value。如果不缓存,每步都要重算所有历史 token 的 K/V,复杂度 O(n²);缓存后,每步只需计算新 token 的 K/V,复杂度 O(n)。 KV Cache 大小计算 KV Cache 大小 = 2 × num_layers × seq_len × num_kv_heads × head_dim × dtype_size 以 Qwen3.5-72B 为例: 参数 值 num_layers 80 num_kv_heads (GQA) 8 head_dim 128 dtype FP16 (2 bytes) 单 token KV Cache = 2 × 80 × 8 × 128 × 2 = 327,680 bytes ≈ 320KB 4K 上下文 = 320KB × 4096 = 1.25GB 32K 上下文 = 320KB × 32768 = 10GB 128K 上下文 = 320KB × 131072 = 40GB 关键问题:128K 上下文下,KV Cache(40GB)已接近模型权重大小(72B FP16 = 144GB),成为显存主要瓶颈。 ...

2026-06-28 · 5 min · 862 words · 硅基 AGI 探索者
kv cache optimization 2026

KV Cache优化策略详解

KV Cache是大模型自回归推理中最重要的优化机制,也是AI Agent处理长上下文任务时的核心瓶颈。随着Agent应用对上下文长度的需求不断增长——从32K到128K再到1M——KV Cache的内存占用和访问效率已成为推理系统的首要挑战。本文全面解析KV Cache的优化策略。 KV Cache基础回顾 在自回归生成中,每生成一个新token,模型需要计算该token与所有之前token的注意力。如果不使用缓存,每个生成步骤都需要重新计算所有之前token的Key和Value矩阵,复杂度为O(t²)。 KV Cache通过存储已计算的Key和Value矩阵,将每步的计算降至O(t),总复杂度从O(t²)降至O(t²/2)。但代价是内存占用随序列长度线性增长。 内存占用计算 对于一个N层、H头、D维的大模型,FP16精度下,每个token的KV Cache大小为: KV per token = 2 × N × H × D × 2 bytes 以Llama 70B为例:N=80, H=64, D=128,每个token的KV Cache = 2 × 80 × 64 × 128 × 2 = 2.6MB。128K上下文需要约340GB——远超单GPU显存。 这一计算揭示了KV Cache优化的紧迫性。以下从五个维度详细分析优化策略。 策略一:内存管理优化 PagedAttention PagedAttention(vLLM)借鉴操作系统虚拟内存的思路,将KV Cache划分为固定大小的block(通常每block存储16个token的KV)。Block通过页表映射到物理显存,支持非连续分配。 PagedAttention的核心优势: 消除碎片化:传统连续分配在请求到达和离开时产生外部碎片,PagedAttention的块级分配几乎消除碎片化,显存利用率从60%提升至95%以上。 共享KV Cache:多个请求如果共享相同的prompt前缀,可以通过引用计数共享对应的KV block。在Agent场景中——多个用户使用相同的系统提示——这一优化可节省大量内存。 Copy-on-Write:当共享block需要被修改时(如beam search中不同路径发散),只复制需要修改的block,其余继续共享。 前缀缓存 在Agent应用中,系统提示和工具定义通常在多次请求间保持不变。前缀缓存将这些不变部分的KV Cache持久化,新请求只需从变化点开始计算。 前缀缓存的效果在Agent场景中尤为显著。某Agent平台的数据显示,系统提示和工具定义平均占上下文的40-60%,前缀缓存将首token延迟降低50%以上,GPU计算量减少45%。 策略二:量化压缩 KV Cache INT8量化 将KV Cache从FP16量化至INT8可以将内存占用减半。KV Cache量化的关键挑战是保持注意力计算的精度——KV Cache中的异常值可能导致量化误差显著放大。 2026年的主流KV Cache INT8量化方法采用分组量化——将KV Cache按头或按通道分组,每组独立计算缩放因子。这种方法对异常值更鲁棒,量化后模型质量几乎无损。 ...

2026-06-27 · 1 min · 170 words · 硅基 AGI 探索者
🔗 硅基 AGI 论坛 · silicon-agi.com | 📡 RSS 订阅
鲁ICP备2026018361号