犀牛鸟 2026 研究笔记 estelledc.github.io

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

这就是为什么移动端推理引擎的设计如此具有挑战性。你不能简单地把服务器上的推理代码搬到手机上——必须从根本上重新思考:

这些约束催生了一系列精妙的工程设计。本导读要带你理解的,正是这些设计背后的”为什么”。


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。技术博客教你怎么部署某个具体模型。但很少有材料系统地回答这些问题:

这些”为什么”问题才是本导读的核心关注点。

本导读的定位是:设计哲学导读(Design Philosophy Reader)。它不教你写代码——那是官方文档和 tutorial 的事。它教你理解设计决策背后的动机和权衡。

打一个比方:如果把学习推理引擎比作学做菜,官方文档是菜谱(按步骤做就行),技术博客是美食视频(看别人做一遍),而本导读是厨艺理论书——它告诉你为什么中式炒菜要大火快炒(高温短时间保留蔬菜脆度),为什么法餐要小火慢炖(低温长时间让胶原蛋白转化为明胶)。理解了原理,你面对任何新食材都知道怎么处理;理解了设计哲学,你面对任何新框架都能快速抓住它的核心思路。

具体来说,本导读会帮你建立以下能力:


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. 本章小结

回顾本章的核心要点:

下一章我们会给出三条阅读路径,帮你根据自己的目标和时间选择最合适的学习路线。


常见误区

误区一:”推理引擎 = 深度学习框架” → 正确理解:PyTorch/TensorFlow 是训练框架(做菜谱的实验厨房),推理引擎是部署框架(出餐的生产厨房)。两者的优化目标截然不同——训练框架追求灵活性和自动求导,推理引擎追求极致延迟和最小内存占用。

误区二:”手机比服务器慢,所以模型精度一定差很多” → 正确理解:精度损失取决于量化和优化策略,不是简单的”慢 = 差”。INT8 量化后精度下降通常 < 1%,FP16 几乎无损。瓶颈是内存和功耗,不是精度。

误区三:”学推理引擎必须先精通 C++ 和汇编” → 正确理解:理解设计哲学和架构层次不需要汇编知识。本导读前半部分(Part 1-3)完全不涉及底层实现。C++ 在 Part 4 精读源码时才需要——且即使那时也只需读懂,不需要从零写。


读完本章你应能

章节自测

  1. 假设你要在一部 4GB 内存的安卓手机上运行一个 7B 参数的 LLM。瓶颈在哪里?推理引擎可以用哪些技术(量化/KV Cache 优化/算子融合)来让它跑起来?
  2. “在本地推理”和”调云端 API”各自在延迟、隐私、成本三个维度上的 trade-off 是什么?什么场景下本地推理是必须的而不只是”可选优化”?
  3. 六个推理引擎中,如果你只能选一个深入学习来准备竞赛贡献,你会选哪个?用什么标准做判断?

导读目录:README.md 下一章:Ch02: 阅读路线图——三条路径任你选