[Turorials] Add tutorials for intel gpu (#860)

* Add tutorials for intel gpu

* fix gflags dependency

* Update README_CN.md

* Update README.md

* Update README.md
This commit is contained in:
Jason
2022-12-13 10:21:56 +08:00
committed by GitHub
parent 5fc6cf30df
commit 534d5b8c8b
20 changed files with 650 additions and 39 deletions

View File

@@ -0,0 +1,54 @@
[English](README.md) | 中文
# Intel GPU(独立显卡/集成显卡)的使用
FastDeploy通过OpenVINO后端支持Intel GPU显卡的使用。整体在部署模型时与现有FastDeploy部署其它模型的流程类似但在GPU上推理存在以下2个注意事项
- OpenVINO在显卡上推理时要求模型的输入保持固定
- OpenVINO在显卡上支持的OP数量与CPU不一致需要异构执行
目前PaddleClas中所有OP均可使用GPU运行而一些模型如PPYOLOE则需要异构执行。具体使用示例可参考此目录下示例
## 输入固定说明
针对一个视觉模型的推理包含3个环节
- 输入图像图像经过预处理最终得到要输入给模型Runtime的Tensor
- 模型Runtime接收Tensor进行推理得到Runtime的输出Tensor
- 对Runtime的输出Tensor做后处理得到最后的结构化信息如DetectionResult, SegmentationResult等等
而输入固定也即表示要求Runtime接收的Tensor每次数据大小是一样的不能变化。现有FastDeploy中例如PP-OCR, RCNN这些每次输入给模型的大小就是在不断变化的因此暂不支持。而对于PaddleClas模型、PP-YOLOE、PicoDetYOLOv5等每次预处理后的数据大小是一样则可以支持。
同时我们在从框架导出部署模型时可能也未进行Shape固定例如PaddleClas的ResNet50模型虽然推理时一直接收的是[1, 3, 224, 224]大小的数据但实际上导出模型时输入的Shape被设定为了[-1, 3, -1, -1]这也会导致OpenVINO无法确认模型的输入Shape。
FastDeploy提供如下接口帮助来固定模型的Shape
- Python: `RuntimeOption.set_openvino_shape_info()`
- C++: `RuntimeOption::SetOpenVINOShapeInfo()`
## OP支持说明
深度学习模型本质是一个拓扑有向图而图中的每一个节点即为一个算子OP(Operator)。受限于不同推理引擎代码的实现各后端支持的OP数量不一致。对于OpenVINO而言在CPU和GPU上同样支持的OP数量不同这也就意味着同样一个模型使用OpenVINO可以跑在CPU上但不一定能跑在GPU上。以PP-YOLOE为例在GPU上直接跑会出现如下提示即表示`MulticlassNms`这个OP不被GPU支持。
```
RuntimeError: Operation: multiclass_nms3_0.tmp_1 of type MulticlassNms(op::v0) is not supported
```
这种情况下我们可以通过异构的方式来执行模型即让不支持的OP跑在CPU上其余OP仍然在GPU上跑。
通过如下接口的设定,使用异构执行
### Python
```
import fastdeploy as fd
option = fd.RuntimeOption()
option.use_openvino_backend()
option.set_openvino_device("HETERO:GPU,CPU")
option.set_openvino_cpu_operators(["MulticlassNms"])
```
### C++
```
fastdeploy::RuntimeOption option;
option.UseOpenVINOBackend();
option.SetOpenVINODevice("HETERO:GPU,CPU");
option.SetOpenVINOCpuOperators({"MulticlassNms"});
```