提升PyTorch模型在Intel硬件上的推理性能

随着深度学习模型在各种应用中的广泛部署,对模型推理的准确性和性能要求也越来越高。为了应对这一挑战,可以使用加速推理技术,通过专用硬件和/或库来加快推理过程。英特尔与微软合作,通过将OpenVINO™与Torch-ORT集成,重新定义了在Intel®硬件上的推理,同时保持了原生PyTorch体验。

OpenVINO™与Torch-ORT的集成

OpenVINO™与Torch-ORT的集成为PyTorch开发者提供了在他们选择的框架内工作的能力,同时还能获得OpenVINO™工具包的速度和推理能力,这是通过内联优化实现的,用于加速PyTorch应用程序。这种集成的好处包括:

  • 简单安装:使用pip安装OpenVINO™与Torch-ORT集成。
  • 简单API:无需重构现有代码,只需导入OpenVINO™与Torch-ORT集成,设置所需的目标设备以运行推理,并包装模型。
  • 性能提升:与原生PyTorch相比,实现更高的推理性能。
  • 支持Intel设备:包括Intel® CPU、Intel®集成GPU、Intel® VPU。
  • 内联模型转换:无需显式模型转换步骤。

在本案例研究中,将讨论如何使用OpenVINO™与Torch-ORT集成重新训练PyTorchYOLOv7模型,并在Google Colab上评估与原生PyTorch相比的性能。

性能提升示例

本文的目标是比较在Intel® CPU上的推理性能,因此将此分为两个笔记本:第一个笔记本中,使用GPU计算来训练YOLOv7。在训练模型后将其保存到Google Drive中,以便第二个笔记本用于推理。在第二个笔记本中,在Intel® CPU计算上运行推理,以基准测试原生PyTorch性能与OpenVINO™与Torch-ORT集成的性能。

所有相关的代码都可以在中找到。

GPU与CPU推理成本比较

通常来说,GPU的性能通常是CPU的3倍,但这会带来显著的成本增加。例如,AWS第三代Intel® Xeon®可扩展(Ice Lake)实例-c6i.2xlarge的按需成本为每小时0.34美元,而基于NVIDIA GPU的p3.2xlarge实例的成本为每小时3.06美元。如果能在运行推理工作负载时,以CPU的成本节省获得加速的推理性能提升,在财务上将处于更好的位置。

训练YOLOv7以发现推理性能

要重新训练YOLOv7模型,请参考博客文章“如何在自定义数据集上训练YOLOv7模型”。

评估YOLOv7推理性能笔记本

让直接进入评估推理性能笔记本。如果还没有用自己的自定义数据集重新训练YOLOv7模型,已经在中为此基准测试提供了一个模型(best.pt)。

一旦访问了推理笔记本,建议将其保存一份副本。可以通过选择文件>另存为副本在驱动器中来做到这一点,以将笔记本分叉到自己的Google Drive中,这样就可以保存更改。

还需要确认运行时是CPU,为此笔记本。转到运行时>更改运行时类型>硬件加速器>无。

在Colab笔记本中访问计算机视觉模型

在训练笔记本中,在自定义数据集上训练了模型,然后将该模型保存到Google Drive中。在推理笔记本中,在Colab笔记本中挂载了Google Drive,这样就可以轻松地从笔记本内部访问模型。

注意:如果没有重新训练的模型,可以使用中的预训练模型。它位于/content/yolov7/runs/best.pt。

使用原生PyTorch评估YOLOv7性能

首先使用CPU上的原生PyTorch评估了YOLOv7模型的性能。已经调整了下面的自定义参数来实现这一点。有关更多详细信息,请参见detect.py接受的参数。

# 对detect.py进行了以下2个小改动以在CPU上运行: # 注释掉了detect.py中的第38行和第39行,因为代码使用了jit trace。 # 在第84行和第85行添加了代码以启用设备类型为"cpu" # 现在,进入yolov7目录,并使用新的detect_without_jit.py文件对样本图像进行评估: 如果没有从之前的训练笔记本中获得训练好的模型,运行此命令: !python detect_without_jit.py --weights /content/yolov7/runs/best.pt --conf 0.25 --img-size 640 --source UWH -6 /test/images/DJI_0021_mp4-32_jpg.rf.0d9b746d8896d042b55a14c8303b4f36.jpg 如果有保存在Google Drive中想要使用的已训练模型,运行此命令: !python detect_without_jit.py --weights /content/gdrive/MyDrive/TrainedModel/best.pt --conf 0.25 --img-size 640 --source UWH -6 /test/images/DJI_0021_mp4-32_jpg.rf.0d9b746d8896d042b55a14c8303b4f36.jpg

在这里可以看到使用原生PyTorch的结果:

4 black-hats, 9 bodysurfaces, Done. (901.6ms) Inference, (19.1ms) NMS INFERENCE TIME WITH NATIVE PYTORCH IS 901.6 ms The image with the result is saved in: runs/detect/exp/DJI_0021_mp4-32_jpg.rf.0d9b746d8896d042b55a14c8303b4f36.jpg Done. (2.070s)

使用OpenVINO™集成Torch-ORT评估YOLOv7性能

现在将进行相同的评估,但使用OpenVINO™集成Torch-ORT。首先,需要pip安装torch-ort-infer包:

# 安装torch-ort-infer !pip install torch-ort-infer

已经调整了下面的自定义参数来实现这一点。有关更多详细信息,请参见detect.py接受的参数。在这里,只添加了2行代码,就可以使用OpenVINO™集成Torch-ORT提升性能:

line 17: from torch_ort import ORTInferenceModule line 71: model = ORTInferenceModule(model)

这些更改已进行并复制到一个新文件detect_ort.py中。现在使用新的detect_ort.py文件对样本图像进行评估:

如果没有从之前的训练笔记本中获得训练好的模型,运行此命令: !python detect_ort.py --weights /content/yolov7/runs/best.pt --conf 0.25 --img-size 640 --source UWH -6 /test/images/DJI_0021_mp4-32_jpg.rf.0d9b746d8896d042b55a14c8303b4f36.jpg 如果有保存在Google Drive中想要使用的已训练模型,运行此命令: !python detect_ort.py --weights /content/gdrive/MyDrive/TrainedModel/best.pt --conf 0.25 --img-size 640 --source UWH -6 /test/images/DJI_0021_mp4-32_jpg.rf.0d9b746d8896d042b55a14c8303b4f36.jpg

在这里可以看到使用OpenVINO™集成Torch-ORT的结果:

4 black-hats, 9 bodysurfaces, Done. (778.2ms) Inference, (1.6ms) NMS INFERENCE TIME WITH OPENVINO™ INTEGRATION WITH TORCH-ORT IS 778.2 ms The image with the result is saved in: runs/detect/exp2/DJI_0021_mp4-32_jpg.rf.0d9b746d8896d042b55a14c8303b4f36.jpg Done. (8.239s)

Google Colab目前使用的是具有每个插座2个核心的Intel® Xeon CPU,并且是一个共享硬件资源,但仍然可以看到使用OpenVINO™集成Torch-ORT对YOLOV7模型的性能有大约13%的提升。当然,值得注意的是,只添加了2行额外的代码就实现了这一点。如上所述的测试图像的结果,没有准确性的下降。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485