Ch01: 为什么需要这本导读
Part 1: 导读总纲 后续章节:Ch02: 阅读路线图——三条路径任你选
阅读门槛说明:本导读面向零基础读者——你不需要事先了解推理引擎、模型部署的任何细节。但由于底层涉及 C++ 算子和 GPU 编程,后续章节(ch07 起)会假设你具备 C/C++ 基础语法和深度学习基本概念(张量、前向传播、算子)。如果这些完全陌生,建议先过一遍任何一份”C++ 入门”和”深度学习 30 分钟入门”材料。导读 front-matter 标注
difficulty: advanced指的是目标深度(最终要能读懂 ncnn C++ 源码、写 Vulkan shader),而非起点要求。
1. 手机上的 AI 功能背后发生了什么
打开手机前置摄像头,脸上的皮肤瞬间变得光滑,眼睛微微放大——这就是美颜。对着手机说”帮我设个明早七点的闹钟”,语音助手立刻理解并执行——这是语音识别加自然语言理解。出国旅游时把手机镜头对准菜单,屏幕上的外文实时变成中文——这是实时翻译。
这些功能有一个共同点:它们都在你的手机本地运行着一个或多个神经网络模型。注意”本地”二字。不是把数据发到云端服务器处理完再返回结果,而是直接在你口袋里那块几英寸的芯片上完成全部计算。
为什么要在本地做?三个原因:
第一是延迟。实时美颜要求每一帧画面在 16 毫秒内处理完(60fps),如果走网络往返,光是网络延迟就可能超过 50 毫秒,画面会卡顿。语音助手如果每句话都要等服务器响应,用户体验会像打越洋电话一样别扭。
第二是隐私。你的面部数据、语音内容、拍摄的照片——这些都是高度敏感的个人信息。如果全部上传到云端,既增加了数据泄露的风险,也会让注重隐私的用户感到不安。本地推理意味着数据不出设备。
第三是可用性。地铁隧道里没有信号,飞机上开了飞行模式,偏远山区没有 4G 覆盖——这些场景下云端 AI 完全失效,但本地推理照样运行。
所以,当你使用这些 AI 功能时,你的手机正在做一件非常了不起的事:在一块功耗只有几瓦、内存只有几 GB 的芯片上,运行着原本需要服务器机房才能跑的神经网络模型。让这件事成为可能的软件,就叫做”推理引擎”。
2. “推理引擎”是什么——餐厅厨房类比
要理解推理引擎,先来一个类比。
想象一家餐厅。餐厅的运营可以分为两个阶段:研发菜品和实际出餐。研发菜品的时候,大厨在实验厨房里反复尝试各种食材组合、调味比例、火候控制,经过几百次实验,最终确定了一道招牌菜的标准做法,写成了一份详细的菜谱。这个过程对应深度学习中的”训练”——用大量数据反复调整模型参数,最终得到一个训练好的模型文件(相当于那份菜谱)。
实际出餐的时候,厨师按照菜谱,用厨房里的炉灶、锅具、刀具等设备,把顾客点的菜做出来。每一桌客人点菜,厨师就按菜谱执行一次。这个过程对应”推理”——把训练好的模型加载进来,对新的输入数据(一张照片、一段语音)执行计算,输出结果。
那”推理引擎”是什么?它是厨房本身——包括厨房的布局设计、设备选型、工作流程编排。好的厨房设计能让厨师高效出餐:动线合理不用来回跑,设备摆放顺手不用找,多个灶台可以同时开工。差的厨房设计则会让厨师手忙脚乱,出餐慢还容易出错。
推理引擎做的事情就是:给定一个模型(菜谱)和一份输入数据(食材),如何最高效地在目标硬件(厨房设备)上完成计算(出餐),同时占用尽可能少的资源(厨房面积、电费、人力)。
更具体地说,推理引擎负责这些工作:
- 模型加载与解析:读取模型文件,理解其中定义的计算步骤(相当于读懂菜谱)
- 计算图优化:分析计算步骤之间的依赖关系,合并可以合并的操作,消除冗余计算(相当于优化出餐流程,把能并行的备菜环节提前做好)
- 内存管理:规划中间结果的存储位置,尽可能复用内存空间(相当于规划台面空间,做完一道菜的中间步骤后,盘子洗了马上给下一步用)
- 算子调度:决定每一步计算由哪个硬件单元执行,按什么顺序执行(相当于安排哪个厨师用哪个灶台做什么)
- 硬件适配:针对不同芯片的特性编写优化代码(相当于根据厨房有的是燃气灶还是电磁炉来调整做法)
这个类比有一个重要的边界需要说明:真实的推理引擎比厨房复杂得多。厨房里的”计算”是线性的——先切菜再炒菜再装盘;而神经网络的计算是一个有向无环图,成百上千个操作之间存在复杂的依赖关系。厨房的”硬件”只有灶台和刀具;而移动芯片上有 CPU、GPU、DSP、NPU 等多种计算单元,每种擅长不同类型的计算。但这个类比能帮你建立正确的直觉:推理引擎是”执行计算的基础设施”,而不是模型本身。
3. 为什么移动端推理特别难——服务器 vs 手机的资源差异
如果推理引擎只是”执行计算的基础设施”,那在服务器上做推理和在手机上做推理,难度一样吗?
完全不一样。差异之大,用一个比喻来说:服务器推理像在五星级酒店后厨做菜——空间巨大、设备齐全、水电随便用;移动端推理像在房车厨房里做满汉全席——空间只有一平方米,电来自车载电池,还不能让车内温度升太高。
来看具体数字。
内存(RAM)对比:一台典型的推理服务器配备 256GB 甚至更多内存,而一部主流手机只有 4-8GB 内存(其中还有大部分被操作系统和其他 App 占用,留给你的推理引擎可能只有 1-2GB)。差距是 100 倍以上。这意味着模型不能太大,中间计算结果不能随意存放,内存必须精打细算地复用。一个在服务器上跑得好好的模型,直接放到手机上可能连加载都加载不了。
功耗对比:一台推理服务器的 GPU 功耗在 300-400W(比如 NVIDIA A100 是 300W,H100 是 700W),配合几千瓦的服务器总功耗,反正有市电供应。而手机的整机功耗预算通常只有 3-5W。注意这不是 CPU 或 GPU 的功耗——这是整部手机包括屏幕、基带、传感器在内的总功耗预算。留给 AI 推理的可能只有 1-2W。差距是 100-200 倍。功耗高意味着两个问题:发热和耗电。手机发烫用户会投诉甚至会触发降频保护;耗电快用户会卸载你的 App。
算力对比:NVIDIA H100 GPU 的半精度算力约为 990 TFLOPS(每秒万亿次浮点运算),即使是上一代 A100 也有 312 TFLOPS。而高通骁龙 8 Gen 3 的 AI 加速器(Hexagon NPU)峰值算力约为 45 TOPS(每秒万亿次整数运算),苹果 A17 Pro 的 Neural Engine 约为 35 TOPS。差距约为 7-20 倍(考虑到精度差异实际差距更大)。而且服务器可以堆多张卡,手机只有一颗 SoC。
带宽对比:服务器 GPU 的显存带宽可达 2-3 TB/s(H100 HBM3 是 3.35 TB/s),而手机的内存带宽通常在 50-80 GB/s。差距约 40 倍。对于大量推理任务来说,瓶颈往往不是计算而是数据搬运——数据从内存搬到计算单元的速度决定了实际性能的上限。
把这些数字放在一起看:
| 维度 | 服务器(H100) | 手机(骁龙8 Gen3) | 差距 |
|---|---|---|---|
| 内存 | 256GB+ | 4-8GB(可用1-2GB) | ~100x |
| 功耗 | 300-700W | 3-5W(AI部分1-2W) | ~100-200x |
| 算力 | 312-990 TFLOPS | 45 TOPS | ~7-20x |
| 带宽 | 2-3 TB/s | 50-80 GB/s | ~40x |
这就是为什么移动端推理引擎的设计如此具有挑战性。你不能简单地把服务器上的推理代码搬到手机上——必须从根本上重新思考:
- 如何在 1-2GB 内存预算内完成全部计算?(需要精细的内存复用策略)
- 如何在 1-2W 功耗下跑完一次推理?(需要选择能效比最高的计算路径)
- 如何充分利用有限的算力?(需要针对移动芯片的指令集做极致优化)
- 如何应对碎片化的硬件生态?(高通、联发科、三星、苹果,每家的芯片架构都不同)
这些约束催生了一系列精妙的工程设计。本导读要带你理解的,正是这些设计背后的”为什么”。
4. 为什么值得深入学
你可能会问:我一个实习生,为什么要花时间理解这些推理引擎的内部设计?直接调用 API 不就行了?
这个问题有四个层面的回答。
第一,开源贡献机会。这些推理引擎几乎全是开源项目。ncnn 在 GitHub 上有 22000+ star,MNN 有 8000+ star,ONNX Runtime 有 21000+ star。开源意味着你可以看到每一行代码,可以提 issue、提 PR,可以和全世界的开发者协作。对于实习生来说,给这些项目贡献代码是简历上最有说服力的加分项之一——比任何课程项目都有价值,因为你的代码在生产环境中被数百万设备使用。
第二,犀牛鸟竞赛背景。腾讯犀牛鸟开源人才培养计划(Rhino-Bird Open-Source Training Program)专门设立了移动端推理引擎相关的赛题。理解这些引擎的设计哲学,不仅是参赛的前提,更是在评审中脱颖而出的关键——评委看重的不是你能不能跑通 demo,而是你是否理解为什么这样设计、还有什么改进空间。
第三,职业价值。端侧 AI 是一个正在快速增长的领域。随着大语言模型(LLM)向端侧迁移(如 Apple Intelligence、Google Gemini Nano),对推理引擎优化人才的需求持续增加。理解底层推理引擎的人,能做的事情远比只会调 API 的人多得多:性能调优、模型适配、新硬件支持、算子开发——这些都是高价值的工程岗位。
第四,思维训练。推理引擎的设计涉及计算机科学最核心的权衡:时间 vs 空间、通用性 vs 性能、抽象层次 vs 执行效率。理解这些权衡如何在真实工程中落地,会让你成为一个更好的工程师——不管你将来是否继续做 AI 推理相关的工作。
5. 本导读的定位:设计哲学导读
市面上不缺推理引擎的教程。官方文档教你怎么安装、怎么加载模型、怎么调用 API。技术博客教你怎么部署某个具体模型。但很少有材料系统地回答这些问题:
- 为什么 ncnn 选择了零依赖的设计?这个选择带来了什么好处和代价?
- 为什么 MNN 要做几何计算?别的框架为什么不做?
- ONNX Runtime 的”执行提供者”架构解决了什么问题?
- TNN 为什么在 ncnn 的基础上加了一层抽象?
- Paddle-Lite 是怎么做到支持 13+ 种后端的?
- MACE 为什么要对 Hexagon DSP 做那么深的优化?
这些”为什么”问题才是本导读的核心关注点。
本导读的定位是:设计哲学导读(Design Philosophy Reader)。它不教你写代码——那是官方文档和 tutorial 的事。它教你理解设计决策背后的动机和权衡。
打一个比方:如果把学习推理引擎比作学做菜,官方文档是菜谱(按步骤做就行),技术博客是美食视频(看别人做一遍),而本导读是厨艺理论书——它告诉你为什么中式炒菜要大火快炒(高温短时间保留蔬菜脆度),为什么法餐要小火慢炖(低温长时间让胶原蛋白转化为明胶)。理解了原理,你面对任何新食材都知道怎么处理;理解了设计哲学,你面对任何新框架都能快速抓住它的核心思路。
具体来说,本导读会帮你建立以下能力:
- 拿到一个新的推理引擎,能在 30 分钟内理解它的架构定位和设计取舍
- 理解不同框架为什么做出不同选择——不是因为某个更好某个更差,而是因为它们面对的约束和优先级不同
- 在给开源项目贡献代码时,能写出符合该项目设计哲学的 PR,而不是”能跑就行”的代码
- 在技术选型时,能根据具体场景选择最合适的框架
6. 六个框架一句话介绍
本导读覆盖六个主流移动端推理引擎。先给每个框架一句话定位,让你有个整体印象。后续章节会逐一深入。
ncnn——极简先驱,零依赖的 22K star 项目。由腾讯优图实验室的 nihui 在 2017 年开源。它的核心理念是”能不依赖就不依赖”:不依赖任何第三方库(甚至不依赖 protobuf),直接手写汇编优化。正是这种极简哲学让它成为了嵌入式设备上的首选,也让它的代码成为学习移动端优化的最佳教材。22000+ star 代表了社区对这种工程美学的认可。
MNN——全栈运行时,端侧训练 + LLM 一体化。由阿里巴巴在 2019 年开源。MNN 的野心比 ncnn 大得多:它不仅做推理,还做端侧训练;不仅支持传统 CV 模型,还为大语言模型(LLM)做了深度优化。它引入了”几何计算”这个独特的中间表示层,试图用一套统一的抽象解决跨硬件优化问题。如果说 ncnn 是精致的手工刀,MNN 就是瑞士军刀——功能全面但也更复杂。
ONNX Runtime(ORT)——标准枢纽,ONNX 生态的 21K star 引擎。由微软主导开发。ORT 的独特价值在于它是 ONNX 标准格式的官方运行时——无论你用 PyTorch、TensorFlow 还是其他框架训练的模型,都可以导出为 ONNX 格式然后在 ORT 上跑。它的”执行提供者”(Execution Provider)插件架构让不同硬件厂商可以独立接入优化后端,不需要改动 ORT 核心代码。这种标准化定位让它在工业界有极高的采用率。
TNN——ncnn 架构翻新,双层抽象设计。由腾讯光影研究室在 2020 年开源。TNN 的代码血统来自 ncnn(核心开发者有重叠),但在架构上做了重要升级:它在计算图和硬件后端之间增加了一层抽象(AbstractDevice + AbstractNetwork),让新硬件的接入更加模块化。如果说 ncnn 是”直接调用硬件指令”的风格,TNN 就是”先过一层标准接口再调硬件”的风格。这个选择在工程可维护性和极致性能之间做了不同于 ncnn 的权衡。
Paddle-Lite——NPU 覆盖王,13+ 后端支持。由百度飞桨团队开发。Paddle-Lite 最突出的特点是后端覆盖面极广:华为 NPU(海思麒麟)、联发科 APU、瑞芯微 NPU、寒武纪 MLU、百度昆仑芯——几乎所有中国芯片生态的 AI 加速器都有官方适配。这种广泛覆盖的背后是百度在国产化替代浪潮中的战略布局:让飞桨生态的模型能在尽可能多的国产硬件上跑起来。
MACE——DSP 深度优化,Hexagon 专家。由小米在 2018 年开源。MACE 的独特之处在于它对高通 Hexagon DSP 做了非常深入的优化——深入到利用 Hexagon 的 HVX(Hexagon Vector eXtensions)向量指令集的程度。在很多手机上,DSP 的能效比 GPU 更高(算同样的东西更省电),但 DSP 的编程模型非常特殊。MACE 在这个方向上的投入让它在特定场景下有独特的性能优势。
7. 本章小结
回顾本章的核心要点:
- 手机上的 AI 功能(美颜、语音助手、实时翻译)需要在本地运行神经网络模型,原因是延迟、隐私和可用性
- 推理引擎是执行模型计算的基础设施,类似餐厅的厨房——它决定了出餐(推理)的效率
- 移动端推理面临严苛的资源约束:相比服务器,内存少 100 倍、功耗低 100-200 倍、算力小 7-20 倍、带宽窄 40 倍
- 深入学习推理引擎有四重价值:开源贡献机会、竞赛基础、职业发展、思维训练
- 本导读关注设计哲学——理解”为什么这样设计”比记住 API 调用更有长期价值
- 六个框架各有定位:ncnn 极简、MNN 全栈、ORT 标准化、TNN 架构升级、Paddle-Lite 广覆盖、MACE DSP 深度优化
下一章我们会给出三条阅读路径,帮你根据自己的目标和时间选择最合适的学习路线。
常见误区
误区一:”推理引擎 = 深度学习框架” → 正确理解:PyTorch/TensorFlow 是训练框架(做菜谱的实验厨房),推理引擎是部署框架(出餐的生产厨房)。两者的优化目标截然不同——训练框架追求灵活性和自动求导,推理引擎追求极致延迟和最小内存占用。
误区二:”手机比服务器慢,所以模型精度一定差很多” → 正确理解:精度损失取决于量化和优化策略,不是简单的”慢 = 差”。INT8 量化后精度下降通常 < 1%,FP16 几乎无损。瓶颈是内存和功耗,不是精度。
误区三:”学推理引擎必须先精通 C++ 和汇编” → 正确理解:理解设计哲学和架构层次不需要汇编知识。本导读前半部分(Part 1-3)完全不涉及底层实现。C++ 在 Part 4 精读源码时才需要——且即使那时也只需读懂,不需要从零写。
读完本章你应能
- 用一句话解释”推理引擎”是什么(用厨房类比)
- 说出移动端 vs 服务器在四个资源维度(内存/功耗/算力/带宽)的数量级差异
- 列出六个推理引擎框架的名称和各自一句话定位
- 解释”为什么要在本地做推理”的三个理由(延迟/隐私/可用性)
- 区分”推理引擎”和”训练框架”的核心差异
章节自测
- 假设你要在一部 4GB 内存的安卓手机上运行一个 7B 参数的 LLM。瓶颈在哪里?推理引擎可以用哪些技术(量化/KV Cache 优化/算子融合)来让它跑起来?
- “在本地推理”和”调云端 API”各自在延迟、隐私、成本三个维度上的 trade-off 是什么?什么场景下本地推理是必须的而不只是”可选优化”?
- 六个推理引擎中,如果你只能选一个深入学习来准备竞赛贡献,你会选哪个?用什么标准做判断?
导读目录:README.md 下一章:Ch02: 阅读路线图——三条路径任你选