From 46e0a3abc640b542ed1475a33686fe3a0a36ed57 Mon Sep 17 00:00:00 2001 From: hanrui1sensetime <83800577+hanrui1sensetime@users.noreply.github.com> Date: Tue, 12 Oct 2021 14:24:33 +0800 Subject: [PATCH] [Documentation] add ncnn backend docs (#122) * add ncnn backend docs * remove fix version * reply for code review --- docs/backends/ncnn.md | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/docs/backends/ncnn.md b/docs/backends/ncnn.md index 1fc3cfb89..bf644cc4f 100644 --- a/docs/backends/ncnn.md +++ b/docs/backends/ncnn.md @@ -1,3 +1,65 @@ ## ncnn Support ### Installation + +#### Install ncnn + +- Download VulkanTools for the compilation of ncnn. + ```bash + wget https://sdk.lunarg.com/sdk/download/1.2.176.1/linux/vulkansdk-linux-x86_64-1.2.176.1.tar.gz?Human=true -O vulkansdk-linux-x86_64-1.2.176.1.tar.gz + tar -xf vulkansdk-linux-x86_64-1.2.176.1.tar.gz + export VULKAN_SDK=$(pwd)/1.2.176.1/x86_64 +- Check your gcc version. +You should ensure your gcc satisfies `gcc >= 6`. +- Prepare ncnn Framework + + - Download ncnn source code + ```bash + git clone git@github.com:Tencent/ncnn.git + ``` + - Make install ncnn library + ```bash + cd ncnn + mkdir build + cmake -DNCNN_VULKAN=ON -DNCNN_SYSTEM_GLSLANG=ON -DNCNN_BUILD_EXAMPLES=ON -DNCNN_PYTHON=ON -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=ON -DNCNN_BUILD_TESTS=ON .. + make install + ``` + - Install pyncnn module + ```bash + cd ncnn/python + pip install . + ``` + +#### Build custom ops + +Some custom ops are created to support models in OpenMMLab, the custom ops can be built as follows: + +```bash +cd ${MMDEPLOY_DIR} +mkdir build +cd build +cmake -DBUILD_NCNN_OPS=ON .. +make -j$(nproc) +``` + +If you haven't installed NCNN in default path, please add `-DNCNN_DIR` flag in cmake. + +```bash + cmake -DBUILD_NCNN_OPS=ON -DNCNN_DIR=${NCNN_DIR} .. + make -j$(nproc) +``` + +### Convert model +- This follows the tutorial on [How to convert model](tutorials/how_to_convert_model.md). +- The converted model has two files: `.param` and `.bin`, as model structure file and weight file respectively. + +### FAQs +1. When running ncnn models for inference with custom ops, it fails and shows the error message like: + + ``` + TypeError: register mm custom layers(): incompatible function arguments. The following argument types are supported: + 1.(ar0: ncnn:Net) -> int + + Invoked with: + ``` + This is because of the failure to bind ncnn C++ library to pyncnn. You should build pyncnn from C++ ncnn source code, but not by `pip install`