ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

从哑终端到端侧推理:算力、软件与端云分工的三螺旋演进

从哑终端到端侧推理:算力、软件与端云分工的三螺旋演进 最近在陪团队做一套工业相机的端侧瑕疵检测一块功耗只有几瓦的板卡要跑 YOLO 系列的检测模型。调试到深夜的时候同事半开玩笑地说这不就是二十年前机房里那套 X 终端的翻版吗只不过当年的算力全都收在服务器里现在又拼命把推理塞回设备端。这句话一下子点醒了我。从哑终端到端侧推理表面上看起来是一次技术复古但拆开看会发现真正在推动演进的是算力、软件、端云分工三者之间的相互咬合。算力下放到哪一层决定了软件以什么形态存在而软件框架和模型结构的调整又反过来重新定义端和云各自该承担多少计算。这三条线不是先后发生也不是互相替代而是像三股线拧成一根绳子一样每一步都牵动另外两根。这篇文章不打算复述完整的技术史我想结合自己在云端部署接口、也在端侧部署模型过程中踩过的坑把这三股线拆开聊一聊。1. 三螺旋的真实含义算力、软件与端云分工谁先推动谁1.1 为什么“算力决定软件形态”只说对了一半大多数技术文章讲到终端演进时会先画一条算力曲线早期算力昂贵所以集中在主机房后来芯片便宜了算力下沉到个人电脑再后来移动互联网时代算力又被收进云数据中心。这个叙事非常顺滑但它解释不了一个关键问题为什么在千兆网和 5G 都已经普及的今天我们还要费劲把模型塞进手机和边缘盒子如果算力集中更高效直接让终端调用云端接口不就行了答案在于算力并不直接决定软件形态中间还隔着一层“软件能否高效利用这份算力”的约束。云端 GPU 再强一次推理请求走过去也要经过网络、网关、鉴权、负载均衡这些环节消耗的时间和能量对端侧很多实时场景来说是不可接受的。反过来端侧芯片即使有了 NPU如果推理框架不支持对应的算子或者模型量化后精度崩了这份算力同样用不起来。所以更准确的说法是算力分布划定了物理边界但软件决定了算力能不能被真正兑现。当一个场景需要毫秒级响应时软件就会被压着往端侧适配当一个模型大到端侧装不下时软件又会退回去做网络裁剪和服务化封装。算力和软件互相设置约束这才是螺旋的第一层含义。1.2 端云分工实际上是软件架构选择的结果很多人把端云分工理解为纯粹的部署问题觉得无非是“模型放云端还是放本地”。但我在实际项目里体会更深的是端云分工是被软件架构一点点逼出来的。以一个典型的内容审核接口为例。假设你训练了一个违规图片分类模型云端部署时用的是大模型高精度版本每张图推理耗时 80ms。移动端接入后团队发现用户上传图片后等待时间过长于是把模型切成两个阶段端上先用一个 5MB 的小模型做快速预筛能确定的直接返回不能确定的再传云端做大模型兜底。这个改动表面上是“分工变了”但根子里的推动力是软件结构的拆分——模型蒸馏出一个轻量版本、接口设计支持预筛逻辑、端到端协议约定置信度阈值。这就是第二层螺旋分工不是静态的拓扑图而是软件架构不断演化的结果。每当你觉得延迟高了、带宽贵了、隐私紧了都会重新划分端和云的职责而这个划分又反过来要求算力在两边重新分布。端侧推理之所以在近五年爆发不只是芯片工艺的功劳更是软件栈——从 PyTorch 到 TFLite、ONNX Runtime、MNN、NCNN 这一整套工具链——把“把模型搬到端上”这件事的成本大幅压低了。1.3 用“三螺旋”视角看问题的价值是什么为什么要用一个这么拗口的概念因为单看任何一条线都会给出误导性的答案。只看算力你会觉得端侧 NPU 的 TOPS 指标越高越好但实际部署时发现模型根本跑不满只看软件你会陷入框架选型和算子适配的细节里忘了这些工作其实是为了重塑端云分工只看分工你又会忽略算力边界和软件约束设计出一个看起来很美但没法落地的架构。把三条线捆在一起看才能真正回答一个项目里最核心的三个问题这一层算力该放在哪里这一份软件该怎么裁剪端和云各自负责什么才最省成本后面的章节我会沿着这条线索从哑终端时代一路拆到当前主流的端云协同范式。2. 哑终端时代算力与软件的强制隔离以及它留下的技术债2.1 X 终端、瘦客户机与集中式计算的真实逻辑“哑终端”这个词现在不少年轻工程师可能只在教科书里见过。它本质上是把算力、软件、数据全部集中在主机或服务器上终端只负责键盘输入和显示器输出。早期 UNIX 系统里常见的一串串字符终端后来图形界面时代的 X Terminal再到银行、医院里最常见的瘦客户机都是同一个逻辑管理成本最低、数据最安全、软件升级最方便。这个逻辑在当时是完全成立的。一台服务器的算力可以服务几十个终端软件只需要在服务器上维护一份用户不接触磁盘、不安装程序、不产生本地数据。IT 部门最头疼的“谁又在终端上乱装软件”这个问题在哑终端体系下根本不存在。2000 年代初期很多机构的桌面虚拟化方案本质上就是哑终端思想在互联网时代的复活。但哑终端也有一个致命代价就是一切操作都有网络往返。你在终端上敲一个字符可能要经过串口或网络传到主机主机回显之后这个字符才出现在屏幕上。感觉不到的延迟只存在于局域网内一旦跨机房、跨城市整个体验就会变得完全不可用。这也是为什么哑终端从来只在可控网络环境内流行从来没有成为通用计算的主流形态。2.2 哑终端在安全和运维上的红利至今仍是端云架构的标杆哑终端时代留下的一套管理思路到现在依然深刻影响着端云分工的设计思路。比如“端上不留数据失效就换设备”这种理念和现在云手机、云桌面的产品逻辑几乎一模一样。运维只需要关心服务器这一侧的容量和健康度终端设备可以被视为完全可抛弃的消耗品。银行柜台的终端坏了换一台新的接上网线所有业务环境自动恢复因为业务根本不在终端上。这个红利在云原生时代被继承成了“无状态服务”的设计原则。云端 API 服务要求不保存客户端上下文任何一台机器都能处理任意请求本质上是把“终端无状态”的思想复制到了服务端内部。反倒是客户端这边现在的 App 反而越来越“重”大量本地缓存和本地模型让设备不再是哑终端。这说明演进不是单向的端和云的“哑”与“智”在不同的历史阶段有不同的最优解。2.3 哑终端的问题交互延迟、离网失效、带宽账单理解了哑终端的红利也要看清它的三个结构性问题因为这三条恰恰是端侧推理要解决的核心痛点。第一是交互延迟。人机交互的反馈闭环如果超过 100ms用户就会明显感觉到卡顿。哑终端时代这个指标在局域网内勉强及格但到了移动网络环境下就完全失控。我做过一次简单的经验测量4G 网络下手机到云端数据中心的往返延迟一般在 30ms 到 80ms看起来不高但一次语音识别如果要求端到端返回结果中间要经历录音上传、云端处理、结果下发再加上服务端排队和编解码整体延迟轻松超过 300ms。这种体验放到语音唤醒、实时翻译场景里是没法用的。第二是离网失效。哑终端一旦断了网络就是一块废砖。这在办公室网络环境下问题不大但放到工厂车间、野外作业、地下车库这类场景业务连续性就无法保证。很多工业现场的设备联网率并不高或者说网络非常不稳定如果每个检测动作都要依赖云端产线就没法正常运转。第三是带宽账单。工业相机一秒钟产生几十帧画面每帧画面传输到云端做检测一天下来产生的流量费用非常可观。而且大部分帧里根本没有瑕疵把大量正常样本传到云端就是纯粹的成本浪费。这个我在本地项目中算过一笔账一个 500 万像素的相机帧率 30fps压缩后每帧约 300KB连续运行 8 小时单台设备一天的数据量约 248GB。即便只在触发时传输带宽和存储成本也足够让老板皱眉。3. 云化和移动互联网算力上收之后软件服务化的双刃剑3.1 SaaS、BaaS 与“薄客户端重服务端”的全面胜利哑终端落幕之后PC 和智能手机迎来了本地算力的爆发。但有意思的是移动互联网的架构主旋律并不是“本地优先”而是“账号同步、服务在云”。大量 App 本质上是一个“薄客户端重服务端”的组合业务逻辑在云端本地只是一层 UI 壳。SaaS 软件把 CRM、文档、设计工具全部搬上浏览器BaaS 平台把用户认证、数据库、对象存储都封装成 API开发者只需要调用接口不必再关心服务器怎么搭。这套范式之所以能赢核心原因是软件迭代效率的飞跃。代码改在服务端用户打开网页就是最新版不存在分发和安装的障碍。数据汇总在云端可以做跨用户的分析和推荐。团队协作也天然支持多人实时共享这些都是纯本地软件很难做到的。在这个阶段API 成了软件的“物理形态”。我接触到很多创业团队产品第一版就是一张 API 列表语音转写调用 A 厂商图像识别调用 B 厂商用户画像调用 C 厂商。接口调用比自研模型快得多成本也更低。这种模式本身没有错但很多团队在架构设计时没有意识到API 的每一次调用都隐含着一次算力的远程搬运而搬运是有代价的。3.2 API 密钥与鉴权体系的技术债远比想象中复杂既然说到 API 调用就得提一个最容易被忽视的坑密钥和权限体系。很多人刚开始接触云端推理 API 时以为拿到一个 token 就能一路畅通。实际做了一个月就会发现密钥轮换、权限最小化、配额管理、审计日志每一项都很头疼。我在一个项目里接手过一整套已上线的内容审核 API最初的实现里前端直接写死了服务端的 API Key。这个 Key 的权限范围覆盖了全部模型接口而且没有设置调用配额。结果是某天一个外部爬虫拿到这个 Key 后一夜之间跑了十几万次调用账单直接爆表。后来我们被迫重构了鉴权体系客户端先用短期 token 换取用户维度的权限再由后端网关统一持有模型厂商的 API Key同时给每个业务方配置独立的配额和告警。这个踩坑经历让我对软件的“分布式权限”有了更清晰的认识。当算力被封装成 API 之后软件的边界就从代码扩展到了权限策略。谁有权限调用哪一层模型、每天限额多少、费用算在哪个成本中心这些都必须纳入系统设计。很多人觉得这是运维该管的事但在端云协同架构里权限设计直接影响请求链路端上直接调用云模型还是经过自建网关决定了你能否做计费、审计和灰度。3.3 隐私与合规让“一切都上云”这条路不再普遍适用算力上收的另一个隐患是隐私和数据合规。人脸、语音、医疗影像、工业图纸这些数据一旦上传云端就面临泄露风险和法律合规问题。尤其在数据出境、个人信息保护这些要求越来越严格的背景下把数据传到云端再推理不再只是技术选择而是合规风险。我在做工业视觉项目时遇到过最直接的限制客户明确要求产品缺陷图片不能离开工厂园区。这个要求一下来原先设计的“终端采集云端推理”方案直接作废所有检测逻辑必须下沉到产线边缘设备。一开始我们觉得这是给自己找麻烦但实际做完端侧部署之后发现不仅响应延迟从 200ms 降到了 30ms连产线断网时的可用性问题也一并解决了。隐私约束反而成为端侧推理的一大推手。类似的情况还有手机输入法的本地化词库、智能音箱的本地唤醒、健康手表的本地心率分析都是在“数据不出设备”的约束下催生出的端侧智能。4. 端侧推理重新分发算力芯片、框架与模型压缩的联动4.1 从 CPU 到 NPU端侧算力不再是“玩具”我最早接触端侧推理时用的还是手机上 CPU 硬跑一个几百万参数的小模型速度勉强能用但手机发烫明显。为什么现在端侧推理可以大规模落地关键在于专用 AI 芯片的出现。如今的手机 SoC 几乎都集成了独立的 NPU苹果的 Neural Engine、高通的 Hexagon、华为的达芬奇架构入门级开发板的算力也能达到几 TOPS。这个量级意味着什么一个 YOLOv5s 模型在 NPU 上跑一次推理耗时可以压到 50ms 以内而同样在 CPU 上可能需要 300ms 以上。端侧终于有了一块能做实时推理的“算力飞地”。但要真正用好这份算力不能只看芯片纸面参数。NPU 和 GPU 的架构完全不同对算子的支持各有差异同样的 PyTorch 模型导出来可能在这个芯片上跑得飞快在另一个芯片上有几个算子根本不被支持只能回退到 CPU速度立刻打回原形。我做跨平台部署时最深的体会是选框架之前先看目标芯片的算子支持列表再看模型里用到了哪些算子这比纠结框架 API 本身重要得多。4.2 量化、剪枝、蒸馏让模型装得下、跑得快、不发热端侧算力有边界但更大的约束是内存和功耗。我说一个容易误判的点模型能不能部署到端侧首要瓶颈往往不是算力而是内存带宽。模型在推理时需要把权重和中间特征加载到内存里内存带宽不够芯片再强也发挥不出来。这也是为什么端侧模型必须做压缩。压缩的三板斧是量化、剪枝和蒸馏。量化是把模型权重从 FP32 降到 INT8体积直接缩为四分之一推理速度常有数倍提升。但量化会带来精度损失尤其在检测任务里小目标的召回率往往先崩。剪枝是去掉不重要的通道和连接可以显著压缩体积但需要微调恢复精度。蒸馏是训练一个大的 teacher 模型指导一个小 student 模型学习让小型模型逼近大模型的表达能力。我在部署一个缺陷检测模型时三件套组合使用后模型从 120MB 压到 16MB准确率只掉了约 1.5%而单帧推理时间从 180ms 降到 35ms。这个结果在实验室里看起来很好但上线后我们发现一个隐藏问题INT8 量化在光线变化的产线上鲁棒性变差个别光线条件下会出现毫无征兆的漏检。后来通过收集更多光照样本重新校准量化参数才解决。量化参数不是随便设的必须结合真实场景数据做校准否则就是埋雷。4.3 推理框架适配的坑算子支持、内存规划、驱动差异选端侧推理框架也是个常年让人头疼的环节。ONNX Runtime 通用性强TFLite 背靠安卓生态NCNN 和 MNN 在移动端优化做得深Core ML 只服务苹果生态。每个框架都声称支持主流模型实际上都要面对算子兼容的“最后一公里”。我踩过最大的坑是在一个 ARM 平台上用 NCNN 部署语义分割模型模型导出时没有任何告警但跑到一半程序崩溃。查了很久才发现是某个上采样算子没有被 NCNN 原生支持走了动态图回退路径内存规划出现异常。换成 ONNX Runtime 后问题消失但推理速度又不如 NCNN 快。最终解决方案是修改模型结构用卷积组合替代那个不友好的算子才算两边都满意。内存规划是另一个容易被忽略的坑。端侧设备内存小模型加载、前处理、推理、后处理都在抢内存。如果推理库没有做好内存池复用频繁分配释放会导致明显延迟抖动。在嵌入式 Linux 上还经常遇到驱动库版本和推理库不匹配的问题NPU 调用失败时有些框架会静默回退到 CPU表现就是速度骤降但没有任何报错。所以发布前一定要做“拔掉 NPU 驱动”的对照测试确认框架不会在不该回退的时候回退。5. 端云分工的几种实战范式分片、本地优先与联邦聚合5.1 分片推理与本地优先把“实时”留给端把“复杂”交给云模型压缩和框架适配只能让端侧承担一部分推理任务真正复杂的场景仍然需要云端兜底。于是端云分工出现了一套非常实用的范式端上做轻量级实时处理云端做重型分析和长周期学习。最典型的是语音助手。设备端一直有个微型唤醒词模型在监听这个模型非常小但功耗极低能 7x24 小时运行。唤醒词一触发设备才会录音并把语音传到云端做完整的语义理解。这个设计把“永远在线”的功耗成本压在端侧把“语义理解”的算力成本放在云端分工效率非常高。我参与过一个拍照翻译项目也是同样的思路。端上先跑一个文本检测模型判断画面里有没有文字。如果检测到密集文字区域就把那一小块图片裁剪出来发送到云端做高精度 OCR 和翻译。相比把整张图片上传这个方案把 90% 的无文字图片拦截在了端上既省流量又保护了用户相册里的无关隐私内容同时翻译准确率保持云端大模型的水准。5.2 联邦学习与模型 OTA数据不出端也能迭代端云分工不只是在推理阶段也体现在训练阶段。端侧模型部署之后再好也会因为场景分布变化而逐渐失效。传统做法是收集端上的数据回传云端重新训练后再发布新模型。但这个链路存在两个问题一是数据传输的隐私成本二是数据标注和清洗的延迟。联邦学习提供了一条不同的路径模型在云端初始化下发给端侧设备设备用本地数据做小规模微调只把模型的梯度或参数增量加密回传云端云端聚合后更新全局模型。这样训练素材永远不出设备从机制上规避了大量隐私风险。我必须诚实地说联邦学习在生产环境中的工程复杂度比论文里描述的要高得多。设备算力参差不齐、网络弱网环境多、数据分布不均都会导致聚合效果不如预期。我见过不少团队把联邦学习当成“必选项”结果折腾半年还是回到云端集中训练。以我目前的经验比较可落地的做法是对端侧模型做轻量的场景自适应微调可以安全回退的哨兵策略云端定期做全量重训。这也是“模型 OTA”最常见的落地形态像 App 升级一样给终端设备推送新模型而不是执着于训练环节的联邦化。5.3 一个完整案例端侧质检模型与云端增量训练的分工设计把前面所有思路串起来我用一个自己经历过的工业质检项目做例子。场景是电子产品外观缺陷检测产线上有若干台工业相机每台相机每秒钟会产生大量画面而网络环境并不稳定客户要求检测结果不能延迟超过 80ms缺陷图片不能直接上传公网。第一版方案是“云端检测”很快就被否掉了因为延迟和隐私都过不了关。第二版方案是“端侧全量检测”我们在边缘盒子上部署了压缩后的 YOLO 模型检测速度达标但客户反馈某些新出现的缺陷类型识别不出来可能是误检也可能是漏检。最终确定的分工是三层端侧跑实时检测模型输出缺陷框和置信度。只把置信度处于中间模糊区间的图片比如 0.4 到 0.7 之间的样本还有被判定为缺陷的图片按时段抽样上传到内网文件服务器不经过公网。云端负责对这些模糊样本做二次精细分类并定期用这些新样本微调模型产生新版本后通过内网渠道分发给端侧设备形成闭环。这套架构跑下来端侧负责“快”云侧负责“稳”样本回流和模型迭代也形成了正向循环。目前稳定运行的重点是避免模糊样本数量过少导致模型偏移。我们专门设计了一个采样保留策略确保每种缺陷类型都能维持最低数量的训练样本。这个案例想说明的是端云分工没有放之四海而皆准的模板每一层都要结合具体场景里的延迟、隐私、带宽、成本约束去权衡。6. 真实项目里怎么选算力、端云分工与软件架构的决策清单与成本账6.1 五类问题判断该端算还是云算很多团队在立项时都会问我一个问题这个功能到底该放端上还是放云端我的回答是不要拍脑袋逐项对照以下几个维度的标准答案基本会自动浮现。响应时限互动操作要在 100ms 内有结果只能端算。网络环境设备经常离线或网络很卡只能端算。数据合规图片、语音、病历明文不能出设备只能端算。模型体量模型超过几百 MB 且无法压缩必须云算。样本回流需要持续收集真实数据迭代模型必须云算或端云结合。把这五条逐个过一遍大多数场景的结论基本清晰。举例说明智能门锁的人脸解锁必须端算因为离线可用和对隐私的要求都很刚性而物流单据的复杂版面识别更适合云算因为模型很大而且单据数字本身也需要和后台系统做校验。中间模糊地带可以通过“端上小模型预筛云端大模型兜底”来调和这是一种工程上的折中但往往也是最稳的。6.2 成本账不能只看算力单价端云分工的成本核算是一个容易算错的部分。单看云上推理一次请求几分钱好像很便宜单看端侧开发适配要投入人力好像很不划算。如果只算明账很容易得出“先上云再说”的结论但实际上还有三笔暗账。第一是流量成本。每张图像、每段音频传输到云端消耗的流量按年累计是非常可观的尤其是物联网设备规模上来之后。第二是人工成本。端侧适配确实前期投入高但后面每次模型更新和版本发布都更可控云端方案每次业务调整都可能涉及接口重构和线上事故处理。第三是用户体验成本。云端方案的每次网络抖动、接口超时、弱网重试都会转嫁为用户流失或现场投诉这部分损失很难在预算表里体现。我个人的建议是不要被“云更省心”这个说法带着走。云确实省掉了端侧部署的适配工作量但它把运维压力从“客户端版本碎片化”转成了“服务端可用性与带宽成本”。对创业团队可以先云后端先验证价值再优化架构对产线、车机、安防这些长期运营场景尽早把核心链路搬到端侧长期来看是更稳的投入。6.3 适合优先切入端侧推理的三类“低垂果实”如果团队刚准备尝试端侧推理不建议一上来就挑战复杂的检测跟踪任务可以先从三类低垂果实入手。第一类是唤醒词和关键词识别。模型小、实时性要求高、标准方案成熟用 NCNN 或 TFLite 都能快速跑通。第二类是简单的图像分类和异常检测。比如设备指示灯状态识别、工装是否合规、画面是否模糊这类场景数据收集容易模型准确率容易做高风险低。第三类是文本处理中的取词和格式化比如身份证号提取、二维码区域的定位可以在端上先做结构化再决定是否上云。这三个方向适合的原因很一致模型轻量、效果易于评估、出问题的影响范围小。团队可以通过这几个项目把端侧推理的工具链、测试方法和发布流程跑顺再逐步挑战更复杂的任务。我自己带的团队就是从“端上判断产线光照是否充足”这个小功能开始一路走到整条质检流水线的端侧化整个过程大概用了半年。最后再分享一个反复验证过的经验端侧推理项目能否落地关键不在模型精度而在“失败时的行为是否可控”。云端推理失败可以重试端侧推理挂了用户可能根本不知道。在设计系统时一定要给端侧模型加一个置信度下限和回退机制——端上不确定就找云端云端也不可用就明确告知用户。宁可少做不可乱做这是端云协同里最朴素的底线。
RELATED READING

延伸阅读

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