Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 2.88 KB

README_CN.md

File metadata and controls

54 lines (38 loc) · 2.88 KB

English | 中文

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、PicoDet,YOLOv5等,每次预处理后的数据大小是一样,则可以支持。

同时,我们在从框架导出部署模型时,可能也未进行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"});