mrkeyoor.com_
Mon 21 Sept 06:55 UTC
AI Toolsevaluationupdated 21 Sept 2026

ncnn review

ncnn is a C++ runtime for putting trained neural networks into phones, desktop apps, browsers, and embedded devices without a hosted inference service. Its main README is bilingual in English and Chinese, and the linked English guides cover building, conversion, APIs, and common errors. It converts PyTorch and ONNX models into its own files, then runs them on CPUs or supported Vulkan GPUs.

Verdict

Our ncnn install timed out at 900 seconds before producing its Python extension, which makes it a poor casual pip dependency and a serious native-runtime choice. Use it when a shipped model needs to run inside a C++ mobile or embedded application and your team can validate conversion plus CPU and Vulkan output on the actual devices. Start elsewhere if you want a training framework or a Python package that installs quickly in a fresh container.

We ran it

Lab card: what happened when we ran ncnnScreenshot of ncnn (github.com/Tencent/ncnn)
Install✗ timed out · 900s
Build
Repo8224 files~1,420,717 lines of source · 110.6 MB · 45 CI workflows · tests dir

Answers from our run

Does ncnn build from source?

The dependency install failed, and the project has no separate build step. We cloned commit 050ba22 into a clean Debian container with 3 CPUs and no project-specific setup.

Who should not use ncnn?

Python teams expecting a pure-Python package: the README describes a C++ runtime with Python bindings, and our native extension build did not finish within 900 seconds.

What are the alternatives to ncnn?

ExecuTorch, LiteRT, MNN. Our ncnn install timed out at 900 seconds before producing its Python extension, which makes it a poor casual pip dependency and a serious native-runtime choice.

Setup1/5Python install timed out at 900 seconds before producing the extension
Docs4/5Bilingual README plus build, conversion, API, and error guides
Community5/5Same-day push and active discussion across a large issue queue
Maturity4/5Wide platform releases, with device-specific correctness reports

Who it’s for

Mobile and embedded developers who need inference inside a native application.
Teams prepared to convert a settled PyTorch or ONNX model and verify its outputs on every target device.
C++ developers who want CPU and Vulkan paths without a hosted runtime.
Product teams that can use a prebuilt platform package or maintain a CMake toolchain.

Who it’s NOT for

Python teams expecting a pure-Python package: the README describes a C++ runtime with Python bindings, and our native extension build did not finish within 900 seconds.
Teams that cannot test numerical output on their exact hardware: open issues 6818 and 6932 report correct CPU output but wrong Vulkan or ARM fp16 output on specific devices.
Models that depend on unverified PyTorch or ONNX operators: the README sends developers to separate operator-status tables and supports custom layers for gaps.
Researchers seeking a training framework: ncnn is documented as an inference and deployment runtime for already trained models.

Setup reality

Our sandbox install timed out after 900 seconds. The commit 050ba22 checkout contained 8,224 files, roughly 1,420,717 source lines, and occupied 110.6 MB before installation. The install never produced the Python extension, so our run has no build or test result.

The README's shortest routes are a platform-specific prebuilt package or a recursive source checkout built with CMake. PyTorch and ONNX models go through pnnx before loading through the C++ or Python API. The local runtime does not require a hosted service or API credentials.

Platform choices multiply quickly: CPU or Vulkan, static or shared libraries, several operating systems, and several processor architectures. Our checkout had 45 CI workflow files and no Dockerfile. A tests directory exists, but the timed-out install prevented us from reaching it in the fresh Debian container.

A 900-second timeout changes the quick start

Our ncnn install was still compiling after 900 seconds, then the harness stopped it. The final copy step could not find ncnn.cpython-312-x86_64-linux-gnu.so, so the Python package never became importable. That result matters because the README opens with a short pnnx example and a Python snippet. The example explains the API clearly, but it does not make the underlying native build small or predictable in every fresh environment.

The checkout itself contained 8,224 files, roughly 1,420,717 lines of source, and occupied 110.6 MB before installation. ncnn has no third-party runtime dependencies, according to the README, which is useful once a working library is inside an application. Runtime independence does not remove the compiler, CMake, architecture, and optional Vulkan work needed to produce that library. Prebuilt packages are the sensible first route when one matches your target.

The 8,224-file checkout turns model conversion into a contract

The 8,224-file repository includes pnnx, and the recommended path is PyTorch to pnnx to ncnn. Conversion creates a .param graph and .bin weights that the C++ or Python API loads locally. ONNX can enter through pnnx too. Once those files work, an application does not need an inference server or cloud credential. That is ncnn's best argument: the model ships as part of the product instead of becoming another network dependency.

Our checkout had 45 CI workflow files, but model compatibility still depends on the operators used by your graph. The README links separate PyTorch and ONNX operator-status tables and documents custom layers. Treat conversion as a release gate. Run the source model and converted model on fixed inputs, compare outputs, then repeat on the CPU and GPU paths you plan to enable. A successful conversion command alone does not establish numerical agreement.

What happened when we ran it

Our sandbox install timed out at exactly 900 seconds. It did not reach a completed build or a test command, so there are no test counts to report. The last log lines came from GCC's AVX-512 intrinsic headers during compilation. The package step then said it could not copy the expected Python shared object because that file did not exist or was not a regular file. The log does not show why the shared object was absent.

We ran commit 050ba22 in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and Python 3.12. The 110.6 MB checkout had a tests directory and 45 CI workflow files, but no Dockerfile. Those facts make the boundary plain: ncnn has substantial upstream test infrastructure, while our measured Python installation on this particular clean image never got far enough to use it. We cannot turn that timeout into a passing build claim.

The 110.6 MB source tree supports Vulkan, with device caveats

Our 110.6 MB checkout contains CPU kernels, Vulkan code, converters, examples, and bindings for a long list of targets. The README documents ARM NEON, multicore scheduling, fp16 paths, int8 inference, custom allocators, and direct model loading. Release 20260526 provides separate archives for Android, HarmonyOS, Apple platforms, Linux, Windows, and WebAssembly, with CPU and Vulkan variants where supported. That breadth saves porting work only when your model and device follow a tested path.

Specific open reports show why target testing cannot stop at a desktop check. Issue 6818 describes YOLOv8 output that was correct on CPU and inaccurate on a Mali-G720 Vulkan GPU. Issue 6932 reports all 256 outputs becoming non-finite with ARM fp16 arithmetic on one Galaxy A35 setup, while fp16 storage and fp32 stayed clean. These are reports on named configurations, not proof that every Mali or ARM device fails. They are strong reasons to keep reference outputs in device tests.

Forty-five workflows accompany a queue of 1,077 open issues

The last push was September 21, 2026, and our checkout counted 45 CI workflow files. GitHub showed 23,846 stars and 1,203 combined issues and pull requests when fetched. A separate issue search returned 1,077 open issues. Recent device-specific reports were still receiving updates in September, so the large queue sits beside visible development rather than a dormant repository. It also means adopters should search by processor, GPU, model, and precision mode before choosing a release.

Release 20260526 arrived on May 26 with binaries for a broad platform matrix and detailed notes on CPU, Vulkan, conversion, and CI changes. Much of that release text is in Chinese, while the main README presents its opening, quick start, feature list, and documentation index in both English and Chinese. Across 8,224 files, documentation is extensive but distributed among the README, wiki, tool folders, operator tables, examples, and issue threads. You will need more than the front page for production work.

The 1,420,717-line codebase belongs inside a native product

At roughly 1,420,717 source lines, ncnn is best treated as a platform component rather than a convenience package. It fits a camera app, offline classifier, embedded vision system, or other native product whose model is already chosen. The payoff is local inference with control over CPU threads, memory allocation, precision, and Vulkan use. The cost is owning conversion checks, native builds, artifact selection, and a test matrix that resembles the devices customers carry.

The 900-second install timeout is enough to reject ncnn for a quick Python experiment on our container, but it does not erase the prebuilt packages or C++ deployment path. Try the matching release archive first, convert one representative model, and compare its outputs against the source framework on each target class. If those checks pass, ncnn removes a server from your design. If they do not, a different runtime is cheaper than debugging numerical differences after release.

Alternatives

ProjectWhat it isPick it when
ExecuTorchPyTorch's on-device runtime for mobile, embedded, and edge deployments.pick this instead when the model and deployment workflow should stay inside the PyTorch toolchain.
LiteRTGoogle's on-device runtime and conversion stack, formerly TensorFlow Lite.pick this instead when Google tooling, Android integration, or LiteRT delegates match your application.
MNNAlibaba's native inference engine for mobile and other edge devices.pick this instead when its model support and device backends fit your hardware matrix better than ncnn's.

What people are saying

  1. [velocity-scout] Tencent/ncnn

Sources

  1. ncnn repository and README
  2. ncnn 20260526 release
  3. ncnn build guide
  4. Mali-G720 Vulkan output issue 6818
  5. ARM fp16 output issue 6932

More ai tools reviews

OpenCreator · editor · autoclip · financial-services · Portable-Local-Studio · json-render · the whole board →