77 lines
2.2 KiB
Markdown
77 lines
2.2 KiB
Markdown
# Fuse Transform(Experimental)
|
||
|
||
MMDeploy provides ability to fuse transform for acceleration in some cases.
|
||
|
||
When make inference with SDK, one can edit the pipeline.json to turn on the fuse option.
|
||
|
||
To bring the ability of fuse transform to MMDeploy, you can refer to the use of CVFusion.
|
||
|
||
## 1. Use CVFusion
|
||
|
||
There are two ways to use CVFusion, one is to use the pre-generated kernel code, the other is to generate the code yourself.
|
||
|
||
A)Use pre-generated kernel code
|
||
|
||
i) Download the kernel code from here,unzip it and copy the csrc folder to the mmdeploy root folder.
|
||
|
||
[elena_kernel-20220823.tar.gz](https://github.com/open-mmlab/mmdeploy/files/9399795/elena_kernel-20220823.tar.gz)
|
||
|
||
ii) Add option `-DMMDEPLOY_ELENA_FUSION=ON` when compile MMDeploy.
|
||
|
||
B) Generate kernel code by yourself
|
||
|
||
i) Compile CVFusion
|
||
|
||
```bash
|
||
$ git clone --recursive https://github.com/OpenComputeLab/CVFusion.git
|
||
$ cd CVFusion
|
||
$ bash build.sh
|
||
```
|
||
|
||
```
|
||
# add OpFuse to PATH
|
||
$ export PATH=`pwd`/build/examples/MMDeploy:$PATH
|
||
```
|
||
|
||
ii) Download algorithm codebase
|
||
|
||
```bash
|
||
$ tree -L 1 .
|
||
├── mmdeploy
|
||
├── mmclassification
|
||
├── mmdetection
|
||
├── mmsegmentation
|
||
├── ...
|
||
```
|
||
|
||
iii) Generate kernel code
|
||
|
||
```bash
|
||
python tools/elena/extract_transform.py ..
|
||
# The generated code will be saved to csrc/preprocess/elena/{cpu_kernel}/{cuda_kernel}
|
||
```
|
||
|
||
iv) Add option `-DMMDEPLOY_ELENA_FUSION=ON` when compile MMDeploy.
|
||
|
||
## 2. Model conversion
|
||
|
||
Add `--dump-info` argument when convert a model, this will generate files that SDK needs.
|
||
|
||
```bash
|
||
$ export MODEL_CONFIG=/path/to/mmclassification/configs/resnet/resnet18_8xb32_in1k.py
|
||
$ export MODEL_PATH=https://download.openmmlab.com/mmclassification/v0/resnet/resnet18_8xb32_in1k_20210831-fbbb1da6.pth
|
||
|
||
$ python tools/deploy.py \
|
||
configs/mmcls/classification_onnxruntime_static.py \
|
||
$MODEL_CONFIG \
|
||
$MODEL_PATH \
|
||
tests/data/tiger.jpeg \
|
||
--work-dir resnet18 \
|
||
--device cpu \
|
||
--dump-info
|
||
```
|
||
|
||
## 3. Model Inference
|
||
|
||
If the model preprocess supports fusion, there will be a filed named `fuse_transform` in `pipeline.json`. It represents fusion switch and the default value `false` stands for off. One need to edit this filed to `true` to use the fuse option.
|