Files
FastDeploy/tutorials/intel_gpu/README_CN.md
T
Jason 534d5b8c8b [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
2022-12-13 10:21:56 +08:00

55 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[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"});
```