ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

端侧模型与Agent落地:从量化部署到设备即环境的工程实践

端侧模型与Agent落地:从量化部署到设备即环境的工程实践 1. 从设备即环境这个提法说起端侧模型到底在解决什么问题第一次看到设备即环境这个说法我愣了几秒。过去几年我们聊AI默认的语境都是云——模型跑在远端机房设备只是个显示器加键盘。但这个提法把逻辑反过来了设备本身就是模型运行的环境模型不是飘在云上的服务而是长在设备里的能力。这个转向背后有一个非常现实的痛点。你回想一下自己用AI产品的体验网络一断所有智能功能全部归零响应延迟取决于你家宽带和对方机房的排队情况你上传的每一张照片、每一段语音、每一份文档都要先离开你的设备去一个你完全看不见的地方转一圈再回来。对于消费级场景这可能只是体验不够好但对于工业、医疗、车载、办公这些场景这就是根本不能用。端侧模型On-Device Model要解决的就是这件事。它把推理能力直接部署在终端设备上——手机、PC、打印机、车机、工控盒子——让设备在不依赖网络的情况下独立完成感知、理解、决策和生成。关键词里出现的AgentTokenBoxer惠普这些词其实指向的是同一个方向让终端设备具备自主的智能体能力而不是做一个被动的请求转发器。我之所以对这个方向特别关注是因为过去两年我参与过几个把大模型往边缘设备上塞的项目踩过的坑足够写一本小册子。模型量化之后精度掉得厉害、内存峰值压不下去、推理框架和硬件指令集不匹配、功耗一上来设备直接降频……这些问题在云端根本不算问题到了端侧全是拦路虎。所以当我看到有团队明确提出端侧模型才是未来的时候我的第一反应不是又一个喊口号的而是想搞清楚他们到底怎么解决这些工程问题的。这篇内容适合几类人看正在做端侧AI产品定义的产品经理、需要把模型部署到资源受限设备上的算法工程师、关注AI Agent落地形态的技术决策者以及单纯想搞明白端侧模型和云端模型到底差在哪的技术爱好者。我会尽量把原理讲透把工程细节摊开把踩过的坑标出来。2. 端侧模型和云端模型的分水岭不是大小而是约束条件2.1 算力、内存、功耗这三座山决定了端侧模型的设计逻辑很多人以为端侧模型就是把云端模型缩小一点这个理解偏差很大。云端模型的设计目标是在给定算力预算下追求最高精度端侧模型的设计目标是在硬约束下找到精度和可用性的平衡点。这两个目标的数学形式完全不同。端侧的核心约束有三个算力约束一台普通笔记本的NPU算力大概在10-40 TOPS之间手机端NPU在5-30 TOPS而一张数据中心推理卡动辄几百TOPS。这意味着端侧能承受的模型参数量和计算图复杂度有硬上限。内存约束这是最容易被低估的。一个7B参数的模型FP16精度下光权重就要占14GB内存加上KV Cache和中间激活值峰值轻松突破20GB。而很多端侧设备的总内存才8GB或16GB还要分给操作系统和其他应用。功耗约束云端有持续供电和工业级散热端侧设备靠电池或者小功率适配器。推理功耗一高设备要么降频要么发烫用户体验直接崩掉。我做过一个实测同一个1.5B参数的模型在FP16精度下跑在某个边缘盒子上单次推理延迟约800ms功耗峰值12W量化到INT8之后延迟降到320ms功耗峰值降到5.8W但在一段专业术语密集的文本摘要任务上ROUGE分数掉了约4个百分点。这个trade-off就是端侧模型设计的日常——你永远在精度、速度、功耗之间做三角权衡。2.2 为什么端侧不等于小模型架构选择比参数量更关键一个常见的误解是端侧模型就是小模型。参数量小确实是端侧的一个特征但真正决定端侧模型能不能用的是架构层面的设计选择。我梳理了几个在端侧场景下特别关键的架构决策设计维度云端常见做法端侧推荐做法原因注意力机制标准多头注意力分组查询注意力GQA或滑动窗口注意力减少KV Cache内存占用激活函数GELU/SiLUReLU或近似ReLU降低计算复杂度利于硬件加速归一化LayerNormRMSNorm减少计算量数值更稳定位置编码绝对位置编码旋转位置编码RoPE更好的长度外推能力量化策略FP16/BF16INT8/INT4混合量化内存和带宽双重压缩这些选择不是拍脑袋定的。以GQA为例标准多头注意力在推理时每个token都要缓存所有注意力头的Key和Value内存占用随头数线性增长。GQA把多个Query头共享一组Key/Value头KV Cache直接压缩到原来的几分之一。在端侧内存紧张的情况下这个优化往往决定了模型能不能跑起来。2.3 端侧推理框架的选型不是哪个流行用哪个端侧推理框架的选择比云端复杂得多因为你要考虑硬件指令集、操作系统、驱动版本、内存分配策略等一系列底层因素。我整理了一个选型对照表基于我在实际项目中的使用体验框架适用硬件优势坑点llama.cppCPU为主支持部分GPU部署简单量化方案成熟GPU加速有限大模型加载慢MNN移动端CPU/GPU/NPU阿里系中文生态好文档偏少算子覆盖不全NCNN移动端CPU/GPU腾讯系轻量对大模型支持较新ONNX Runtime跨平台生态最广算子最全端侧优化依赖EP质量TensorRTNVIDIA GPU性能极致绑定NVIDIA硬件编译复杂TFLiteAndroid/iOS谷歌生态工具链完整自定义算子麻烦我的经验是如果你做的是Android/iOS应用优先考虑MNN或TFLite如果是PC端Windows应用ONNX Runtime加DirectML是比较稳的组合如果是嵌入式Linux设备llama.cpp的CPU推理路径最省心。但不管选哪个一定要在目标设备上做端到端实测不要只看benchmark数字。3. Agent在端侧跑起来和云端Agent有什么本质区别3.1 云端Agent是调度器端侧Agent是执行者关键词里Agent出现了很多次这确实是端侧模型最核心的应用形态。但端侧Agent和云端Agent的设计哲学完全不同。云端Agent的典型架构是用户请求进来Agent做任务分解然后调用各种API和工具最后汇总结果返回。它的核心能力是调度——知道什么时候该调什么工具怎么把多个工具的输出串起来。因为云端有充足的算力和网络Agent可以频繁地和远端服务交互。端侧Agent的核心能力是执行——它必须在本地完成感知、推理和动作生成不能依赖远端调用。这意味着端侧Agent需要把更多的能力内化到模型本身而不是依赖外部工具。我举个具体例子。一个云端Agent处理帮我把这份合同里的关键条款提取出来这个任务流程可能是调用OCR服务识别文字→调用NLP服务做条款分类→调用摘要服务生成结果→返回。每一步都是网络请求。端侧Agent处理同样的任务流程是本地OCR模型识别文字→本地语言模型做条款分类和摘要→直接输出。全程不联网。这对模型的综合能力要求更高但对延迟、隐私、可靠性的改善是数量级的。3.2 端侧Agent的记忆问题上下文窗口是稀缺资源端侧Agent有一个特别棘手的问题记忆管理。云端Agent可以维护一个很大的上下文窗口甚至把历史对话存到数据库里随时检索。端侧Agent的上下文窗口通常只有2K到8K token而且KV Cache占用的内存直接和上下文长度成正比。我试过在一个4K上下文窗口的端侧模型上做多轮对话Agent发现几个问题对话超过5轮之后早期信息开始被挤出窗口Agent忘记了用户之前说过的偏好。如果强行保留长上下文KV Cache内存占用飙升推理速度明显下降。端侧设备通常没有独立的显存KV Cache和模型权重抢同一块内存容易触发OOM。解决方案通常有三条路一是做上下文压缩把历史对话摘要成更短的表示二是做外部记忆把关键信息存到本地轻量数据库需要时检索回来三是做分层记忆近期对话保留原文远期对话只保留摘要。这三条路我都试过效果最好的是摘要检索的混合方案但实现复杂度也最高。3.3 端侧Agent的安全边界本地执行带来的新挑战端侧Agent在本地执行动作这带来了云端Agent没有的安全问题。云端Agent调用API时API本身有权限控制端侧Agent直接操作设备上的文件和硬件一旦模型输出错误指令后果可能很严重。我见过一个案例一个端侧Agent被要求整理下载文件夹结果模型把整理理解成了删除重复文件然后误删了用户的重要文档。这个问题的根源不是模型能力不够而是端侧Agent缺少动作确认机制。我的做法是在端侧Agent的动作执行层加一道沙箱所有涉及文件删除、系统设置修改、硬件控制的操作都必须经过一个规则引擎的二次确认。规则引擎不依赖模型而是用硬编码的规则判断动作是否安全。这样即使模型输出异常也不会造成不可逆的后果。4. 把模型塞进设备的工程实操量化、编译、内存管理4.1 量化不是选个精度就完事分层量化策略详解量化是端侧模型部署的第一道关卡。很多人以为量化就是把FP16转成INT8实际上量化策略的选择直接影响模型能不能用。我目前用的比较多的是分层量化策略Embedding层和输出层保持FP16或INT8。这两层对精度敏感量化太狠会导致输出质量明显下降。注意力层的QKV投影INT8。这部分计算量大但对精度相对不敏感。FFN层INT4或INT8。FFN层参数量占比最大量化收益最高。LayerNorm和残差连接保持FP16。这些层计算量小量化收益低但精度影响大。具体操作上我用GPTQ或AWQ做权重量化用SmoothQuant做激活值量化。这里有一个容易踩的坑校准数据集的分布必须和实际使用场景匹配。我有一次用通用语料做校准结果模型在专业领域的输出质量掉得很厉害后来换成领域内数据校准精度恢复了大部分。注意量化后的模型一定要做端到端评测不能只看困惑度Perplexity。困惑度下降不多不代表下游任务表现没问题特别是分类、抽取这类对数值精度敏感的任务。4.2 推理引擎的图优化算子融合与内存复用模型量化完之后下一步是推理引擎的图优化。这一步的收益经常被低估但实际效果可能比量化还明显。核心优化手段有三个算子融合把多个连续的小算子合并成一个大的算子减少kernel launch开销和中间张量的内存分配。比如把LayerNorm拆解出来的多个操作融合成一个fused LayerNorm在端侧能减少30%以上的推理时间。内存复用端侧内存有限必须让不同的中间张量共享同一块内存。推理引擎会分析计算图的生命周期把不再需要的张量内存回收给后续张量使用。这个优化做得好不好直接决定了模型能不能在低内存设备上跑起来。计算图剪枝去掉推理时不需要的节点比如训练专用的dropout、反向传播相关的节点。这个比较简单但有些框架默认不会做需要手动配置。我在一个边缘设备上做过对比同一个模型未优化版本推理延迟1.2秒峰值内存3.8GB做完算子融合和内存复用之后延迟降到480ms峰值内存降到1.6GB。这个提升幅度在端侧场景下是决定性的。4.3 内存峰值控制KV Cache的动态管理KV Cache是端侧推理内存占用的主要来源之一。对于一个7B模型、4K上下文、32层、32个注意力头的配置KV Cache的FP16占用大约是2 (KeyValue) × 32 (层) × 32 (头) × 128 (头维度) × 4096 (序列长度) × 2 (字节) ≈ 2GB这2GB是纯KV Cache还不算模型权重和中间激活值。如果设备总内存只有8GB压力非常大。我的做法是动态管理KV Cache滑动窗口只保留最近N个token的KV Cache更早的丢弃。适合对话场景但会丢失长距离依赖。分页管理把KV Cache分成固定大小的页按需分配和回收。类似操作系统的虚拟内存管理。量化KV Cache把KV Cache也量化到INT8内存直接减半。精度损失通常在可接受范围内。这三种方法可以组合使用。我在一个实际项目里用的是滑动窗口INT8量化KV Cache在4K上下文下KV Cache占用从2GB降到了约500MB推理质量在对话任务上几乎无感知下降。5. 端侧模型的真实落地场景从打印机到工业设备5.1 办公设备为什么需要端侧模型一个被低估的场景关键词里出现了惠普和Boxer这让我想到办公设备这个场景。打印机、扫描仪、一体机这些设备过去几十年都是哑设备——它们执行固定指令没有任何智能能力。但办公场景其实有大量适合端侧模型的任务文档分类、表格识别、合同条款提取、发票信息抽取、手写体识别。这些任务的特点是数据敏感涉及商业信息、延迟敏感用户不想等、网络不可靠企业内网环境复杂。把端侧模型部署到办公设备上可以做到扫描文档后本地完成OCR和信息抽取直接输出结构化结果全程不联网。这对企业用户的价值非常大——既解决了数据安全问题又提升了处理效率。我了解到有些团队在做设备即环境的办公方案思路是把轻量级模型直接跑在设备的SoC上通过Agent框架让设备具备多步骤任务处理能力。比如用户说把这份合同的关键日期和金额提取出来设备本地完成扫描、识别、抽取、格式化输出全流程。5.2 工业场景的端侧模型可靠性和实时性是刚需工业场景对端侧模型的需求比办公场景更刚性。工厂里的设备通常运行在隔离网络或完全没有网络的环境中但同时又需要智能化的质检、预测性维护、异常检测能力。我参与过一个工业质检项目需求是在产线设备上实时检测产品缺陷。云端方案的问题是网络延迟不可控而且工厂不允许把产线画面上传到外部。最终方案是在设备端部署一个轻量级视觉模型配合端侧Agent做多帧确认和结果汇总。这个项目的关键经验是工业场景的端侧模型必须做降级设计。当模型置信度低于阈值时自动切换到规则引擎做兜底判断而不是强行输出一个可能错误的结果。这个降级机制在工业场景里比模型精度本身还重要。5.3 车载和移动场景功耗和热管理是隐形杀手车载和移动场景对端侧模型的约束最苛刻。设备靠电池供电散热空间有限用户对延迟极其敏感。我在一个车载语音助手项目里踩过的坑模型在实验室环境跑得好好的装到车上之后夏天车内温度40度以上设备触发温控降频推理延迟从300ms飙升到2秒以上用户体验直接崩掉。后来我们的解决方案是做动态推理策略。设备温度正常时用完整模型温度升高时自动切换到更小的蒸馏模型同时降低推理频率。这个策略让设备在高温环境下仍能保持可用的响应速度虽然精度有所下降但至少不会卡死。这个经验让我意识到端侧模型部署不是把模型跑起来就完了而是要针对设备的物理特性做全场景适配。温度、电量、内存压力、后台负载这些因素都会影响推理表现必须在设计阶段就考虑进去。6. 端侧模型落地的几个反直觉经验6.1 模型不是越小越好找到最小可用规模刚开始做端侧模型的时候我总想把模型压到最小。后来发现模型太小反而会导致整体成本上升。原因在于模型太小输出质量不够用户需要反复重试或者人工修正实际完成一个任务的总时间反而更长。而且小模型往往需要更多的后处理规则来弥补精度不足工程复杂度不降反升。我的经验是找到最小可用规模——在这个规模下模型在目标任务上的准确率达到可接受水平同时推理延迟和内存占用满足设备约束。这个规模通常比能跑起来的最小模型大一些但比云端模型直接缩小小很多。具体怎么找我的方法是做精度-延迟曲线从大模型开始逐步量化、剪枝、蒸馏每做一步就测一次目标任务的准确率和推理延迟找到准确率开始明显下降的拐点然后回退一步。6.2 端侧Agent的工具调用要重新设计云端Agent的工具调用通常是模型输出JSON框架解析后调用API。这个模式在端侧有几个问题JSON解析本身有开销、API调用可能涉及网络、错误处理复杂。端侧Agent的工具调用我倾向于用更轻量的方式模型直接输出结构化的指令序列由一个轻量级解释器执行。指令格式尽量简单比如用固定分隔符而不是JSON减少解析开销。工具本身也尽量本地化避免网络依赖。另外端侧Agent的工具数量要严格控制。云端Agent可以挂几十个工具端侧Agent挂太多工具会导致模型选择困难而且每个工具的描述都会占用上下文窗口。我的经验是端侧Agent的工具数量控制在5-8个以内每个工具的功能尽量原子化。6.3 评测端侧模型不能用云端那套指标云端模型的评测通常看困惑度、BLEU、ROUGE这些指标。端侧模型的评测必须加上设备相关的维度评测维度云端关注端侧必须关注精度困惑度、任务准确率同左但需在量化后重新评测延迟平均响应时间P99延迟、首token延迟内存峰值显存峰值内存、KV Cache占用功耗通常不关注平均功耗、峰值功耗、温升稳定性服务可用性长时间运行内存泄漏、热降频我特别想强调P99延迟和长时间运行稳定性。端侧设备资源紧张平均延迟好看不代表没有长尾问题。我有一次遇到模型运行2小时后延迟突然翻倍排查发现是内存碎片化导致KV Cache分配失败触发了频繁的GC。这种问题在短时间测试中根本发现不了。7. 我对端侧模型未来的一些个人判断端侧模型这个方向我的判断是它不会取代云端模型而是会和云端形成明确的分工。云端负责训练、复杂推理、大规模知识检索端侧负责实时响应、隐私敏感任务、离线场景。两者之间的边界会随着硬件进步和模型压缩技术发展不断移动。从工程角度看端侧模型目前最大的瓶颈不是模型本身而是工具链和生态。量化工具、推理框架、调试工具、评测基准这些基础设施还不够成熟。我经常遇到的情况是同一个模型在不同框架上表现差异很大量化后的精度损失难以预测调试端侧推理问题缺少有效的工具。但方向是明确的。当设备本身具备智能能力很多产品形态会被重新定义。打印机不再只是打印而是能理解文档内容的办公助手车机不再只是播放音乐而是能感知驾驶状态的智能副驾工业设备不再只是执行固定程序而是能自主判断和决策的生产节点。设备即环境这个提法本质上是在说智能不应该是一个需要联网才能获得的服务而应该是设备本身固有的一部分。这个理念能不能落地取决于我们能不能把模型做得足够小、足够快、足够可靠。从目前的技术进展来看这条路是走得通的只是还需要更多的工程积累和场景验证。我在实际项目中的体会是端侧模型落地最难的不是技术本身而是找到真正适合端侧的场景。很多需求看起来适合端侧但仔细分析后发现云端方案更经济。反过来有些场景看起来不需要端侧但深入理解业务后会发现端侧是唯一可行的方案。这个判断能力比会用量化工具重要得多。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进