NCNN 是什么:腾讯开源的高性能端侧推理框架
NCNN 是什么:腾讯开源的高性能端侧推理框架
NCNN 是腾讯开源的端侧神经网络推理框架,用纯 C++ 写成,不依赖任何第三方库,编译产物只有一个静态库加一组头文件。它的目标是手机与嵌入式设备上的极致轻量:不依赖 BLAS、不依赖 protobuf,模型分成两个文件——文本格式的 .param 描述网络结构,二进制的 .bin 存放权重。移动端 GPU 加速通过 Vulkan 统一处理,Android、iOS、ARM Linux 共用同一套代码路径。
它解决的问题与 TFLite 有重叠,但侧重点不同:TFLite 的强项是量化工具链与系统级委托(NNAPI、Core ML、Edge TPU),NCNN 的强项是零依赖带来的可控性、更直接的 Vulkan 接入,以及一条可以一路读到源码的算子实现路径。当训练栈是 PyTorch、部署目标是 ARM Linux 板卡,或者需要在内核上做定制裁剪时,NCNN 往往是阻力最小的选择。
与相邻方案的差别
- TensorFlow Lite:委托生态更全,量化流程更成熟,适合 TensorFlow 训练栈;
- MNN:阿里开源的端侧推理框架,算子覆盖与自动调优做得细,工具链偏完整;
- ONNX Runtime:通用性最好,但端侧二进制体积与运行期开销不如 NCNN 收敛;
- NCNN:无第三方依赖、Vulkan 路径短、源码可读,适合需要深度定制和交叉编译到冷门 ARM 板卡的场景。
核心术语表
| 术语 | 含义 | 说明 |
|---|---|---|
| param | 文本格式的网络结构描述 | 首行是层数与 blob 数,之后每层一行 |
| bin | 二进制权重文件 | 按层顺序存放 float32 或量化后的权重 |
| blob | 层与层之间流转的数据 | NCNN 里没有张量概念,只有 blob 与 Mat |
| Mat | NCNN 的核心数据结构 | 形如 (w, h, c) 的连续内存块 |
| Extractor | 一次推理的执行器 | 输入 blob 名,取出 blob 名 |
| opt | Net 的全局运行选项 | 线程数、Vulkan、fp16、int8、打包布局都在这里 |
| pnnx | PyTorch 到 NCNN 的转换工具 | 官方推荐的 PyTorch 侧入口 |

