Ultralytics YOLO27:
集成

使用 Neural Magic 的 DeepSparse 在 CPU 上部署 Ultralytics YOLOv5,实现 GPU 级性能

借助 Neural Magic 的 DeepSparse,在 CPU 上以 GPU 级性能训练和部署 Ultralytics YOLOv5 模型。实现更快速、更具扩展性的 YOLOv5 部署。

NUNuvola Ladi5 min read
在 CPU 上使用 Neural Magic 的 DeepSparse 部署 Ultralytics YOLOv5

想加速你的 YOLOv5 模型训练和部署吗?我们来帮你!现在介绍我们的最新合作伙伴 Neural Magic。Neural Magic 提供专注于模型峰值性能和工作流简洁性的软件工具,因此我们很自然地携手合作,为你带来更出色的 YOLOv5 部署流程

DeepSparse 是 Neural Magic 的 CPU 推理运行时,它利用神经网络中的稀疏性和低精度算术,在商用硬件上提供卓越性能。例如,与 ONNX Runtime 基准相比,DeepSparse 在同一台机器上运行 YOLOv5s 时可实现 5.8 倍加速

使用 DeepSparse 的 Ultralytics YOLOv5 吞吐量对比

现在,你的深度学习工作负载首次可以在不依赖硬件加速器的复杂性和成本的情况下满足生产环境的性能需求。简单来说,DeepSparse 让你同时获得 GPU 的性能和软件的简洁性:

  1. 灵活部署:使用任意硬件提供商,在云端、数据中心和边缘设备上保持一致运行
  2. 无限扩展性:使用标准 Kubernetes 横向扩展,纵向扩展至数百个核心,或通过无服务器架构实现完全抽象化
  3. 轻松集成:使用简洁的 API 将模型集成到应用中,并在生产环境中对其进行监控

在商用 CPU 上实现 GPU 级性能#

DeepSparse 利用模型稀疏性来提升运行速度。

通过剪枝和量化实现稀疏化,可以在保持较高精度的同时,将执行网络所需的规模和计算量降低一个数量级。DeepSparse 能够感知稀疏性,跳过值为零的乘加运算,并减少前向传递中的计算量。由于稀疏计算受内存带宽限制,DeepSparse 按深度执行网络,将问题拆分为 Tensor Columns,即适合放入缓存的垂直计算条带。

DeepSparse 与 Ultralytics YOLOv5 网络

采用压缩计算、按深度在缓存中执行的稀疏网络,让 DeepSparse 能够在 CPU 上实现 GPU 级性能!

创建在自定义数据上训练的 Ultralytics YOLOv5 稀疏版本#

Neural Magic 的开源模型仓库 SparseZoo 包含每个 YOLOv5 模型的预稀疏化检查点。使用已与 Ultralytics 集成的 SparseML,你可以通过一条 CLI 命令,在自己的数据上微调稀疏检查点。

使用 DeepSparse 部署 Ultralytics YOLOv5#

安装 DeepSparse#

运行以下命令安装 DeepSparse。我们建议你使用包含 Python 的虚拟环境。

pip install deepsparse[server,yolo,onnxruntime]

获取 ONNX 文件#

DeepSparse 接受 ONNX 格式的模型,模型可以通过以下任一方式传入:

  • 指向 ONNX 模型的本地路径
  • 用于标识 SparseZoo 中模型的 SparseZoo 存根

我们将比较标准的稠密 YOLOv5s 与经过剪枝和量化的 YOLOv5s,后者由以下 SparseZoo 存根标识:

zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

部署模型#

DeepSparse 提供了便捷的 API,方便你将模型集成到应用中。

要尝试下面的部署示例,请使用以下命令下载示例图像,并将其保存为 basilica.jpg:

wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg

Python API#

Pipeline 将预处理和输出后处理封装在运行时周围,为你将 DeepSparse 添加到应用中提供简洁的接口。DeepSparse-Ultralytics 集成包含一个开箱即用的 Pipeline,可接受原始图像并输出边界框。

创建 Pipeline 并运行推理:

from deepsparse import Pipeline

# list of images in local filesystem
images = ["basilica.jpg"]

# create Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
    task="yolo",
    model_path=model_stub,
)

# run inference on images, receive bounding boxes + classes
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

如果你在云端运行,可能会遇到 open-cv 找不到 libGL.so.1 的错误。在 Ubuntu 上运行以下命令即可安装它:

apt-get install libgl1-mesa-glx

HTTP 服务器#

DeepSparse Server 构建于广受欢迎的 FastAPI Web 框架和 Uvicorn Web 服务器之上。只需一条 CLI 命令,你就可以使用 DeepSparse 轻松设置模型服务端点。该 Server 支持 DeepSparse 的任何 Pipeline,包括使用 Ultralytics YOLOv5 进行目标检测,让你能够向端点发送原始图像并接收边界框。

使用经过剪枝和量化的 YOLOv5s 启动 Server:

deepsparse.server \
  --task yolo \
  --model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

下面是一个使用 Python requests 包的请求示例:

import requests, json

# list of images for inference (local files on client side)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]

# send request over HTTP to /predict/from_files endpoint
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# response is returned in JSON
annotations = json.loads(resp.text)  # dictionary of annotation results
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

Annotate CLI#

你还可以使用 annotate 命令让引擎将带标注的照片保存到磁盘。尝试使用 --source 0 为实时网络摄像头画面添加标注!

deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpg

运行上述命令会创建 annotation-results 文件夹,并将带标注的图像保存在其中。

带有 Ultralytics YOLOv5 标注的 Basilica

性能基准测试#

我们将使用 DeepSparse 的基准测试脚本,比较 DeepSparse 与 ONNX Runtime 在 YOLOv5s 上的吞吐量。

基准测试在 AWS c6i.8xlarge 实例(16 个核心)上运行。

批量大小为 32 时的性能对比#

ONNX Runtime 基准#

批量大小为 32 时,ONNX Runtime 使用标准稠密 YOLOv5s 达到 42 张图像/秒:

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntime

Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 32 Scenario: sync Throughput (items/sec): 41.9025

DeepSparse 稠密模型性能#

虽然 DeepSparse 在经过优化的稀疏模型上性能最佳,但它在标准稠密 YOLOv5s 上也表现良好。

批量大小为 32 时,DeepSparse 使用标准稠密 YOLOv5s 达到 70 张图像/秒——相比 ORT 性能提升 1.7 倍!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1

Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 32 Scenario: sync Throughput (items/sec): 69.5546

DeepSparse 稀疏模型性能#

对模型应用稀疏化后,DeepSparse 相较于 ONNX Runtime 的性能提升更加显著。

批量大小为 32 时,DeepSparse 使用经过剪枝和量化的 YOLOv5s 达到 241 张图像/秒——相比 ORT 性能提升 5.8 倍!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Batch Size: 32 Scenario: sync Throughput (items/sec): 241.2452

批量大小为 1 时的性能对比#

对于对延迟敏感的批量大小为 1 的场景,DeepSparse 同样能够实现比 ONNX Runtime 更高的速度。

ONNX Runtime 基准#

批量大小为 1 时,ONNX Runtime 使用标准稠密 YOLOv5s 达到 48 张图像/秒。

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntime

Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 1 Scenario: sync Throughput (items/sec): 48.0921

DeepSparse 稀疏模型性能#

对模型应用稀疏化后,DeepSparse 相较于 ONNX Runtime 的性能提升更加显著。

批量大小为 1 时,DeepSparse 使用经过剪枝和量化的 YOLOv5s 达到 135 张图像/秒——相比 ONNX Runtime 性能提升 2.8 倍!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1

Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Batch Size: 1 Scenario: sync Throughput (items/sec): 134.9468

由于 c6i.8xlarge 实例包含 VNNI 指令,如果以 4 个为一组对权重进行剪枝,DeepSparse 的吞吐量还可以进一步提升。

批量大小为 1 时,DeepSparse 使用按 4 个为一组剪枝和量化的 YOLOv5s 达到 180 个项目/秒——相比 ONNX Runtime 性能提升 3.7 倍!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1

Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni Batch Size: 1 Scenario: sync Throughput (items/sec): 179.7375

好了!现在你已经准备好使用 DeepSparse 优化 YOLOv5 部署

开始使用 Ultralytics YOLOv5 和 DeepSparse#

如需联系我们,请加入我们的社区,向我们提出问题并留下评论。查看 Ultralytics YOLOv5 仓库以及完整的 Neural Magic YOLOv5 部署文档

在 Ultralytics,我们与其他初创公司开展商业合作,帮助资助我们的优秀开源工具(例如 YOLOv5)的研发,让所有人都能免费使用这些工具。本文可能包含指向这些合作伙伴的联盟链接。

Explore solutions

用于航拍影像的计算机视觉

用于航拍影像的计算机视觉

使用 Ultralytics YOLO 将无人机和航拍影像转化为针对农业、水产养殖、环境监测、自然保护及地理空间分析的实时洞察。
了解更多
航空航天中的计算机视觉

航空航天中的计算机视觉

借助 Ultralytics YOLO 模型将视觉 AI 引入空中监测。使用计算机视觉解决方案赋能无人机、航空航天工作流、环境保护与地理空间行业。
了解更多

使用 Ultralytics YOLO 模型保护每个站点。视觉 AI 赋能周界监控、威胁检测、车牌识别和工作场所安全。
了解更多
机器人计算机视觉

机器人计算机视觉

借助 Ultralytics YOLO 模型打造更智能的机器。机器人技术中的视觉 AI 可实现自主导航、感知、目标跟踪和实时控制。
了解更多
物流计算机视觉

物流计算机视觉

使用 Ultralytics YOLO 模型提升物流效率。视觉 AI 可实现包裹检测、分拣、车辆跟踪和仓库安全实时监控。
了解更多
零售计算机视觉

零售计算机视觉

使用 Ultralytics YOLO 模型重新构想零售。视觉 AI 为库存跟踪、货架监控、队列管理和更智能的客户洞察提供支持。
了解更多
医疗领域的计算机视觉

医疗领域的计算机视觉

使用 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可实现更快的医学影像处理、更智能的诊断和患者监护。
了解更多
制造业中的计算机视觉

制造业中的计算机视觉

使用 Ultralytics YOLO 模型优化制造业。视觉 AI 可推动质量控制、缺陷检测、PPE 合规和装配线自动化。
了解更多
汽车行业中的计算机视觉

汽车行业中的计算机视觉

使用 Ultralytics YOLO 模型在汽车行业应用计算机视觉。视觉 AI 提升道路安全、驾驶辅助和车辆自动化水平,让道路更加智能。
了解更多
农业中的计算机视觉

农业中的计算机视觉

使用 Ultralytics YOLO 模型将视觉 AI 带入智能农业。为作物监测、牲畜追踪和精准农业提供支持,提升产量与智能化水平。
了解更多
用于航拍影像的计算机视觉

用于航拍影像的计算机视觉

使用 Ultralytics YOLO 将无人机和航拍影像转化为针对农业、水产养殖、环境监测、自然保护及地理空间分析的实时洞察。
了解更多
航空航天中的计算机视觉

航空航天中的计算机视觉

借助 Ultralytics YOLO 模型将视觉 AI 引入空中监测。使用计算机视觉解决方案赋能无人机、航空航天工作流、环境保护与地理空间行业。
了解更多

使用 Ultralytics YOLO 模型保护每个站点。视觉 AI 赋能周界监控、威胁检测、车牌识别和工作场所安全。
了解更多
机器人计算机视觉

机器人计算机视觉

借助 Ultralytics YOLO 模型打造更智能的机器。机器人技术中的视觉 AI 可实现自主导航、感知、目标跟踪和实时控制。
了解更多
物流计算机视觉

物流计算机视觉

使用 Ultralytics YOLO 模型提升物流效率。视觉 AI 可实现包裹检测、分拣、车辆跟踪和仓库安全实时监控。
了解更多
零售计算机视觉

零售计算机视觉

使用 Ultralytics YOLO 模型重新构想零售。视觉 AI 为库存跟踪、货架监控、队列管理和更智能的客户洞察提供支持。
了解更多
医疗领域的计算机视觉

医疗领域的计算机视觉

使用 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可实现更快的医学影像处理、更智能的诊断和患者监护。
了解更多
制造业中的计算机视觉

制造业中的计算机视觉

使用 Ultralytics YOLO 模型优化制造业。视觉 AI 可推动质量控制、缺陷检测、PPE 合规和装配线自动化。
了解更多
汽车行业中的计算机视觉

汽车行业中的计算机视觉

使用 Ultralytics YOLO 模型在汽车行业应用计算机视觉。视觉 AI 提升道路安全、驾驶辅助和车辆自动化水平,让道路更加智能。
了解更多
农业中的计算机视觉

农业中的计算机视觉

使用 Ultralytics YOLO 模型将视觉 AI 带入智能农业。为作物监测、牲畜追踪和精准农业提供支持,提升产量与智能化水平。
了解更多
用于航拍影像的计算机视觉

用于航拍影像的计算机视觉

使用 Ultralytics YOLO 将无人机和航拍影像转化为针对农业、水产养殖、环境监测、自然保护及地理空间分析的实时洞察。
了解更多
航空航天中的计算机视觉

航空航天中的计算机视觉

借助 Ultralytics YOLO 模型将视觉 AI 引入空中监测。使用计算机视觉解决方案赋能无人机、航空航天工作流、环境保护与地理空间行业。
了解更多

使用 Ultralytics YOLO 模型保护每个站点。视觉 AI 赋能周界监控、威胁检测、车牌识别和工作场所安全。
了解更多
机器人计算机视觉

机器人计算机视觉

借助 Ultralytics YOLO 模型打造更智能的机器。机器人技术中的视觉 AI 可实现自主导航、感知、目标跟踪和实时控制。
了解更多
物流计算机视觉

物流计算机视觉

使用 Ultralytics YOLO 模型提升物流效率。视觉 AI 可实现包裹检测、分拣、车辆跟踪和仓库安全实时监控。
了解更多
零售计算机视觉

零售计算机视觉

使用 Ultralytics YOLO 模型重新构想零售。视觉 AI 为库存跟踪、货架监控、队列管理和更智能的客户洞察提供支持。
了解更多
医疗领域的计算机视觉

医疗领域的计算机视觉

使用 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可实现更快的医学影像处理、更智能的诊断和患者监护。
了解更多
制造业中的计算机视觉

制造业中的计算机视觉

使用 Ultralytics YOLO 模型优化制造业。视觉 AI 可推动质量控制、缺陷检测、PPE 合规和装配线自动化。
了解更多
汽车行业中的计算机视觉

汽车行业中的计算机视觉

使用 Ultralytics YOLO 模型在汽车行业应用计算机视觉。视觉 AI 提升道路安全、驾驶辅助和车辆自动化水平,让道路更加智能。
了解更多
农业中的计算机视觉

农业中的计算机视觉

使用 Ultralytics YOLO 模型将视觉 AI 带入智能农业。为作物监测、牲畜追踪和精准农业提供支持,提升产量与智能化水平。
了解更多

让我们共同构建 AI 的未来!

开启你的机器学习未来之旅