Skip to content

Commit

Permalink
[Documentation] add ncnn backend docs (open-mmlab#122)
Browse files Browse the repository at this point in the history
* add ncnn backend docs

* remove fix version

* reply for code review
  • Loading branch information
hanrui1sensetime authored Oct 12, 2021
1 parent 997f8dd commit 46e0a3a
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions docs/backends/ncnn.md
Original file line number Diff line number Diff line change
@@ -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
```
- <font color=red>Make install</font> 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: <ncnn.ncnn.Net object at 0x7f7fc4038bb0>
```
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`

0 comments on commit 46e0a3a

Please sign in to comment.