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

想加速你的 YOLOv5 模型训练和部署吗?我们来帮你!现在介绍我们的最新合作伙伴 Neural Magic。Neural Magic 提供专注于模型峰值性能和工作流简洁性的软件工具,因此我们很自然地携手合作,为你带来更出色的 YOLOv5 部署流程。
DeepSparse 是 Neural Magic 的 CPU 推理运行时,它利用神经网络中的稀疏性和低精度算术,在商用硬件上提供卓越性能。例如,与 ONNX Runtime 基准相比,DeepSparse 在同一台机器上运行 YOLOv5s 时可实现 5.8 倍加速!

现在,你的深度学习工作负载首次可以在不依赖硬件加速器的复杂性和成本的情况下满足生产环境的性能需求。简单来说,DeepSparse 让你同时获得 GPU 的性能和软件的简洁性:
- 灵活部署:使用任意硬件提供商,在云端、数据中心和边缘设备上保持一致运行
- 无限扩展性:使用标准 Kubernetes 横向扩展,纵向扩展至数百个核心,或通过无服务器架构实现完全抽象化
- 轻松集成:使用简洁的 API 将模型集成到应用中,并在生产环境中对其进行监控
在商用 CPU 上实现 GPU 级性能#
DeepSparse 利用模型稀疏性来提升运行速度。
通过剪枝和量化实现稀疏化,可以在保持较高精度的同时,将执行网络所需的规模和计算量降低一个数量级。DeepSparse 能够感知稀疏性,跳过值为零的乘加运算,并减少前向传递中的计算量。由于稀疏计算受内存带宽限制,DeepSparse 按深度执行网络,将问题拆分为 Tensor Columns,即适合放入缓存的垂直计算条带。

采用压缩计算、按深度在缓存中执行的稀疏网络,让 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.jpgPython 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-glxHTTP 服务器#
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 文件夹,并将带标注的图像保存在其中。

性能基准测试#
我们将使用 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 onnxruntimeOriginal 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 1Original 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 1Original 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 onnxruntimeOriginal 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 1Original 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 1Original 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)的研发,让所有人都能免费使用这些工具。本文可能包含指向这些合作伙伴的联盟链接。









