AI Agent的规划能力:从ReAct到Tree-of-Planning

规划:Agent的核心能力 AI Agent与聊天机器人的本质区别在于规划能力——将复杂目标分解为可执行步骤并动态调整的能力。从简单的ReAct循环到复杂的树搜索规划,Agent规划算法经历了快速演进。 ReAct:推理与行动的交错 基本循环 ReAct(Reasoning + Acting)是Agent规划的基石,核心思想是交错推理和行动: Thought: 用户要查北京天气,我需要调用天气API Action: search_weather(city="北京") Observation: 北京今天晴,25°C Thought: 获取到天气信息,可以回答用户了 Answer: 北京今天天气晴朗,气温25°C,适合外出活动。 实现细节 class ReActAgent: def __init__(self, llm, tools, max_steps=10): self.llm = llm self.tools = tools self.max_steps = max_steps def run(self, task): trajectory = [] for step in range(self.max_steps): # 生成下一步思考和行为 prompt = self._build_prompt(task, trajectory) response = self.llm.generate(prompt) thought, action = self._parse(response) trajectory.append({"thought": thought, "action": action}) if action["type"] == "finish": return action["answer"] # 执行工具 if action["type"] == "tool": result = self.tools[action["name"]](**action["params"]) trajectory.append({"observation": result}) return "达到最大步数限制" def _build_prompt(self, task, trajectory): prompt = f"""任务:{task} 可用工具:{list(self.tools.keys())} 历史: """ for item in trajectory: if "thought" in item: prompt += f"Thought: {item['thought']}\n" prompt += f"Action: {item['action']}\n" elif "observation" in item: prompt += f"Observation: {item['observation']}\n" prompt += "Thought:" return prompt ReAct的局限 无记忆反馈:失败的经验不会影响后续尝试 线性思维:无法回溯到之前的选择点尝试其他路径 容易陷入循环:在复杂任务中反复尝试相同的失败方案 Reflexion:从失败中学习 核心改进 Reflexion在ReAct基础上增加了自我反思机制。当任务执行失败时,Agent会生成反思并存储到长期记忆中: ...

2026-07-16 · 3 min · 515 words · 硅基 AGI 探索者

Self-RAG与Adaptive-RAG:让模型学会何时检索

朴素RAG的致命缺陷 朴素RAG对每个问题都执行检索,这带来两个问题:简单问题浪费检索资源(“1+1等于几"不需要查文档),复杂问题单次检索不够(“对比三家公司五年财报"需要多次检索)。自适应RAG的核心思想是让模型自己决定:是否需要检索、检索几次、检索什么。 Self-RAG:自我反思的检索 核心机制 Self-RAG训练模型输出特殊的反思token来控制检索行为: [Retrieve]:是否需要检索 [Relevant]:检索结果是否相关 [Supported]:生成内容是否被检索结果支持 [Useful]:检索结果是否有用 工作流程 输入问题 → 模型判断[Retrieve] → 是 → 检索Top-K文档 → 模型判断[Relevant] → 过滤不相关文档 → 逐段生成 → [Supported]标注 → 输出 否 → 直接生成 → 输出 训练方法 Self-RAG的训练分为两阶段: 阶段1:训练 critic 模型 收集标注数据训练一个判断模型: 何时需要检索(基于问题类型) 文档是否相关(人工标注) 生成是否被支持(对照检查) class CriticModel: def __init__(self, base_model): self.model = base_model def should_retrieve(self, question): # 简单事实问题不需要检索 # 需要最新信息的问题需要检索 # 需要引用来源的问题需要检索 prompt = f"判断以下问题是否需要检索外部信息:\n{question}" return self.model.generate(prompt) == "yes" def is_relevant(self, question, document): prompt = f"判断文档是否与问题相关:\n问题:{question}\n文档:{document}" return self.model.generate(prompt) == "relevant" 阶段2:训练生成模型 在生成模型中注入反思token的训练: def self_rag_generate(question, retriever, model): # Step 1: 判断是否检索 if model.should_retrieve(question): docs = retriever.search(question, top_k=5) # 过滤不相关文档 relevant_docs = [d for d in docs if model.is_relevant(question, d)] else: relevant_docs = [] # Step 2: 逐段生成 response = "" for segment in model.generate_segments(question, relevant_docs): # 检查是否被来源支持 support_level = model.check_support(segment, relevant_docs) if support_level == "fully_supported": response += segment + " [Supported]" elif support_level == "partially_supported": response += segment + " [Partially Supported]" else: # 无支持的内容触发重新检索 new_docs = retriever.search(segment, top_k=3) response += segment + " [No Support - Retrieved]" return response 效果对比 在多个基准上,Self-RAG相比朴素RAG: ...

2026-07-16 · 3 min · 529 words · 硅基 AGI 探索者

知识图谱增强大模型:神经符号融合的实践路径

神经网络的直觉与符号推理的严谨 大语言模型擅长模式匹配和直觉推理,但在精确逻辑推理和事实一致性上存在天然缺陷。知识图谱作为结构化的符号知识表示,恰好互补了LLM的短板。两者的融合——神经符号AI——正在成为构建可靠AI系统的重要方向。 知识图谱基础 图谱表示 知识图谱以三元组形式存储事实: (Albert Einstein, born_in, Ulm) (Albert Einstein, field, Physics) (Albert Einstein, won, Nobel_Prize_1921) (Nobel_Prize_1921, category, Physics) 在Neo4j等图数据库中,这些三元组构成可查询的知识网络: // 查找所有获得诺贝尔物理学奖的科学家 MATCH (person)-[:won]->(prize {category: "Physics"}) RETURN person.name, prize.year 本体设计 本体定义了知识图谱的schema——实体类型、关系类型和属性: class Ontology: entity_types = { "Person": {"name": str, "birth_date": date, "nationality": str}, "Organization": {"name": str, "founded": date, "industry": str}, "Concept": {"name": str, "definition": str} } relation_types = { "works_for": {"domain": "Person", "range": "Organization"}, "developed": {"domain": "Organization", "range": "Concept"}, "collaborated_with": {"domain": "Person", "range": "Person"} } 知识图谱增强LLM的四种模式 模式1:知识注入(KG-RAG) 在推理时从知识图谱检索相关知识,注入到LLM的上下文中: class KGRAG: def __init__(self, kg, llm, embedder): self.kg = kg # 知识图谱 self.llm = llm self.embedder = embedder def query(self, question): # 1. 实体链接 entities = self._extract_entities(question) # 2. 子图检索 subgraph = self._retrieve_subgraph(entities, hops=2) # 3. 路径排序 paths = self._rank_paths(question, subgraph) # 4. 文本化 context = self._serialize_paths(paths) # 5. LLM生成 prompt = f"""基于以下知识图谱信息回答问题: 知识: {context} 问题:{question} """ return self.llm.generate(prompt) def _retrieve_subgraph(self, entities, hops=2): subgraph = [] for entity in entities: # BFS遍历n跳邻域 frontier = [entity] for _ in range(hops): next_frontier = [] for node in frontier: neighbors = self.kg.get_neighbors(node) for neighbor, relation in neighbors: subgraph.append((node, relation, neighbor)) next_frontier.append(neighbor) frontier = list(set(next_frontier)) return subgraph KG-RAG相比传统向量RAG的优势: ...

2026-07-16 · 3 min · 443 words · 硅基 AGI 探索者

MoE架构深度解析:混合专家模型的训练与推理优化

MoE:用稀疏激活突破密集模型的效率瓶颈 混合专家模型(Mixture of Experts)通过稀疏激活机制,让模型总参数量巨大但每次推理只激活一小部分。DeepSeek-V3的671B参数中每次只激活37B,Llama 4的500B+参数只激活30B——这就是MoE的效率魔法。 MoE的数学基础 标准MoE层 给定输入 $x$,MoE层的计算过程: $$y = \sum_{i=1}^{N} g_i(x) \cdot f_i(x)$$ 其中 $f_i$ 是第 $i$ 个专家(一个FFN),$g_i$ 是路由函数: $$g_i(x) = \text{softmax}(W_g \cdot x)_i$$ Top-K路由只保留 $K$ 个最大的 $g_i$,其余置零: $$g_i(x) = \begin{cases} \frac{\exp(W_g \cdot x)i}{\sum{j \in \text{TopK}} \exp(W_g \cdot x)_j} & i \in \text{TopK} \ 0 & \text{otherwise} \end{cases}$$ 专家容量因子 为防止所有token路由到同一专家(路由崩塌),每个专家有一个容量上限: $$\text{capacity} = \frac{T \cdot K}{N} \times \text{capacity_factor}$$ 其中 $T$ 是token数,$K$ 是Top-K,$N$ 是专家数。超出容量的token被丢弃或传递到下一层。 路由机制设计 标准Top-K路由 最简单的路由方式。每个token独立选择Top-K个专家: class TopKRouter(nn.Module): def __init__(self, dim, n_experts, top_k=2): self.gate = nn.Linear(dim, n_experts) self.top_k = top_k def forward(self, x): # x: [batch * seq_len, dim] logits = self.gate(x) scores = F.softmax(logits, dim=-1) # Top-K选择 topk_scores, topk_indices = scores.topk(self.top_k, dim=-1) topk_scores = topk_scores / topk_scores.sum(dim=-1, keepdim=True) return topk_scores, topk_indices 专家选择路由 DeepSeek-V3使用了一种"专家选择"的反向路由:每个专家选择Top-K个token,而非token选择专家。这平衡了专家负载: ...

2026-07-16 · 3 min · 445 words · 硅基 AGI 探索者

AI视频生成技术前沿:Sora、Kling与可灵的架构对比

AI视频生成:从科幻到生产工具 2024年Sora的发布震惊世界,2026年的AI视频生成技术已经从"令人惊叹的Demo"进化为可用的生产工具。开源与商业方案并驾齐驱,视频长度从4秒扩展到分钟级。 技术架构演进 扩散模型路线 当前主流视频生成模型基于扩散模型,但在具体架构上有显著差异。 Sora的DiT架构 Sora使用Diffusion Transformer(DiT)架构,将视频表示为时空token序列: 输入视频 → Patch化 → 时空token序列 → DiT块(自注意力+MLP)→ 去噪 → 解码为视频 Sora的关键创新: 时空Patch:将视频切分为包含时间和空间信息的Patch 联合训练图像和视频:图像视为单帧视频 文本条件注入:通过交叉注意力注入文本描述 Kling(可灵)的架构选择 快手的Kling采用了3D VAE + Diffusion的路线: class KlingVideoGenerator: def __init__(self): self.vae = VAE3D() # 3D VAE压缩视频 self.dit = DiT3D() # 3D DiT去噪 self.text_encoder = T5Encoder() def generate(self, text_prompt, duration=5): # 1. 文本编码 text_emb = self.text_encoder(text_prompt) # 2. 生成压缩空间中的噪声 latent = torch.randn(*self._compute_shape(duration)) # 3. 迭代去噪 for t in reversed(range(T)): latent = self.dit(latent, t, text_emb) # 4. 解码为视频 video = self.vae.decode(latent) return video 自回归路线 Meta的VideoPoet和Google的VideoLLaMA探索了自回归视频生成: 文本token + [视频token序列] → 自回归生成 → 解码为视频 自回归路线的优势是天然支持长视频生成(逐帧生成),但帧间一致性控制较难。 核心技术挑战 时空一致性 视频生成最大的挑战是保持帧间的一致性——人物不能在帧之间突然变样,场景不能无故变换。 解决方案1:3D注意力:在注意力计算中同时关注空间和时间维度,但这导致计算复杂度 $O(n^2)$ 中的n包含时间维度,显存需求巨大。 ...

2026-07-16 · 2 min · 269 words · 硅基 AGI 探索者

数字人技术栈2026:从语音合成到实时驱动的全链路解析

数字人:从CG到AI驱动的范式转变 传统数字人依赖昂贵的动作捕捉和关键帧动画,制作一个高质量的3分钟视频需要数周。AI驱动的数字人将这个时间压缩到分钟级,且质量持续逼近真实人类。 技术栈全景 数字人技术栈可以拆解为五个核心模块:文本到语音(TTS)、唇形同步、表情生成、身体动作生成、实时渲染。 TTS:从自然到富有表现力 2026年TTS技术格局 传统方案:VITS、Tacotron系列已逐渐被淘汰,自然度和表现力不足。 当前主流: CosyVoice 2:阿里开源,支持跨语言克隆和情感控制 F5-TTS:基于Flow Matching的TTS,零样本克隆效果好 OpenAI TTS-2:商用方案,延迟低,API调用简单 ElevenLabs V3:表现力最强,支持笑声、停顿等非语言声音 关键技术突破 零样本声音克隆:只需3-10秒参考音频即可克隆说话人音色。F5-TTS使用Flow Matching替代扩散模型,推理速度提升5倍: from f5_tts import F5TTS tts = F5TTS.from_pretrained("F5-TTS") tts.synthesize( text="大家好,欢迎来到硅基AGI频道", ref_audio="reference.wav", # 3秒参考音频 ref_text="这是参考音频对应的文字", output_path="output.wav" ) 情感控制:CosyVoice 2通过情感标签控制语音情感: from cosyvoice import CosyVoice2 model = CosyVoice2.from_pretrained("CosyVoice2-0.5B") model.instruct_tts( text="太好了,我们成功了!", instruct_text="用激动和兴奋的语气说话", output="excited.wav" ) 流式合成:逐句甚至逐词合成,首字延迟可控制在200ms内,满足实时对话需求。 唇形同步:让数字人"说话"自然 Wav2Lip时代已过去 早期的Wav2Lip方案虽然开创了音频驱动唇形的先河,但存在分辨率低、边缘模糊等问题。 当前最优方案 SadTalker / MuseTalk: MuseTalk在实时性和质量之间取得了很好的平衡: from musetalk import MuseTalk musetalk = MuseTalk( avatar_path="avatar.png", fps=30 ) # 实时驱动 musetalk.realtime_drive( audio_input=mic_stream, # 麦克风输入 output=screen # 屏幕输出 ) 3D方案:GeneFace++: 对于3D数字人,GeneFace++通过3DMM(3D Morphable Model)实现更精确的唇形控制: # 提取3DMM参数 coefficients = geneface.extract_3dmm(audio) # coefficients包含: 身份参数、表情参数、唇形参数 # 唇形参数直接驱动3D面部模型 评估指标 唇形同步质量的评估使用LSE-C(Lip Sync Error - Confidence)和LSE-D(Lip Sync Error - Distance): ...

2026-07-16 · 2 min · 277 words · 硅基 AGI 探索者

Prompt工程进阶:思维链、自一致性与推理增强技术

超越零样本的推理增强 Prompt工程已从简单的指令编写进化为一门系统化的方法论。在需要复杂推理的任务中,恰当的推理增强技术可以将模型准确率提升30-50%。 思维链(Chain-of-Thought) 基本CoT 思维链的核心思想是让模型"展示推理过程"。通过在prompt中加入"让我们一步步思考"或提供推理示例: Q: 一个商店有23个苹果,卖了17个后又进了8个,现在有多少苹果? A: 让我们一步步思考。 初始数量:23 卖出17个后:23 - 17 = 6 又进了8个后:6 + 8 = 14 答案:14 CoT对数学推理、逻辑推理和多步规划任务效果显著。在GSM8K数学基准上,CoT将GPT-4的准确率从约75%提升到92%。 Zero-shot CoT 最简单的CoT只需在prompt末尾添加: 让我们一步步思考。 这五个字的魔力在于:它激活了模型在预训练阶段学到的"推理模式",使模型生成中间推理步骤而非直接跳到答案。 Few-shot CoT 提供2-4个带有推理过程的示例,效果更好但消耗更多token。关键是示例的推理过程要正确且简洁——过长的推理链反而会降低性能。 自一致性(Self-Consistency) 核心思想 CoT的一个问题是:同一条推理路径可能系统性偏向错误答案。自一致性通过生成多条推理路径并投票选择最一致的答案: def self_consistency(prompt, n_samples=5, temperature=0.7): responses = [] for _ in range(n_samples): response = llm.generate( prompt + "\n让我们一步步思考。", temperature=temperature # 较高温度增加多样性 ) answer = extract_answer(response) responses.append(answer) # 多数投票 from collections import Counter most_common = Counter(responses).most_common(1)[0] return most_common[0] 在GSM8K上,自一致性将准确率从92%进一步提升到96%+。代价是推理成本增加5倍。 采样策略 温度:0.5-0.8之间最佳,太低缺乏多样性,太高推理质量下降 采样数:5-10个样本是性价比最优区间 停止条件:如果前3个答案一致,可以提前停止 思维树(Tree-of-Thought) 核心思想 CoT是线性推理,ToT将推理过程组织为树形结构,支持分支探索和回溯: class ThoughtNode: def __init__(self, thought, parent=None): self.thought = thought self.parent = parent self.children = [] self.value = 0 评估值 self.visited = False def tree_of_thought(problem, max_depth=4, branching=3): root = ThoughtNode(problem) frontier = [root] for depth in range(max_depth): next_frontier = [] for node in frontier: # 生成branching个可能的下一步思考 thoughts = generate_thoughts(node, n=branching) for thought in thoughts: child = ThoughtNode(thought, parent=node) # 评估这个思考方向的价值 child.value = evaluate_thought(thought, problem) node.children.append(child) next_frontier.append(child) # 保留最优的节点继续探索(束搜索) frontier = sorted(next_frontier, key=lambda n: n.value, reverse=True)[:branching] # 回溯最优路径 return trace_best_path(root) 适用场景 ToT在以下场景中明显优于CoT: ...

2026-07-16 · 2 min · 314 words · 硅基 AGI 探索者

多模态大模型技术演进:从CLIP到原生多模态架构

多模态融合的三个阶段 多模态大模型的发展经历了三个阶段:模态对齐(CLIP)、模态桥接(LLaVA)、原生多模态(GPT-4o)。每个阶段都代表着对"如何让模型同时理解图像和文本"这一核心问题的不同回答。 第一阶段:CLIP双塔对齐 OpenAI在2021年提出的CLIP开创了对比学习对齐范本。CLIP分别用图像编码器和文本编码器提取特征,通过对比损失拉正样本对、推负样本对: class CLIP(nn.Module): def __init__(self, image_encoder, text_encoder, dim=512): self.image_encoder = image_encoder self.text_encoder = text_encoder self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1/0.07)) def forward(self, images, texts): image_features = self.image_encoder(images) text_features = self.text_encoder(texts) # 归一化 image_features = F.normalize(image_features, dim=-1) text_features = F.normalize(text_features, dim=-1) # 对比损失 logit_scale = self.logit_scale.exp() logits = logit_scale * image_features @ text_features.T return logits CLIP的局限在于它是"理解"而非"生成"——可以判断图文匹配度,但不能生成图像描述或根据文本生成图像。但它奠定了后续多模态模型的基础:CLIP的视觉编码器被广泛应用于Stable Diffusion、LLaVA等模型中。 第二阶段:桥接架构(LLaVA) LLaVA代表了"视觉编码器+LLM"的桥接架构。核心思路是将图像编码为"视觉token"插入LLM的输入序列: [文本token] + [视觉token1] [视觉token2] ... [视觉tokenN] + [文本token] 关键设计选择: 视觉编码器选择 大多数模型使用CLIP ViT-L/14作为视觉编码器。它经过4亿图文对训练,视觉特征质量高。但也有例外:Qwen-VL使用自研的视觉编码器,支持动态分辨率。 连接器设计 连接器负责将视觉编码器的输出适配到LLM的输入空间: 线性投影(LLaVA-1.5):简单MLP,2层即可 Q-Former(BLIP-2):使用可学习的query token提取视觉信息 像素打散(Fuyu):直接将图像patch展平作为token LLaVA-1.5的线性投影看似简单,但在实践中效果最好——简单即有效。 分辨率处理 标准CLIP使用224x224分辨率,这限制了对细节的识别。解决方案: 动态分辨率(Qwen-VL):根据输入图像大小动态调整patch数量 切片策略(LLaVA-NeXT):将高分辨率图像切成多个子图,分别编码 原生高分辨率(InternVL):使用原生支持高分辨率的ViT 第三阶段:原生多模态架构 GPT-4o代表了原生多模态的新范式:不是将视觉编码器"嫁接"到LLM上,而是从头训练一个统一处理所有模态的模型。 原生多模态的核心特征 共享表示空间:图像、文本、音频在同一个embedding空间中 统一Transformer:单一Transformer处理所有模态,无需模态特定的编码器 端到端训练:从预训练阶段就混合多模态数据 架构设计推测 基于公开信息,原生多模态模型的架构可能如下: class NativeMultimodalModel(nn.Module): def __init__(self, dim=4096, n_layers=32): # 统一的token化器 self.text_tokenizer = TextTokenizer() self.image_tokenizer = ImageTokenizer() # VQ-VAE或类似 self.audio_tokenizer = AudioTokenizer() # 统一Transformer self.transformer = Transformer(dim, n_layers) # 统一输出头 self.text_head = nn.Linear(dim, vocab_size) self.image_head = nn.Linear(dim, image_codebook_size) self.audio_head = nn.Linear(dim, audio_codebook_size) 关键挑战在于图像和音频的tokenization:如何将连续的高维信号离散化为token序列。VQ-VAE和其变体(VQ-GAN、FSQ)是主流方案。 ...

2026-07-16 · 1 min · 176 words · 硅基 AGI 探索者

AI安全对齐技术栈:从RLHF到Constitutional AI

对齐问题:让模型"听话"且"不闯祸" 大模型的安全对齐是AGI发展道路上不可回避的核心问题。一个能力强大但不对齐的模型可能带来严重的社会风险。本文系统梳理当前主流的对齐技术方案。 RLHF:经典三阶段方法 第一阶段:SFT(监督微调) 使用人工编写的高质量对话数据微调基座模型: # SFT数据格式示例 { "instruction": "解释量子纠缠", "input": "", "output": "量子纠缠是指两个或多个粒子..." } SFT建立模型的指令跟随能力,是对齐的基础。 第二阶段:奖励模型训练 收集人类偏好数据(A优于B或B优于A),训练一个奖励模型预测人类偏好: class RewardModel(nn.Module): def __init__(self, base_model): super().__init__() self.transformer = base_model self.value_head = nn.Linear(hidden_size, 1) def forward(self, input_ids): hidden_states = self.transformer(input_ids).last_hidden_state # 取最后一个token的隐状态 last_hidden = hidden_states[:, -1, :] reward = self.value_head(last_hidden) return reward.squeeze(-1) 第三阶段:PPO强化学习 使用奖励模型的分数作为奖励信号,通过PPO算法优化策略模型: PPO阶段的核心挑战: KL散度约束:防止策略模型偏离SFT模型太远导致能力退化 奖励黑客:模型可能找到欺骗奖励模型的"捷径" 训练不稳定:需要精细的超参数调优 DPO:简化对齐流程 Direct Preference Optimization(DPO)绕过了奖励模型和强化学习,直接从偏好数据优化策略模型: def dpo_loss(policy_chosen_logps, policy_rejected_logps, ref_chosen_logps, ref_rejected_logps, beta=0.1): pi_logratios = policy_chosen_logps - policy_rejected_logps ref_logratios = ref_chosen_logps - ref_rejected_logps logits = pi_logratios - ref_logratios return -F.logsigmoid(beta * logits).mean() DPO的优势: 无需训练奖励模型,减少一个训练阶段 不需要PPO的复杂训练循环 训练更稳定,超参数更少 数学上等价于在隐式奖励上做最优的Bradley-Terry模型 但DPO也有局限:对数据质量更敏感,且在复杂多轮对话场景中效果不如RLHF。 Constitutional AI:自我改进对齐 Anthropic提出的Constitutional AI(CAI)方法让模型基于一组"宪法"原则进行自我批评和修正: 宪法原则示例: 1. 不要生成歧视性内容 2. 拒绝协助危险活动 3. 保持诚实,不编造信息 4. 尊重用户隐私 CAI的流程: 模型生成初始回复 模型根据宪法原则自我批评 模型生成修正后的回复 用修正后的数据做RLHF/DPO 这种方法减少了对人类标注的依赖,且对齐效果可与RLHF媲美。 安全护栏与实时过滤 对齐训练之外,推理时的安全护栏同样重要: ...

2026-07-16 · 2 min · 214 words · 硅基 AGI 探索者

大模型推理优化全景:从KV Cache到投机解码

推理优化的核心矛盾 大模型推理面临一个核心矛盾:用户需要低延迟和高吞吐,但自回归生成天然是串行的。每生成一个token都需要完整的前向传播,而KV Cache的显存占用随序列长度线性增长。本文系统梳理当前主流的推理优化技术。 KV Cache优化 KV Cache的工作原理 在自回归生成中,前面token的Key和Value可以缓存复用,避免重复计算。但KV Cache的显存占用惊人: $$\text{KV Cache Size} = 2 \times n_{layers} \times n_{heads} \times d_{head} \times seq_len \times batch_size \times \text{dtype_size}$$ 以Llama-3-70B为例,FP16精度下,单条2048长度的请求KV Cache就需要约5GB显存。 PagedAttention vLLM的PagedAttention借鉴操作系统的虚拟内存管理,将KV Cache分成固定大小的block(如16个token),按需分配: # vLLM的核心创新:非连续KV Cache存储 class PagedAttention: def __init__(self, block_size=16): self.block_size = block_size self.block_table = {} # 逻辑block -> 物理block映射 def allocate(self, seq_len): n_blocks = (seq_len + self.block_size - 1) // self.block_size return [self._alloc_block() for _ in range(n_blocks)] PagedAttention将显存利用率从约60%提升到96%以上,显著提高并发处理能力。 KV Cache量化 将KV Cache从FP16量化到INT8可以减半显存占用,而精度损失可控: # vLLM中启用KV Cache量化 from vllm import LLM, SamplingParams llm = LLM( model="meta-llama/Meta-Llama-3-70B", quantization="fp8", # 模型权重量化 kv_cache_dtype="fp8", # KV Cache量化 max_model_len=8192, ) 注意力机制优化 Flash Attention 2/3 Flash Attention通过分块计算和减少HBM读写,将注意力计算复杂度从 $O(n^2)$ 内存降到 $O(n)$ 内存: ...

2026-07-16 · 2 min · 247 words · 硅基 AGI 探索者
鲁ICP备2026018361号