Loading...

文章背景图

ncnn:腾讯开源高性能移动端神经网络推理框架部署与使用指南

2026-10-26
0
- 字
- 分钟

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 仓库封面

二、官方图片

上图为 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

  1. ncnn 依赖第三方库吗? 无第三方运行时依赖,可在无网络、无系统库的设备上运行。

  2. 支持哪些模型框架? 官方推荐 PyTorch → pnnx → ncnn,也支持 ONNX 转换。

  3. 如何启用 GPU? 编译时加 -DNCNN_VULKAN=ON,并安装 Vulkan SDK。

  4. 模型文件是什么格式? .param(网络结构)+ .bin(权重)。

  5. 支持哪些平台? Linux、Windows、macOS、Android、iOS、嵌入式 ARM、Jetson、WebAssembly 等。

  6. 有哪些公司在用? QQ、Qzone、微信、天天 P 图等腾讯系应用。

七、跳转链接

评论交流

文章目录