第62期AI译文:从推理加速到端侧部署的工程实践

发布时间:2026/10/13 19:01:30
第62期AI译文:从推理加速到端侧部署的工程实践
TowardsArtificialIntelligence 博客中文翻译系列做到第六十二期终于整理完了。这个系列从第一期开始就不只是“把英文换成中文”的机械工作越往后越像一种带注释的工程笔记每篇译文背后都有查证、复算和补注。这一期的目录整体偏工程落地收录的文章覆盖了大模型推理加速、多模态模型评估、向量检索选型、Agent 工作流编排和端侧模型部署几个方向。几篇放在一起看几乎就是“从模型到产品”的一条完整链路。无论你是刚入门的AI开发者还是已经在做应用落地的工程师这一期都值得从头到尾读一遍。1. 第62期选题概览与翻译拆解1.1 技术主题分布与选择逻辑拿到这一期的原始投稿列表时我的第一反应是主题太散了既有推理权重怎么压也有 Agent 怎么编排看起来各自独立。但通读下来发现它们有一条暗线都可以用“一个 AI 功能从模型到上线需要跨过哪些坑”来概括。翻译组在做选题的时候看的不只是单篇文章质量还看整个系列的覆盖是否均衡这次正好凑齐了从模型优化到应用落地的几个典型环节。主题领域核心问题适合读者大模型推理加速生成回答为什么慢时延花在哪个环节正在做模型服务的后端工程师多模态模型评估模型“会说”不等于“做对”指标怎么定算法工程师、评测同学向量检索与数据库选型相似度检索为什么召回不理想做知识库、搜索、RAG 的开发者Agent 工作流编排多步骤任务如何保持稳定而不是步步出错搞 AI Agent 应用的人端侧模型部署内存、功耗、精度如何平衡移动端、嵌入式方向的工程师选文逻辑有三条。第一是内容保鲜度。像“推理加速”这类文章底层原理比较稳定不是那种下个月就失效的热点翻译出来长期有参考价值。第二是可操作性。我不太倾向于选纯粹概念层面的“科普”更愿意选那些有实验数据、有参数对比、有代码片段的文章这类内容翻完后读者能直接动手。第三是观点独立性。有些来稿有明显的商业推广味道把某个开源项目吹成银弹这类文章即便流量高我也不会放进正篇最多在编译后记里提一句。从版面安排来看这期把“推理加速”和“多模态评估”放在前面因为它们解决的是当前最普遍的两个痛点模型能跑了但不够快模型上线了但说不清好不好。后面三篇更像进阶话题适合已经跑通 Demo、准备做产品化的读者。翻译时我也特别注意保留这种“由浅入深”的阅读节奏读者按顺序看思维负担最小。1.2 翻译难点与取舍翻译这一期的标题我基本遵循“信息前置”原则。英文技术博客标题习惯用疑问句和隐喻中文读者扫一眼往往不知道讲的是什么。比如一篇讨论推理瓶颈的原文标题是疑问句我最终译为“大模型生成慢先检查这三个环节”把结论放在标题里读者一下子就能判断是否有用。直译永远是最省事的但不是最有效的。尤其是系列翻译读者可能先看标题再决定点不点进来标题说人话很重要。长句拆解也是重头。英文技术文章喜欢用很长的从句链一个句子包含“如果”“虽然”“因为”三层逻辑。我的处理方法是先按主谓宾拆出骨架再按逻辑关系拆成两三个中文短句同时保留原来的顺序避免读者来回跳。例如原文里经常出现“it is worth noting that”这类填充结构直译成“值得注意的是”在中文里是多余的我会直接删掉把后面的内容并进主句。删完之后句子变短了意思反而更清楚。术语处理上Transformer、KV Cache、HNSW 这类词保留英文第一次出现时加括号注释。原因很简单中文社区已经习惯这些英文词强行译成“键值缓存”“分层可导航小世界图”反而增加认知负担。但“量化”“对齐”“时延”这种有标准中文译法的概念就统一用中文只在首译括注英文。这里有个原则翻译是为读者服务的不是为术语表服务的术语表只是工具最终目标是让读者在中文阅读时少查字典。还有一层取舍是过滤软广。技术来稿里经常出现“某产品实测性能遥遥领先”的表达方式我会把比较的维度保留把夸大的定性描述删除。一篇翻译不是给原平台做广告的读者需要的是事实和参数。比如原文说某个方案“解决了所有问题”翻译时我会根据正文里的实验数据把它改成“在特定条件下解决了某类问题”这不是篡改而是把作者经得起验证的内容提炼出来。2. 第62期核心内容精读从一篇技术讲透一个工程问题2.1 大模型推理加速时延预算到底花在哪了这一期推理加速那篇开头用了一个很直观的说法生成式模型不是一个词一个词“挤”出来的正是因为生成过程是自回归的每生成一个 token都要把模型权重从显存里完整读一遍再结合当前已有的上下文预测下一个词。所以生成速度的上限往往不是由算力决定而是由显存带宽决定。这个因果关系很多人一开始理解不了觉得 GPU 不是越贵越快吗其实生成阶段被卡在数据搬运上的概率远大于被卡在计算上的概率。这个点很多人会忽略。我按文章的思路自己算了一笔账假设一个 70 亿参数的模型用 FP16 存储权重大约是 14GB一块主流显卡的显存带宽即使达到 2TB/s单纯读取权重也需要大约 7ms/token。再加上注意力计算、KV Cache 更新、采样和调度开销实际单 token 时延很容易到 10ms 以上也就是每秒钟只能生成 100 个 token 左右。用户体感就是“一个字一个字蹦”尤其在输出长回答时特别明显。如果你本地跑过稍大一点的模型你应该能对得上这个体验。优化方向核心思路代价或限制权重量化把FP16压成INT8/INT4减少每次权重读取的数据量精度可能下降小模型更敏感投机采样小模型先草稿多个token大模型一次验证草稿模型质量决定收益上限KV Cache管理把历史缓存拆块管理降低显存碎片不直接降低单token时延批处理优化多个请求拼batch提高GPU利用率单请求等待时间可能增加翻译这篇文章时有一个细节原文提到“推理加速约两倍”我第一反应是直接翻译但后来回去查了实验设置发现这个两倍仅针对自回归解码阶段不包括预填充阶段和网络开销。如果读者把它理解成端到端两倍实践时会有很大落差。所以我在译文里补了一条译者注明确加速比的适用范围。这类注释是翻译技术文章最有价值的部分因为作者和读者往往不在同一个上下文里作者默认读者了解他的实验环境翻译则要把这个环境重新显式地交代出来。2.2 多模态模型评估别被“高分指标”带偏多模态评估那篇的核心观点是模型能力越强评估越难公开榜单上的高分经常给人虚假的安全感。文章举了一个典型现象某个模型在公开榜单上排名很靠前但一换到真实业务数据上就频频“答非所问”。问题不一定出在模型而是出在评估分布和真实使用场景完全不一致。这个现象我见过太多次了团队花了几周把榜单指标刷上去以为可以上线结果面对真实用户数据时表现稀碎原因就是评估集没有代表性。自动指标有很多明显的局限。图像描述任务常用 BLEU、ROUGE、CIDEr这些指标本质上是 n-gram 重叠度和人的语义判断相关度很有限。一句话说得语义完全正确但用词不同重叠度就很低反过来重复套话反而能拿到高分。视觉问答任务常用准确率但遇到“图片里没有这个信息”“我不确定”这类合理回答准确率无法区分对错。多语言和长尾场景覆盖不足也会让模型的实际表现被严重高估。也就是说一个分数看起来很高的模型可能只是把公开测试集里的常见模式背下来了。我翻译时把原文建议整理成了一个可操作的评估方案建立自己的评估集至少覆盖正常 case、困难 case、冲突 case、隐私边界 case 四类自动指标只做回归测试版本发布前必须做人工抽样打分对错误结果分类统计区分识别错误、推理错误、幻觉三类分别找改进方向额外记录模型的拒答率和“没话找话”率这两个数比准确率更反映可用性。评估维度推荐做法常见坑语义一致性人工评分或大模型裁判盲信大模型裁判需要抽样复核事实准确性用结构化知识进行核对只看生成流畅度忽略事实错误边界行为设计冲突和未知输入评估集太干净真实场景全垮多语言支持覆盖目标用户实际语言分布用翻译测试集代替原生语言测试这一篇翻译过程中碰到过一个公式错误原文把准确率和精确率混用了。这件事不细看很容易漏因为两个词在外观上很接近中文也容易被带偏。我按照上下文改成正确的表述并在注释里说明了原因。这也是为什么我坚持在翻译时复算所有指标看到一个数字先想它是怎么算出来的再决定怎么写中文。读者不会盯着每个数字去查证译者有这个责任把明显的问题拦下来。2.3 向量检索与数据库选型召回率才是硬道理向量数据库选型那篇是这期里最“工程”的一篇几乎没有空话。文章开篇就给了一个观点向量检索效果好不好不能只怪数据库Embedding 模型、索引参数、重排策略三个环节任何一个掉链子最终召回率都会很难看。我接触过很多做知识库项目的团队花了很大力气换数据库结果召回率没变化因为问题出在 Embedding 模型和 chunk 切分上数据库只是背锅的那个。索引层面文章重点对比了 HNSW 和 IVF 两类。HNSW 是图结构查询时按层导航搜索质量高但内存占用也高IVF 是聚类倒排先通过聚类缩小候选范围再在候选集里做精确搜索。选择哪一种取决于你的数据量和硬件约束。数据量小、追求准确率HNSW 更省心数据量特别大、内存吃紧IVF 家族更有优势。这里没有绝对的好坏只有适不适合翻译时我也尽量不把任何一种方案描述成“默认最优”。调参上最常改的是 HNSW 的 M、efConstruction、efSearch以及 IVF 的 nlist、nprobe。我个人的实操心得是不要一上来就把 M 和 efConstruction 拉满那样建图时间和内存都会失控收益却不是线性的。正确顺序是先固定一个能接受的内存上限在验证集上测 recall10召回不够优先提高 efSearch让查询时多走走邻居节点再不行才考虑增加 M。原因是 M 直接影响每个节点的连接数量内存增长非常快而 efSearch 只是在查询时临时多扫描一点代价小得多。原文给了一个我很认同的做法用暴力检索算一个“理想召回率”作为上限。比如你的业务数据有 5000 条每次查询用全部向量暴力计算相似度得到 top-10 作为标准答案然后换上 HNSW 索引看它的 top-10 和标准答案重合多少。如果某些参数下召回率连理想值的 80% 都达不到问题往往出在索引配置而不是数据本身。这个思路简单但能帮人少走很多弯路。我翻到这的时候顺手在自己的测试集上跑了一遍发现默认参数下 recall10 只有 60% 出头把 efSearch 调大之后能提到 85%差异非常明显。另外要特别注意向量数据库返回的相似度分数不能直接当置信度用。不同 Embedding 模型产出的分数分布差别很大有的模型分数常年集中在 0.8 到 0.9 之间0.85 可能已经是很低的值另一个模型可能整体分布在 0.5 到 0.70.65 就算很接近了。正确做法是用分位数校准或者干脆只看排序位置不要对着分数绝对值去定阈值。这一点原文写得很清楚翻译时我也特意加粗因为它是实际项目里最容易被忽略的坑。2.4 Agent 工作流编排稳定性比单次聪明更重要Agent 工作流编排那篇最开始我差点因为题目太“热”而被劝退因为最近讲 Agent 的文章实在太多了真正有干货的却没几篇。但这篇切入的角度很务实一个多步骤任务能否稳定完成关键不在于某个单次调用有多聪明而在于整个流程能不能被约束、被检查、被恢复。文章举了一个很常见的失败场景一个负责“查资料—写摘要—发通知”的 Agent第二步如果把摘要格式写错第三步就会失败如果中间还调用了外部工具工具返回字段稍有变化Agent 可能把多个结果记混。这类错误看起来是模型能力问题实际上是工作流缺乏结构。我整理出的实操建议每一步只给一个明确目标不要在一个 prompt 里塞多个意图中间结果使用结构化数据比如 JSON而不是一段自然语言文本为每一类失败定义 fallback重试、换工具、请求用户澄清、直接放弃四选一日志里记录每一步的耗时、token 消耗、重试次数出了问题能准确归因。这些原则本身不算新其实就是系统工程里“约定优于配置”的老话但放到 Agent 场景非常合适。如果你正在搭一个稍微复杂的 Agent不要指望“大模型自己会规划一切”至少要在关键节点加上规则校验或人工审批。流程越不可控越要在入口处限制它的自由程度。换句直白的话说Agent 的可控性不是靠模型变聪明实现的是靠流程设计把出错空间一点点堵死的。2.5 端侧模型部署内存、功耗、精度的平衡端侧部署那篇解决的是另一个极端问题模型不仅要跑得对还要跑得动。手机、平板、嵌入式设备没有数据中心那么充裕的显存和电源所以这篇的核心理念是“先让模型变小再谈用户体验”。这个优先级关系很重要很多团队先纠结精度把模型搞得很大结果装不上设备前面做的所有工作都白费。文章主要讨论了三条路权重量化、模型裁剪、知识蒸馏。量化是把 FP16 权重压成 INT8 甚至 INT4这也是最直接有效的方式。一个 70 亿参数的模型FP16 权重约 14GB压到 INT4 后大约 3.5GB这才能考虑放到移动设备上。但量化不是没有代价模型越小对量化越敏感所以必须用真实任务做回归测试不能只看跑通没跑通。我在翻译时特别建议读者对量化前后的模型各做一次相同测试把输出结果逐条对比比看任何指标都直观。内存视角也很重要。很多人只看权重体积忽略了运行时还有中间激活值、临时 buffer、多线程缓存实际峰值内存往往比模型体积高一截。更隐蔽的问题是长上下文连续对话时历史 token 会不断累积KV Cache 可能比模型权重还占内存。文章建议在模拟器或真机上测三个指标冷启动时间、峰值内存、长上下文下的连续对话表现。这三个数字直接决定用户能不能正常使用不是跑通一个 Demo 就算部署完成。端侧硬件的差异也很大。不同芯片对量化格式的支持不一样NPU、GPU、CPU 各自擅长的算子也不同。同一份量化模型在这台设备上跑得很好换一台设备可能掉一半速度。所以翻译这一篇时我加了一条注释端侧部署没有通用的最优配置只能在目标设备上反复试。这句话听起来不够“干货”但它恰恰是端侧项目最真实的经验。3. 翻译实操中的知识补全与校验方法3.1 术语对照表避免“一词多译”的混乱这个系列做到十几期之后我建立了一张术语对照表。原因很现实翻译不是一个人从头写到尾中间会有多个人参与每个人对同一个英文术语都有自己的译法如果不先约定发布出来的系列就会前后不一致读者看着也累。一期两期可能不明显几十期之后同一个概念出现三四种译法很影响系列的可信度。英文原文建议译法备注LLM (Large Language Model)大语言模型首次出现写全称加括号缩写RAG (Retrieval-Augmented Generation)检索增强生成首译注释之后可保留英文Agent智能体中文语境下保留英文首译加注Quantization量化与“量子化”严格区分Latency时延全系列统一不写“延迟”Throughput吞吐不要写成“吞吐量”时前后不统一Alignment对齐指模型与人类偏好的对齐术语表不是一次定死要定期 review。比如“Agent”这个词社区早期的译法是“代理”后来“智能体”逐渐成为主流术语表就跟着调整。每一次修订都记录日期和原因避免大家凭记忆做事。翻译 AI 内容的术语变化很快你不跟上社区习惯译文读起来就会有一种“过时感”这个感受很难描述但很真实。3.2 动手验证用最小实验“打假”原文结论我发现翻译技术文章最快的进步方式是顺手把原文里的实验步骤在本地跑一遍哪怕只是很小的规模。这个习惯帮我在这一期里抓出过不少问题。比如原文说某种采样参数组合可以让输出更稳定我拿一个本地可运行的小模型做了一次最小验证结果发现效果和原文描述不完全一致。文章里的结论往往默认了特定模型、特定数据集、特定提示词一旦其中一个变量变化结论就可能不成立。所以我不建议在译文里直接照抄“这样做效果更好”而是补一句“效果与模型和任务相关建议在自有数据上验证。”既保留原文信息又避免误导读者。如果知道作者用了什么模型、什么数据集最好也在译者注里写清楚让读者能判断这个结论能不能迁移到自己场景里。如果条件允许可以用脚本做简单的数据验证。下面是我在向量检索那篇里用的思路虽然很简陋但能快速区分索引参数差异# 用真实业务数据验证召回率 import numpy as np def recall_at_k(query_vec, doc_vecs, gold_ids, index_fnNone, k10): if index_fn is None: # 暴力检索作为理想上限 scores np.dot(doc_vecs, query_vec) pred_ids np.argsort(scores)[::-1][:k] else: pred_ids index_fn(query_vec, k) hits len(set(pred_ids) set(gold_ids)) return hits / len(gold_ids) # 修改 index_fn 可以对比不同索引参数 # gold_ids 来自人工标注或日志抽样这个脚本很小但每一次改索引参数后跑一遍你对“哪个参数有效”的判断就完全不一样了。翻译不是闭着眼睛写字而是把作者藏在文字背后的实验条件重新挖出来再转述给读者。能做到这一步译文已经不只是翻译而是一种带校验的深度阅读笔记。3.3 公式与实验数据的二次校对技术博客里公式不多但只要出现就必须认真校对。这一期多模态评估那篇就有一张表表里的百分比和正文描述对不上我起初以为是排版问题后来一算是作者改过实验数据但忘了改表格。类似的情况在技术博客里很常见因为作者往往先写正文后补表格中间容易漏改。这种事不怪原作者技术文章更新迭代本来就很频繁但译者不能跟着错下去。我的校对流程是先明确公式里每个符号的含义再写中文遇到比例数据先确认是绝对百分点还是相对变化。比如准确率从 50% 涨到 65%可以说提升了 15 个百分点也可以说约提升 30%但绝不能写成“提升 30 个百分点”。中英文里这种表达差异很微妙英文原文可能只说“increase by 30%”中文读者如果不注意就会被误导。翻这句时我会在译文里把基数和变化方式都写清楚不给读者留误会空间。另外像困惑度这类指标对数底数不同数值就会差不少。如果不确认原文用的是自然对数还是以 2 为底最好保留原公式并在注释里标注。这些细节看着琐碎但如果你是一个准备复现论文的读者公式差一个底数计算结果就对不上你会花非常多时间去排查到底哪里错了。译者把注释写清楚能帮读者省掉这一整段排查时间。4. 常见问题与避坑记录翻译技术博客踩过的坑4.1 断章取义最隐蔽的误译来源新手最容易犯的错误不是单词不认识而是没看懂指代词。英文里 it、this、that 满天飞一个 this 可能指上一段的三行内容也可能指整篇文章的方法。如果不回到原文语境确认翻译时很容易把“这种方法”这类模糊表达照搬下来中文读者根本不知道在说什么。我早期做翻译时也栽过这个跟头看过一句话就觉得懂了结果翻完往回读发现上下文根本接不上。我的处理方式是遇到指代词先往原文前文找最近的完整概念再决定中文里是重复一遍概念还是用“上述”带过。比如“this approach”如果指的是“对 KV Cache 分页管理的方法”我会译成“这种对 KV Cache 分页管理的方法”而不是省成“这种方法”。虽然多几个字但可读性明显提升。中文读者不需要像英文读者那样反查前文因为译者的工作之一就是把这种回指成本提前替你付掉。还有一种情况是上下文缺失。有些英文博客默认读者已经读过作者之前的文章直接引用前文的结论。翻译时如果不管中文读者就会觉得突然跳到一个没讲过的概念。我的办法是加一个简短的译者注说明这个结论源自哪篇前置文章或哪一步推导而不是硬着头皮直译。说白了译者其实是两边的翻译器一边翻译语言一边翻译作者没有明说的背景知识。4.2 版本过时别让译文成为“技术化石”技术博客的时效性问题在 AI 领域尤其突出。几个月前还很流行的 API现在可能已经改名甚至废弃文章里给出的安装命令在新版本上可能直接报错。翻译时间比原文发表时间晚了几个月就必须面对版本漂移。做这个系列越久我越清楚一个事实技术文章里的代码示例比文字内容过时得快得多因为框架接口每个月都可能变。我的经验是译文开头标注“原文发表时间”和“翻译时验证的版本”给读者一个判断依据。凡是原文提到版本号、函数名、命令行参数都要重点核实不能因为其他内容正确就默认这些也正确。如果实在无法验证就写“截至翻译时该接口仍为可用状态”这类限定语。这几个字的添加不费劲但对读者的帮助很大至少他们知道自己看到的信息有明确的时效边界。更重要的是选题端控制。热点的保质期通常只有几个月翻译组决定翻哪篇时先去查原文有没有大版本变动如果已经过时宁愿不选也不要把过时信息当作新内容推给读者。这一期选的多是原理类文章即使部分接口改了底层思路还能用这就是选题时优先考虑内容保鲜度的原因。一个长期翻译系列要想有价值选题门槛定得高一点没坏处。4.3 回译检测发现漏译和错译的笨办法我每期都会做一次回译检测方法很土从译文里挑几段再把中文翻译回英文然后和英文原文对照。这个流程不追求词语一致只追求逻辑一致。那些像翻译腔的段落、含有数字的句子、否定句和让步句是重点抽查对象。别小看这个“笨”办法它用来检查翻译腔特别有效因为当你把中文再翻回英文时一眼就能看出译文到底有没有把原文的逻辑传达到位。有一次我把原文“not all embeddings are created equal”直译成了“并非所有嵌入都是平等创建的”回译时发现这句话的英文还是原句说明中文没有传达出真正的意思。后来改成“不同 Embedding 模型的能力差异很大”虽然丢掉了原文的句式但意思到位了。回译的价值就在这儿它能帮我们发现自己被原文句式绑架了。英文里很多修辞性的表达直译成中文就变成了毫无信息量的废话。这个办法也能查漏译。中文里少了一个转折词“然而”整段论证方向可能就变了。抽检时如果发现中英文的逻辑连接词对不上宁可停下来重新读一遍全文也不要着急发稿。回译不是要走流程而是要真的把你对文章的理解从头验证一遍。我自己每期抽三到五段基本上能覆盖掉最容易出错的部分。4.4 轻量协作工作流四步法加上版本管理翻译这类系列内容我不太喜欢重流程但几个基础动作必须坚持。现在的流程基本是四步通读原文、粗译、校验、通读润色。时间比例大概是 15%、35%、35%、15%。通读原文是确定文章结构和核心论点粗译阶段先把长句拆开不追求完美校验阶段处理术语、公式、代码、链接最后通读润色把“英文感”从中文里彻底清掉。这四个阶段不能颠倒尤其是最后一步跳过了的话译文会残留大量英文语序。多人协同时我坚持每篇译文只有一个最终校验人避免两个人同时改出冲突。版本管理仓库记录每一次改动发布前对照目录检查有没有漏篇。术语表由固定的人维护其他人发现问题可以提但合并前必须有记录。整体来说这套流程不是对翻译的限制而是保证质量下限。大家都凭感觉翻最终成品就会像拼图一样对不齐。如果是一个人在家做类似的翻译也可以把流程简化成“先通读再逐段翻翻完做一次回译抽查”。最重要的是别把投稿当成终点发布前那道校验才是真正决定译文质量的关键。做这个系列越久我越觉得翻译 AI 技术博客的门槛根本不在英语而在能不能把作者没说出来的前提看透。到了第六十二期每一篇译文我都尽量当成一篇“带注释的工程笔记”来做。拿这一期来说读推理加速那篇时我自己先把时延预算算了一遍读评估那篇时把指标公式推导了一遍读向量检索那篇时干脆在自己的测试集上跑了一遍。这个习惯费时间但值得。如果看到这里的你也在做类似的翻译或技术整理我的建议很简单把“查证时间”排进计划哪怕一篇只多花两小时它给你省掉的误导时间会远远更多。