2022-08-03 15:25:36 +08:00
# How to use prebuilt package on Windows10
- [How to use prebuilt package on Windows10 ](#how-to-use-prebuilt-package-on-windows10 )
- [Prerequisite ](#prerequisite )
- [ONNX Runtime ](#onnx-runtime )
- [TensorRT ](#tensorrt )
- [Model Convert ](#model-convert )
- [ONNX Runtime Example ](#onnx-runtime-example )
- [TensorRT Example ](#tensorrt-example )
- [Model Inference ](#model-inference )
- [Backend Inference ](#backend-inference )
- [ONNXRuntime ](#onnxruntime )
- [TensorRT ](#tensorrt-1 )
- [Python SDK ](#python-sdk )
- [ONNXRuntime ](#onnxruntime-1 )
- [TensorRT ](#tensorrt-2 )
- [C SDK ](#c-sdk )
- [ONNXRuntime ](#onnxruntime-2 )
- [TensorRT ](#tensorrt-3 )
- [Troubleshooting ](#troubleshooting )
______________________________________________________________________
2023-06-30 20:08:09 +08:00
This tutorial takes `mmdeploy-1.2.0-windows-amd64.zip` and `mmdeploy-1.2.0-windows-amd64-cuda11.3.zip` as examples to show how to use the prebuilt packages. The former support onnxruntime cpu inference, the latter support onnxruntime-gpu and tensorrt inference.
2022-08-03 15:25:36 +08:00
The directory structure of the prebuilt package is as follows, where the `dist` folder is about model converter, and the `sdk` folder is related to model inference.
```
.
2023-04-03 11:11:47 +08:00
├── build_sdk.ps1
├── example
├── include
├── install_opencv.ps1
├── lib
├── README.md
├── set_env.ps1
└── thirdparty
2022-08-03 15:25:36 +08:00
```
## Prerequisite
In order to use the prebuilt package, you need to install some third-party dependent libraries.
2023-04-03 11:11:47 +08:00
1. Follow the [get_started ](../get_started.md ) documentation to create a virtual python environment and install pytorch, torchvision and mmcv. To use the C interface of the SDK, you need to install [vs2019+ ](https://visualstudio.microsoft.com/ ), [OpenCV ](https://github.com/opencv/opencv/releases ).
2022-08-03 15:25:36 +08:00
:point_right: It is recommended to use `pip` instead of `conda` to install pytorch and torchvision
2. Clone the mmdeploy repository
```bash
2023-04-06 12:07:42 +08:00
git clone -b main https://github.com/open-mmlab/mmdeploy.git
2022-08-03 15:25:36 +08:00
```
:point_right: The main purpose here is to use the configs, so there is no need to compile `mmdeploy` .
2023-04-28 20:49:22 +08:00
3. Install mmpretrain
2022-08-03 15:25:36 +08:00
```bash
2023-04-28 20:49:22 +08:00
git clone -b main https://github.com/open-mmlab/mmpretrain.git
cd mmpretrain
2022-08-03 15:25:36 +08:00
pip install -e .
```
4. Prepare a PyTorch model as our example
2023-04-28 20:49:22 +08:00
Download the pth [resnet18_8xb32_in1k_20210831-fbbb1da6.pth ](https://download.openmmlab.com/mmclassification/v0/resnet/resnet18_8xb32_in1k_20210831-fbbb1da6.pth ). The corresponding config of the model is [resnet18_8xb32_in1k.py ](https://github.com/open-mmlab/mmpretrain/blob/main/configs/resnet/resnet18_8xb32_in1k.py )
2022-08-03 15:25:36 +08:00
After the above work is done, the structure of the current working directory should be:
```
.
2023-04-28 20:49:22 +08:00
|-- mmpretrain
2022-08-03 15:25:36 +08:00
|-- mmdeploy
|-- resnet18_8xb32_in1k_20210831-fbbb1da6.pth
```
### ONNX Runtime
In order to use `ONNX Runtime` backend, you should also do the following steps.
2023-03-29 20:57:21 +08:00
5. Install `mmdeploy` (Model Converter) and `mmdeploy_runtime` (SDK Python API).
2022-08-03 15:25:36 +08:00
```bash
2023-06-30 20:08:09 +08:00
pip install mmdeploy==1.2.0
pip install mmdeploy-runtime==1.2.0
2022-08-03 15:25:36 +08:00
```
:point_right: If you have installed it before, please uninstall it first.
6. Install onnxruntime package
```
pip install onnxruntime==1.8.1
```
7. Download [`onnxruntime` ](https://github.com/microsoft/onnxruntime/releases/tag/v1.8.1 ), and add environment variable.
As shown in the figure, add the lib directory of onnxruntime to the `PATH` .

:exclamation: Restart powershell to make the environment variables setting take effect. You can check whether the settings are in effect by `echo $env:PATH` .
2023-06-30 20:08:09 +08:00
8. Download SDK C/cpp Library mmdeploy-1.2.0-windows-amd64.zip
2023-04-03 11:11:47 +08:00
2022-08-03 15:25:36 +08:00
### TensorRT
In order to use `TensorRT` backend, you should also do the following steps.
2023-03-29 20:57:21 +08:00
5. Install `mmdeploy` (Model Converter) and `mmdeploy_runtime` (SDK Python API).
2022-08-03 15:25:36 +08:00
```bash
2023-06-30 20:08:09 +08:00
pip install mmdeploy==1.2.0
pip install mmdeploy-runtime-gpu==1.2.0
2022-08-03 15:25:36 +08:00
```
:point_right: If you have installed it before, please uninstall it first.
6. Install TensorRT related package and set environment variables
- CUDA Toolkit 11.1
- TensorRT 8.2.3.0
- cuDNN 8.2.1.0
Add the runtime libraries of TensorRT and cuDNN to the `PATH` . You can refer to the path setting of onnxruntime. Don't forget to install python package of TensorRT.
:exclamation: Restart powershell to make the environment variables setting take effect. You can check whether the settings are in effect by echo `$env:PATH` .
:exclamation: It is recommended to add only one version of the TensorRT/cuDNN runtime libraries to the `PATH` . It is better not to copy the runtime libraries of TensorRT/cuDNN to the cuda directory in `C:\` .
7. Install pycuda by `pip install pycuda`
2023-06-30 20:08:09 +08:00
8. Download SDK C/cpp Library mmdeploy-1.2.0-windows-amd64-cuda11.3.zip
2023-04-03 11:11:47 +08:00
2022-08-03 15:25:36 +08:00
## Model Convert
### ONNX Runtime Example
The following describes how to use the prebuilt package to do model conversion based on the previous downloaded pth.
After preparation work, the structure of the current working directory should be:
```
..
2023-06-30 20:08:09 +08:00
|-- mmdeploy-1.2.0-windows-amd64
2023-04-28 20:49:22 +08:00
|-- mmpretrain
2022-08-03 15:25:36 +08:00
|-- mmdeploy
`-- resnet18_8xb32_in1k_20210831-fbbb1da6.pth
```
Model conversion can be performed like below:
```python
from mmdeploy.apis import torch2onnx
from mmdeploy.backend.sdk.export_info import export2SDK
2023-04-28 20:49:22 +08:00
img = 'mmpretrain/demo/demo.JPEG'
2022-08-03 15:25:36 +08:00
work_dir = 'work_dir/onnx/resnet'
save_file = 'end2end.onnx'
2023-04-28 20:49:22 +08:00
deploy_cfg = 'mmdeploy/configs/mmpretrain/classification_onnxruntime_dynamic.py'
model_cfg = 'mmpretrain/configs/resnet/resnet18_8xb32_in1k.py'
2022-08-03 15:25:36 +08:00
model_checkpoint = 'resnet18_8xb32_in1k_20210831-fbbb1da6.pth'
device = 'cpu'
# 1. convert model to onnx
torch2onnx(img, work_dir, save_file, deploy_cfg, model_cfg,
model_checkpoint, device)
# 2. extract pipeline info for sdk use (dump-info)
2022-10-09 14:26:14 +08:00
export2SDK(deploy_cfg, model_cfg, work_dir, pth=model_checkpoint, device=device)
2022-08-03 15:25:36 +08:00
```
The structure of the converted model directory:
```bash
.\work_dir\
`-- onnx
`-- resnet
|-- deploy.json
|-- detail.json
|-- end2end.onnx
`-- pipeline.json
```
### TensorRT Example
The following describes how to use the prebuilt package to do model conversion based on the previous downloaded pth.
After installation of mmdeploy-tensorrt prebuilt package, the structure of the current working directory should be:
```
..
2023-06-30 20:08:09 +08:00
|-- mmdeploy-1.2.0-windows-amd64-cuda11.3
2023-04-28 20:49:22 +08:00
|-- mmpretrain
2022-08-03 15:25:36 +08:00
|-- mmdeploy
`-- resnet18_8xb32_in1k_20210831-fbbb1da6.pth
```
Model conversion can be performed like below:
```python
from mmdeploy.apis import torch2onnx
from mmdeploy.apis.tensorrt import onnx2tensorrt
from mmdeploy.backend.sdk.export_info import export2SDK
import os
2023-04-28 20:49:22 +08:00
img = 'mmpretrain/demo/demo.JPEG'
2022-08-03 15:25:36 +08:00
work_dir = 'work_dir/trt/resnet'
save_file = 'end2end.onnx'
2023-04-28 20:49:22 +08:00
deploy_cfg = 'mmdeploy/configs/mmpretrain/classification_tensorrt_static-224x224.py'
model_cfg = 'mmpretrain/configs/resnet/resnet18_8xb32_in1k.py'
2022-08-03 15:25:36 +08:00
model_checkpoint = 'resnet18_8xb32_in1k_20210831-fbbb1da6.pth'
device = 'cpu'
# 1. convert model to IR(onnx)
torch2onnx(img, work_dir, save_file, deploy_cfg, model_cfg,
model_checkpoint, device)
# 2. convert IR to tensorrt
onnx_model = os.path.join(work_dir, save_file)
save_file = 'end2end.engine'
model_id = 0
device = 'cuda'
onnx2tensorrt(work_dir, save_file, model_id, deploy_cfg, onnx_model, device)
# 3. extract pipeline info for sdk use (dump-info)
2022-10-09 14:26:14 +08:00
export2SDK(deploy_cfg, model_cfg, work_dir, pth=model_checkpoint, device=device)
2022-08-03 15:25:36 +08:00
```
The structure of the converted model directory:
```
.\work_dir\
`-- trt
`-- resnet
|-- deploy.json
|-- detail.json
|-- end2end.engine
|-- end2end.onnx
`-- pipeline.json
```
## Model Inference
You can obtain two model folders after model conversion.
```
.\work_dir\onnx\resnet
.\work_dir\trt\resnet
```
The structure of current working directory:
```
.
2023-06-30 20:08:09 +08:00
|-- mmdeploy-1.2.0-windows-amd64
|-- mmdeploy-1.2.0-windows-amd64-cuda11.3
2023-04-28 20:49:22 +08:00
|-- mmpretrain
2022-08-03 15:25:36 +08:00
|-- mmdeploy
|-- resnet18_8xb32_in1k_20210831-fbbb1da6.pth
`-- work_dir
```
### Backend Inference
:exclamation: It should be emphasized that `inference_model` is not for deployment, but shields the difference of backend inference api(`TensorRT`, `ONNX Runtime` etc.). The main purpose of this api is to check whether the converted model can be inferred normally.
#### ONNXRuntime
```python
from mmdeploy.apis import inference_model
2023-04-28 20:49:22 +08:00
model_cfg = 'mmpretrain/configs/resnet/resnet18_8xb32_in1k.py'
deploy_cfg = 'mmdeploy/configs/mmpretrain/classification_onnxruntime_dynamic.py'
2022-08-03 15:25:36 +08:00
backend_files = ['work_dir/onnx/resnet/end2end.onnx']
2023-04-28 20:49:22 +08:00
img = 'mmpretrain/demo/demo.JPEG'
2022-08-03 15:25:36 +08:00
device = 'cpu'
result = inference_model(model_cfg, deploy_cfg, backend_files, img, device)
```
#### TensorRT
```python
from mmdeploy.apis import inference_model
2023-04-28 20:49:22 +08:00
model_cfg = 'mmpretrain/configs/resnet/resnet18_8xb32_in1k.py'
deploy_cfg = 'mmdeploy/configs/mmpretrain/classification_tensorrt_static-224x224.py'
2022-08-03 15:25:36 +08:00
backend_files = ['work_dir/trt/resnet/end2end.engine']
2023-04-28 20:49:22 +08:00
img = 'mmpretrain/demo/demo.JPEG'
2022-08-03 15:25:36 +08:00
device = 'cuda'
result = inference_model(model_cfg, deploy_cfg, backend_files, img, device)
```
### Python SDK
The following describes how to use the SDK's Python API for inference
#### ONNXRuntime
```bash
2023-04-28 20:49:22 +08:00
python .\mmdeploy\demo\python\image_classification.py cpu .\work_dir\onnx\resnet\ .\mmpretrain\demo\demo.JPEG
2022-08-03 15:25:36 +08:00
```
#### TensorRT
2023-04-03 11:11:47 +08:00
```bash
2023-04-28 20:49:22 +08:00
python .\mmdeploy\demo\python\image_classification.py cuda .\work_dir\trt\resnet\ .\mmpretrain\demo\demo.JPEG
2022-08-03 15:25:36 +08:00
```
### C SDK
The following describes how to use the SDK's C API for inference
#### ONNXRuntime
2023-04-03 11:11:47 +08:00
1. Add environment variables
2022-08-03 15:25:36 +08:00
2023-04-03 11:11:47 +08:00
Refer to the README.md in sdk folder
2022-08-03 15:25:36 +08:00
2023-04-03 11:11:47 +08:00
2. Build examples
2022-08-03 15:25:36 +08:00
2023-04-03 11:11:47 +08:00
Refer to the README.md in sdk folder
2022-08-03 15:25:36 +08:00
3. Inference:
It is recommended to use `CMD` here.
2023-06-30 20:08:09 +08:00
Under `mmdeploy-1.2.0-windows-amd64\\example\\cpp\\build\\Release` directory:
2022-08-03 15:25:36 +08:00
```
2023-04-28 20:49:22 +08:00
.\image_classification.exe cpu C:\workspace\work_dir\onnx\resnet\ C:\workspace\mmpretrain\demo\demo.JPEG
2022-08-03 15:25:36 +08:00
```
#### TensorRT
2023-04-03 11:11:47 +08:00
1. Add environment variables
2022-08-03 15:25:36 +08:00
2023-04-03 11:11:47 +08:00
Refer to the README.md in sdk folder
2022-08-03 15:25:36 +08:00
2023-04-03 11:11:47 +08:00
2. Build examples
2022-08-03 15:25:36 +08:00
2023-04-03 11:11:47 +08:00
Refer to the README.md in sdk folder
2022-08-03 15:25:36 +08:00
3. Inference
It is recommended to use `CMD` here.
2023-06-30 20:08:09 +08:00
Under `mmdeploy-1.2.0-windows-amd64-cuda11.3\\example\\cpp\\build\\Release` directory
2022-08-03 15:25:36 +08:00
```
2023-04-28 20:49:22 +08:00
.\image_classification.exe cuda C:\workspace\work_dir\trt\resnet C:\workspace\mmpretrain\demo\demo.JPEG
2022-08-03 15:25:36 +08:00
```
## Troubleshooting
If you encounter problems, please refer to [FAQ ](../faq.md )