ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用 Neural Magic DeepSparse 在 CPU 上部署 YOLOv5:从剪枝量化模型到稀疏推理的完整实战指南

用 Neural Magic DeepSparse 在 CPU 上部署 YOLOv5:从剪枝量化模型到稀疏推理的完整实战指南 用 Neural Magic DeepSparse 在 CPU 上部署 YOLOv5从剪枝量化模型到稀疏推理的完整实战指南【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics本指南以 Ultralytics 官方教程文档 neural-magic-pruning-quantization.md 为主体系统讲解如何借助 Neural Magic 的 DeepSparse 推理运行时把 YOLOv5 目标检测模型以剪枝pruning 量化quantization后的稀疏形态部署到纯 CPU 环境实现接近 GPU 的推理吞吐。读完本文你将掌握 DeepSparse 的安装、SparseZoo 模型获取、三种服务化接入方式Python Pipeline、HTTP Server、Annotate CLI以及基于官方 benchmark 脚本的吞吐量对比方法论并能在生产决策中判断“软件交付的 AI”是否适合你的无加速卡部署场景。为什么在 CPU 上部署 YOLOv5 值得关注 DeepSparse传统观点认为深度学习推理必须依赖 GPU、NPU 等专用硬件加速器。而 DeepSparse 定位为“software-delivered AI”——一个在 CPU 上拥有异常出色性能的推理运行时。Ultralytics 官方教程给出的对比示例是同一台机器上DeepSparse 处理 YOLOv5s 相比 ONNX RuntimeORT基线可带来约 5.8 倍的加速。该方案的价值主张可以归纳为三点这也是其在云、数据中心与边缘场景中被采用的原因灵活的部署Flexible Deployments跨云、数据中心和边缘保持一致运行体验硬件供应商从 Intel 到 AMD 再到 ARM 均可使用无需绑定特定加速卡。无限扩展Infinite Scalability垂直方向上可扩展到数百个 CPU 核心水平方向上可配合标准 Kubernetes 调度或以 Serverless 方式完全抽象化。易于集成Easy Integration提供干净简洁的 API便于把模型接入应用并在生产环境中做监控。需要注意的是这一节讲述的是教程文档中记录的方案定位与基准结论具体加速比会随 CPU 微架构、批大小与模型稀疏度变化。从当前仓库的配套文档 docs/en/integrations/neural-magic.md 可以看到Ultralytics 同时把该集成推广到 YOLO11/YOLO26 等新一代模型上本教程聚焦于经典 YOLOv5 系列。DeepSparse 的加速原理稀疏感知与 Tensor ColumnsDeepSparse 的性能优势来自对**模型稀疏性model sparsity**的充分利用。通过剪枝与量化实现的稀疏化sparsification是一个被广泛研究的思路它可以数量级地缩小网络所需的存储与计算量同时保持较高精度。DeepSparse 是稀疏感知的运行时即在前向推理过程中会跳过被置零的参数从而压缩一次 forward pass 的总体计算量。由于稀疏后的计算变为内存受限memory bound瓶颈从算力转移到数据搬运。为此 DeepSparse 采用深度方向depth-wise逐网络执行策略把网络切分为所谓的Tensor Columns张量列——即垂直的计算条带使其完整适配 CPU 各级缓存。缓存命中率的提升极大减少了访存开销让稀疏化网络在普通 CPU 上获得接近 GPU 级别的性能。教程进一步指出若目标 CPU 具备VNNIVector Neural Network Instructions指令例如 AWSc6i.8xlarge使用的 Ice Lake 及更新架构将权重按 4 的倍数块剪枝block-of-4 pruning还能把吞吐进一步推高这对应后文 benchmark 中的pruned35_quant-none-vnni模型桩。如何得到针对自有数据训练的稀疏 YOLOv5SparseZoo 与 SparseML要在自己的数据上获得一个可被 DeepSparse 高效执行的稀疏模型Neural Magic 提供了完整的开源工具链SparseZooNeural Magic 的开源模型仓库其中包含各型号 YOLOv5 模型预先稀疏化好的检查点pre-sparsified checkpoints通过 SparseZoo stub 即可索引。SparseML与 Ultralytics 深度集成的模型优化库可以用单条 CLI 命令把一个 SparseZoo 稀疏检查点在自己的数据上做微调fine-tune从而得到“稀疏骨架 自有数据语义”的模型。关于剪枝、稀疏化的背景知识与动手流程可参考本仓库同目录教程 model-pruning-and-sparsity.md其中介绍了先建立稠密基线如python val.py --weights yolov5s.pt再剪枝对比的通用方法论。对于 YOLOv5 的模型结构本身可查阅 yolov5.yaml其scales字段定义了 n/s/m/l/x 各尺寸的深度与宽度缩放系数——教程中的示例基准模型 YOLOv5s 即对应s: [0.33, 0.50, 1024]一组缩放比例从 P3/8 到 P5/32 三尺度输出由 v5 head 的 Detect 层完成。环境准备安装 DeepSparse 与排障教程建议在 Python 虚拟环境中安装 DeepSparse并带上 server、yolo 与 onnxruntime 三个 extraspip install deepsparse[server,yolo,onnxruntime]其中yoloextra 提供开箱即用的 YOLO 推理管线与 annotate 等工具serverextra 用于启动 HTTP 推理服务onnxruntime主要用于 benchmark 时作为基线引擎对比见后文-e onnxruntime参数。一个常见的云端问题在容器/无头云环境中OpenCV 可能报错找不到libGL.so.1。教程给出两种解法任选其一# 方案一安装系统缺失的动态库 apt-get install libgl1 # 方案二改用无 GUI 依赖的无头版 Ultralytics 包 pip install ultralytics-opencv-headless准备 ONNX 模型两种合法的输入来源DeepSparse 接受ONNX 格式的模型且来源可以是两种形式之一SparseZoo stub一个标识 SparseZoo 中某个 ONNX 文件的索引字符串本地文件路径文件系统中已存在的 ONNX 模型。教程示例使用稠密与“剪枝量化”两种官方 YOLOv5s 检查点对应的 SparseZoo stub 为# 标准稠密 YOLOv5s性能对比的 ORT / Dense 基线 zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none # 65% 剪枝 量化的 YOLOv5sDeepSparse 主推的稀疏模型 zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none如果你希望把自己训练的 PyTorch 权重转换为 ONNX 后交给 DeepSparse可先参考仓库的 ONNX 导出文档 model-export.md其核心命令为python export.py --weights yolov5s.pt --include onnx导出会生成yolov5s.onnx约 28 MB之后即可将该本地路径作为model_path传入 DeepSparse。Ultralytics 引擎层对 ONNX 的导出参数如opset、dynamic、simplify有统一管理具体可在 engine/exporter.py 中查看各格式支持的参数矩阵。三种方式把 YOLOv5 接入应用先下载一张示例图片供后续演示wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg1) Python APIPipeline 一键推理Pipeline把前处理pre-processing与后处理output post-processing封装在运行时之外为把 DeepSparse 接入业务应用提供干净接口。DeepSparse 与 Ultralytics 的集成包含一个现成的yoloPipeline直接接收原始图片、输出检测框坐标与类别from deepsparse import Pipeline # 本地文件系统中的图片列表 images [basilica.jpg] # 创建 Pipeline此处加载 65% 剪枝 量化的 YOLOv5s model_stub zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none yolo_pipeline Pipeline.create( taskyolo, model_pathmodel_stub, ) # 执行推理返回检测框与类别 pipeline_outputs yolo_pipeline(imagesimages, iou_thres0.6, conf_thres0.001) print(pipeline_outputs)其中iou_thres与conf_thres与 YOLOv5 语义一致分别控制 NMS 的 IoU 阈值与置信度阈值。若在云端运行遇到libGL.so.1缺失错误回到上文两种排障方案处理。2) HTTP Server一条命令拉起服务化端点DeepSparse Server 构建在 FastAPI 与 Uvicorn 之上一条 CLI 命令即可把任意 DeepSparse Pipeline 暴露为模型服务端点——包括 YOLOv5 目标检测客户端直接发送原始图片即可收到检测框deepsparse.server \ --task yolo \ --model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none服务启动后用 Pythonrequests向/predict/from_files端点发送图片请求默认端口 5543import json from contextlib import ExitStack import requests # 客户端本地待推理的图片列表 path [basilica.jpg] # 通过 HTTP 向 /predict/from_files 发送请求 url http://0.0.0.0:5543/predict/from_files with ExitStack() as stack: files [(request, stack.enter_context(open(img, rb))) for img in path] resp requests.post(urlurl, filesfiles) # 响应以 JSON 返回 annotations json.loads(resp.text) # 注解结果字典 bounding_boxes annotations[boxes] labels annotations[labels]3) 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文件夹并将带边界框与类别标签的标注图片保存在其中适合快速核对模型的实际检出效果。Benchmark用官方脚本量化稀疏收益DeepSparse 的 CLI 提供了deepsparse.benchmark工具可直接对比同一模型在 DeepSparse 与 ONNX Runtime 引擎上的吞吐。教程给出的基准结果来自 AWSc6i.8xlarge实例16 核含 VNNI 指令。命令关键参数含义-s sync同步单请求串行场景衡量最朴素吞吐-b 32/-b 1批大小32 偏向吞吐密集型1 偏向时延敏感场景-nstreams 1并发流数量设为 1 保证对比公平-e onnxruntime显式指定 ONNX Runtime 引擎以建立基线省略该参数即使用 DeepSparse 自身。批大小 32吞吐导向先建立 ORT 基线——稠密 YOLOv5s 在 batch 32 下约42 images/secdeepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntime # Throughput (items/sec): 41.9025同样稠密模型交给 DeepSparse可达约70 images/sec较 ORT 提升 1.7xdeepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 # Throughput (items/sec): 69.5546当套用稀疏化pruned65 quant后差距进一步拉大——约241 images/sec较 ORT 提升约 5.8xdeepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1 # Throughput (items/sec): 241.2452批大小 1时延敏感场景DeepSparse 在单张推理batch 1场景同样能压过 ORT。ORT 基线约48 images/secdeepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntime # Throughput (items/sec): 48.0921pruned65 quant 的稀疏 YOLOv5s 则可达约135 items/sec较 ORT 提升约 2.8xdeepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1 # Throughput (items/sec): 134.9468而由于c6i.8xlarge具备 VNNI 指令若把剪枝粒度改为 4 块block-of-4还能进一步逼近指令集的向量化上限——4-block 剪枝量化版可达约180 items/sec较 ORT 提升约 3.7xdeepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1 # Throughput (items/sec): 179.7375结果小结场景与模型引擎吞吐items/sec相对 ORT 提升Batch 32 · 稠密 YOLOv5sONNX Runtime41.91.0x基线Batch 32 · 稠密 YOLOv5sDeepSparse69.6约 1.7xBatch 32 · pruned65 quantDeepSparse241.2约 5.8xBatch 1 · 稠密 YOLOv5sONNX Runtime48.11.0x基线Batch 1 · pruned65 quantDeepSparse134.9约 2.8xBatch 1 · pruned35 quant VNNI 4-blockDeepSparse179.7约 3.7x上述数字全部来自官方教程在c6i.8xlarge16 核上的基准输出实际吞吐会因 CPU 微架构、内存子系统、批大小与稀疏结构而不同建议在目标机型上用同一套命令自行复测后再做容量规划。生态现状与选型提示在决定是否将 DeepSparse 引入生产前有一个重要的时间线事实需要了解Neural Magic 已于 2025 年 1 月被 Red Hat 收购并正在逐步停止其deepsparse、sparseml、sparsezoo、sparsify等库的社区版本维护。仓库内最新集成文档 docs/en/integrations/neural-magic.md 明确标注了这一弃用EOL警告。因此对于纯研究与功能验证场景教程中的 Pipeline / Server / annotate 用法仍然完全适用且上手成本极低对于长期生产依赖应评估是否有 Red Hat 商用支持渠道或关注 SparseZoo 存量模型与 ONNX 生态的可迁移性若目标是 CPU 上的 ONNX 部署而不强依赖稀疏加速ONNX Runtime 本身亦可作为稳健基线必要时可结合 YOLOv5 自身的 model-export.md 导出流程对比验证。总结本教程完整走通了“DeepSparse 安装 → SparseZoo/本地 ONNX 模型获取 → Python Pipeline / HTTP Server / Annotate CLI 三种部署方式 → benchmark 吞吐对比”的 YOLOv5 CPU 部署链路。核心要点是模型稀疏化让计算从算力受限转向内存受限而 DeepSparse 以 Tensor Columns 深度方向缓存友好的执行方式把这一优势兑现为可观的 CPU 吞吐。在具备 VNNI 指令的现代 x86 服务器上pruned quant 的 YOLOv5s 相比 ONNX Runtime 稠密基线可获得数倍吞吐收益。不过在把该方案写入生产架构之前务必把 Neural Magic 库的 EOL 时间线纳入风险评估并在目标硬件上以官方 benchmark 命令实测验证。【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表