ncnn:腾讯开源高性能移动端神经网络推理框架部署与使用指南
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | Tencent/ncnn |
| 构建文档 | how to build |
| 开源协议 | BSD-3-Clause |
| 主要语言 | C++ |
| Star 数 | 约 24k |
ncnn 是一个面向移动端、嵌入式和桌面端部署优化的高性能神经网络推理框架。它无第三方运行时依赖,支持 CPU 与 Vulkan GPU 后端,并提供 pnnx 等工具将 PyTorch、ONNX 模型转换为 ncnn 模型。开发者可将深度学习模型高效部署到手机、PC、浏览器和边缘设备上。ncnn 已在腾讯多款应用中使用,如 QQ、Qzone、微信、天天 P 图等。

二、官方图片
上图为 ncnn 仓库在 GitHub 上的社交预览图。
三、环境要求
- 构建工具:CMake、C++ 编译器(GCC/Clang/MSVC);
- 模型转换:Python 3 + PyTorch 环境(pnnx);
- 可选:Vulkan SDK(启用 GPU 后端);
- 平台:Linux、Windows、macOS、Raspberry Pi 3/4、POWER、Android、NVIDIA Jetson、iOS、WebAssembly、AllWinner D1、Loongson 2K1000。
四、部署步骤
官方推荐入门路径为:PyTorch → pnnx → ncnn。
1. 在 PyTorch 环境安装 pnnx
pip3 install pnnx
2. 导出 PyTorch 模型为 ncnn
import torch
import torch.nn as nn
import pnnx
class Model(nn.Module):
def __init__(self):
super().__init__()
self.conv = nn.Conv2d(3, 8, 1)
self.relu = nn.ReLU()
self.fc = nn.Linear(8, 4)
def forward(self, x):
x = self.conv(x)
x = self.relu(x)
x = x.mean((2, 3))
return self.fc(x)
model = Model().eval()
x = torch.rand(1, 3, 224, 224)
pnnx.export_pytorch_model(model, (x,), device="cpu")
执行后会生成 model.ncnn.param(网络结构)与 model.ncnn.bin(权重)。
3. 编译 ncnn 库
git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
cmake -B build -DNCNN_VULKAN=ON
cmake --build build -j
cmake --install build
4. 用 C++ API 运行
#include "net.h"
ncnn::Net net;
net.load_param("model.ncnn.param");
net.load_model("model.ncnn.bin");
ncnn::Mat in(224, 224, 3);
auto ex = net.create_extractor();
ex.input("in0", in);
ncnn::Mat out;
ex.extract("out0", out);
5. 用 Python API 运行
import numpy as np
import ncnn
net = ncnn.Net()
net.load_param("model.ncnn.param")
net.load_model("model.ncnn.bin")
x = np.zeros((3, 224, 224), np.float32)
mat = ncnn.Mat(x)
ex = net.create_extractor()
ex.input("in0", mat)
ret, out = ex.extract("out0")
print(np.array(out).shape)
五、使用方法
- 模型转换:用 pnnx 把 PyTorch/ONNX 转成 ncnn 格式;
- CPU 推理:默认纯 CPU 后端,无需 Vulkan;
- GPU 加速:开启 Vulkan 后端可显著提升移动端速度;
- 跨平台:Android/iOS 可编译为 .so/.framework 集成;
- 示例:仓库 examples 目录提供常见模型部署示例;
- 社区:提供 QQ 群、Telegram、Discord 交流渠道。
六、常见问题 FAQ
-
ncnn 依赖第三方库吗? 无第三方运行时依赖,可在无网络、无系统库的设备上运行。
-
支持哪些模型框架? 官方推荐 PyTorch → pnnx → ncnn,也支持 ONNX 转换。
-
如何启用 GPU? 编译时加
-DNCNN_VULKAN=ON,并安装 Vulkan SDK。 -
模型文件是什么格式?
.param(网络结构)+.bin(权重)。 -
支持哪些平台? Linux、Windows、macOS、Android、iOS、嵌入式 ARM、Jetson、WebAssembly 等。
-
有哪些公司在用? QQ、Qzone、微信、天天 P 图等腾讯系应用。
七、跳转链接
- GitHub 仓库:Tencent/ncnn
- 构建文档:how to build
- 发布版本:Releases
- 示例:examples