mirror of
				https://github.com/PaddlePaddle/FastDeploy.git
				synced 2025-10-31 11:56:44 +08:00 
			
		
		
		
	 534d5b8c8b
			
		
	
	534d5b8c8b
	
	
	
		
			
			* Add tutorials for intel gpu * fix gflags dependency * Update README_CN.md * Update README.md * Update README.md
		
			
				
	
	
		
			55 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| [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、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"});
 | ||
| ```
 |