Triển khai Ultralytics YOLOv5 với DeepSparse của Neural Magic để đạt hiệu năng cấp GPU trên CPU
Triển khai Ultralytics YOLOv5 với DeepSparse của Neural Magic để suy luận CPU đạt hiệu năng tương đương GPU bằng các model thưa, đã lượng tử hóa, kèm ví dụ code và benchmark.
Nuvola Ladi8 phút đọc
Bạn muốn tăng tốc quá trình huấn luyện và triển khai các model YOLOv5 của mình? Xin giới thiệu đối tác mới nhất của chúng tôi, Neural Magic. Neural Magic cung cấp các công cụ phần mềm chú trọng hiệu năng tối đa của model và sự đơn giản trong quy trình làm việc, vì vậy việc hợp tác để mang đến giải pháp cải thiện hơn nữa quy trình triển khai YOLOv5 là điều hết sức tự nhiên.
Cập nhật: Neural Magic được Red Hat mua lại vào tháng 1 năm 2025 và sau đó đã ngừng phát hành các phiên bản cộng đồng của DeepSparse, SparseML và SparseZoo. Các bước bên dưới được giữ lại để tham khảo; xem hướng dẫn YOLOv5 DeepSparse được liên kết ở trên để biết tình trạng hiện tại.
DeepSparse là runtime suy luận CPU của Neural Magic, tận dụng tính thưa và phép tính độ chính xác thấp trong mạng neural để mang lại hiệu năng vượt trội trên phần cứng phổ thông. Ví dụ, so với mốc tham chiếu ONNX Runtime, DeepSparse giúp YOLOv5s chạy nhanh hơn 5.8 lần trên cùng một máy!

Lần đầu tiên, workload deep learning của bạn có thể đáp ứng yêu cầu hiệu năng trong môi trường production mà không cần đến sự phức tạp và chi phí của bộ tăng tốc phần cứng. Nói đơn giản, DeepSparse mang lại hiệu năng của GPU cùng sự đơn giản của phần mềm:
- Triển khai linh hoạt: Vận hành nhất quán trên đám mây, trung tâm dữ liệu và thiết bị biên với mọi nhà cung cấp phần cứng
- Khả năng mở rộng không giới hạn: Mở rộng quy mô bằng Kubernetes tiêu chuẩn, mở rộng theo chiều dọc lên đến hàng trăm lõi hoặc trừu tượng hóa hoàn toàn bằng serverless
- Tích hợp dễ dàng: Sử dụng API rõ ràng để tích hợp model vào ứng dụng và giám sát model trong môi trường production
Đạt hiệu năng tương đương GPU trên CPU phổ thông#
DeepSparse tận dụng tính thưa của model để tăng tốc hiệu năng.
Phương pháp làm thưa thông qua pruning và lượng tử hóa cho phép giảm quy mô và lượng tính toán cần thiết để thực thi một mạng xuống nhiều bậc độ lớn mà vẫn duy trì độ chính xác cao. DeepSparse nhận biết độ thưa, bỏ qua các phép nhân-cộng có giá trị bằng không và giảm lượng tính toán trong một lượt truyền xuôi. Vì tính toán thưa bị giới hạn bởi bộ nhớ, DeepSparse thực thi mạng theo chiều sâu, chia bài toán thành các cột tensor, tức các dải tính toán dọc vừa với bộ nhớ đệm.

Các mạng thưa với phép tính được nén, thực thi theo chiều sâu trong bộ nhớ đệm, cho phép DeepSparse đạt hiệu năng cấp GPU trên CPU!
Tạo phiên bản thưa của Ultralytics YOLOv5 được huấn luyện trên dữ liệu tùy chỉnh#
Kho model mã nguồn mở SparseZoo của Neural Magic chứa các checkpoint đã được làm thưa sẵn cho từng model YOLOv5. Với SparseML được tích hợp cùng Ultralytics, bạn có thể fine-tune một checkpoint thưa trên dữ liệu của mình chỉ bằng một lệnh CLI.
Triển khai Ultralytics YOLOv5 với DeepSparse#
Cài đặt DeepSparse#
Chạy lệnh sau để cài đặt DeepSparse. Chúng tôi khuyến nghị sử dụng môi trường ảo với Python.
pip install deepsparse[server,yolo,onnxruntime]Thu thập tệp ONNX#
DeepSparse nhận model ở định dạng ONNX, được cung cấp theo một trong các cách sau:
- Đường dẫn cục bộ đến một model ONNX
- Stub SparseZoo xác định một model trong SparseZoo
Chúng ta sẽ so sánh YOLOv5s dense tiêu chuẩn với YOLOv5s đã cắt tỉa và lượng tử hóa, được xác định bằng các stub SparseZoo sau:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneTriển khai model#
DeepSparse cung cấp các API tiện lợi để tích hợp model vào ứng dụng.
Để thử các ví dụ triển khai bên dưới, hãy tải ảnh mẫu cho ví dụ và lưu thành basilica.jpg bằng lệnh sau:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgPython API#
Pipeline bao bọc các bước tiền xử lý và hậu xử lý đầu ra quanh runtime, cung cấp giao diện rõ ràng để thêm DeepSparse vào ứng dụng. Tích hợp DeepSparse-Ultralytics bao gồm một Pipeline có sẵn, nhận ảnh thô và xuất ra các bounding box.
Tạo Pipeline và chạy suy luận:
from deepsparse import Pipeline
# danh sách ảnh trong hệ thống tệp cục bộ
images = ["basilica.jpg"]
# tạo Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# chạy suy luận trên ảnh, nhận bounding box + lớp
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)Nếu chạy trên đám mây, bạn có thể gặp lỗi OpenCV không tìm thấy libGL.so.1. Chạy lệnh sau trên Ubuntu để cài đặt thư viện này:
apt-get install libgl1-mesa-glxHTTP Server#
DeepSparse Server chạy trên framework web FastAPI phổ biến và web server Uvicorn. Chỉ với một lệnh CLI, bạn có thể dễ dàng thiết lập endpoint dịch vụ model bằng DeepSparse. Server hỗ trợ mọi Pipeline của DeepSparse, bao gồm phát hiện đối tượng bằng Ultralytics YOLOv5, cho phép bạn gửi ảnh thô đến endpoint và nhận các bounding box.
Khởi chạy Server với YOLOv5s đã cắt tỉa và lượng tử hóa:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneVí dụ về một request sử dụng package requests của Python:
import requests, json
# danh sách ảnh dùng để suy luận (tệp cục bộ ở phía client)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]
# gửi request qua HTTP đến endpoint /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)
# response được trả về dưới dạng JSON
annotations = json.loads(resp.text) # dictionary chứa kết quả chú giải
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]CLI chú giải#
Bạn cũng có thể dùng lệnh annotate để yêu cầu engine lưu ảnh đã chú giải vào đĩa. Hãy thử --source 0 để chú giải luồng webcam trực tiếp của bạn!
deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpgChạy lệnh trên sẽ tạo thư mục annotation-results và lưu ảnh đã chú giải vào đó.

Đánh giá hiệu năng#
Sử dụng script benchmark của DeepSparse, chúng ta sẽ so sánh thông lượng của DeepSparse với thông lượng của ONNX Runtime trên YOLOv5s.
Các benchmark được chạy trên một instance AWS c6i.8xlarge (16 lõi).
So sánh hiệu năng với batch 32#
Baseline ONNX Runtime#
Ở batch 32, ONNX Runtime đạt 42 ảnh/giây với YOLOv5s dense tiêu chuẩn:
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntimeĐường dẫn model gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Kích thước batch: 32 Kịch bản: sync Thông lượng (mục/giây): 41.9025
Hiệu năng dense của DeepSparse#
DeepSparse đạt hiệu năng tốt nhất với các model thưa đã tối ưu, nhưng cũng hoạt động tốt với YOLOv5s dense tiêu chuẩn.
Ở batch 32, DeepSparse đạt 70 ảnh/giây với YOLOv5s dense tiêu chuẩn—hiệu năng cải thiện 1,7 lần so với ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1Đường dẫn model gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Kích thước batch: 32 Kịch bản: sync Thông lượng (mục/giây): 69.5546
Hiệu năng sparse của DeepSparse#
Khi áp dụng sparsity cho model, mức tăng hiệu năng của DeepSparse so với ONNX Runtime còn rõ rệt hơn.
Ở batch 32, DeepSparse đạt 241 ảnh/giây với YOLOv5s đã cắt tỉa và lượng tử hóa—hiệu năng cải thiện 5,8 lần so với ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1Đường dẫn model gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Kích thước batch: 32 Kịch bản: sync Thông lượng (mục/giây): 241.2452
So sánh hiệu năng với batch 1#
DeepSparse cũng có thể tăng tốc so với ONNX Runtime trong kịch bản batch 1 nhạy với độ trễ.
Baseline ONNX Runtime#
Ở batch 1, ONNX Runtime đạt 48 ảnh/giây với YOLOv5s dense tiêu chuẩn.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntimeĐường dẫn model gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Kích thước batch: 1 Kịch bản: sync Thông lượng (mục/giây): 48.0921
Hiệu năng sparse của DeepSparse#
Khi áp dụng sparsity cho model, mức tăng hiệu năng của DeepSparse so với ONNX Runtime còn rõ rệt hơn.
Ở batch 1, DeepSparse đạt 135 ảnh/giây với YOLOv5s đã cắt tỉa và lượng tử hóa—hiệu năng cải thiện 2,8 lần so với ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1Đường dẫn model gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Kích thước batch: 1 Kịch bản: sync Thông lượng (mục/giây): 134.9468
Vì các instance c6i.8xlarge có tập lệnh VNNI, thông lượng của DeepSparse có thể được tăng thêm nếu các trọng số được cắt tỉa theo khối 4.
Ở batch 1, DeepSparse đạt 180 mục/giây với YOLOv5s đã cắt tỉa theo khối 4 và lượng tử hóa—hiệu năng tăng 3,7 lần so với ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1Đường dẫn model gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni Kích thước batch: 1 Kịch bản: sync Thông lượng (mục/giây): 179.7375
Vậy là xong! Bạn đã sẵn sàng tối ưu hóa quá trình triển khai YOLOv5 bằng DeepSparse.
Bắt đầu với Ultralytics YOLOv5 và DeepSparse#
Để liên hệ với chúng tôi, hãy tham gia cộng đồng và gửi câu hỏi cùng nhận xét. Khám phá repository Ultralytics YOLOv5 và tài liệu đầy đủ của Neural Magic về triển khai YOLOv5.
Tại Ultralytics, chúng tôi hợp tác thương mại với các startup khác để hỗ trợ tài trợ cho hoạt động nghiên cứu và phát triển những công cụ mã nguồn mở hữu ích như YOLOv5, giúp mọi người đều có thể sử dụng miễn phí. Bài viết này có thể chứa các liên kết liên kết đến những đối tác đó.
Được viết bởi
Bình luận
Đặt câu hỏi, chia sẻ kết quả hoặc giúp đỡ người khác.










