Tencent/ncnn
机器学习无第三方运行时依赖的 C++ 神经网络推理框架,支持 CPU 与 Vulkan GPU,适合在手机、嵌入式和桌面端部署已训练模型。
项目介绍
ncnn 是一个用 C++ 编写的神经网络推理框架,面向手机、嵌入式板卡、桌面 PC 和浏览器部署已训练模型。它不依赖第三方运行时,也不需要 BLAS 或 NNPACK,因此模型可以以一个精简库加上 .param 计算图文件和 .bin 权重文件的形式分发。腾讯公开说明其用于 QQ、Qzone、微信、天天 P 图等应用。
框架包含针对 ARM NEON 和多核调度优化的 CPU 推理,以及在支持平台上可选的 Vulkan GPU 后端。它支持多输入、多输出和多分支图,fp16 存储与计算路径、int8 量化推理、自定义层,以及 .param/.bin 模型的内存直接引用加载。模型导入主要由 pnnx 负责,把 PyTorch 和 ONNX 模型转换为 ncnn 格式;Caffe、MXNet、Darknet 等旧格式保留兼容转换工具。
它适合已经训练好模型、需要在边缘设备上以可控内存运行、且不想引入重量级运行时的开发者。
快速使用
文档推荐的入门路径是 PyTorch → pnnx → ncnn。先准备带 PyTorch 的 Python 环境,再安装 pnnx:
pip3 install pnnx
导出一个简单 PyTorch 模型。示例由卷积、ReLU、全局均值池化和全连接组成,在 eval 模式下以 1x3x224x224 输入导出:
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(model, "model.pt", (x,))
执行后会生成 model.ncnn.param 和 model.ncnn.bin。用 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);
同一组文件也可用 Python 绑定加载,通过 ncnn.Net()、ncnn.Mat 和 create_extractor() 使用 in0/out0 名称,并用 NumPy 打印输出 Mat 的形状。完整流程见 pnnx、PyTorch/ONNX 转换指南、Python API 和 示例。
如果倾向直接使用预编译库,可以下载 Android、iOS、macOS、Linux、Windows、HarmonyOS、WebAssembly 及 Apple 平台包,每个平台通常提供 Vulkan 和纯 CPU 版本。
从源码构建
预编译包与目标平台匹配时优先使用。否则在 Linux 上典型构建流程为:
git clone --recursive https://github.com/Tencent/ncnn.git
cd ncnn
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=ON ..
cmake --build . -j$(nproc)
ARM Cortex-A、海思、全志 D1、龙芯 2K1000、QNX、MIPS、RISC-V、LoongArch 等平台的交叉编译步骤见 构建指南。
使用约束
Vulkan 后端需要通过 NCNN_VULKAN 显式开启,并依赖目标设备的 GPU 和驱动支持;没有该能力的平台可选用纯 CPU 包。框架面向推理而非训练。算子覆盖范围是实际边界:依赖未支持的 PyTorch 或 ONNX 算子的模型需要对照支持列表检查,或编写自定义层。README 指出经典 CNN 负载仍是其强项,音频、生成和语言类负载由社区项目在算子受支持的前提下体现。项目采用 BSD 3-Clause 许可证。
HotRepo 点评
在 2026-11-12 的 C++ 日榜上,ncnn 以新增 9 个 Star 排到第 6,总 Star 约 2.4 万、Fork 约 4500。对一个 2017 年即公开、并嵌入大型消费级应用的框架来说,这更像是日常增量而非爆发;目前只有单次快照,不足以判断趋势。更值得注意的其实是它出现的位置:一个成熟的推理运行时在发布近十年后仍能进入 C++ 语言榜,与它在移动端和边缘部署中的持续使用相符,而不是新鲜感驱动的关注。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。
Hacker News 讨论
相关推荐
- onnx/onnx为深度学习与传统机器学习模型提供开放交换格式和 Python 工具,让模型能在不同框架与推理运行时之间迁移。
- tensorflow/tensorflow端到端训练与部署神经网络模型的框架,面向研究人员和生产环境 ML 工程师。
- microsoft/onnxruntime在各种硬件上运行并加速已训练好的 ONNX 模型,同时支持在多节点 NVIDIA GPU 上加速 Transformer 训练。
- pytorch/pytorch为需要直接在 Python 里训练深度网络的研究者提供 GPU 张量运算与自动求导的深度学习框架。
- kornia/kornia在 PyTorch 张量上提供可微的图像处理与几何视觉算子,让几何变换和数据增强留在计算图中,并在 GPU 上批量执行。