Triển khai Ultralytics YOLOv5 với DeepSparse của Neural Magic để đạt hiệu suất cấp GPU trên CPU
Nâng cao hiệu suất đào tạo & triển khai mô hình YOLOv5 của Ultralytics với DeepSparse của Neural Magic để đạt hiệu suất cấp GPU trên CPU. Đạt được triển khai YOLOv5 nhanh hơn và có khả năng mở rộng.

Bạn muốn tăng tốc quá trình huấn luyện và triển khai các mô hình YOLOv5 của mình? Chúng tôi đã có giải pháp cho bạn! Xin giới thiệu đối tác mới nhất của chúng tôi, Neural Magic. Vì Neural Magic cung cấp các công cụ phần mềm chú trọng vào hiệu năng mô hình đỉnh cao và sự đơn giản trong quy trình làm việc, việc chúng tôi hợp tác để đưa ra giải pháp giúp quá trình triển khai YOLOv5 trở nên tốt hơn nữa là điều hoàn toàn tự nhiên.
DeepSparse là runtime suy luận trên CPU của Neural Magic, tận dụng tính thưa (sparsity) và số học độ chính xác thấp trong các mạng thần kinh để mang lại hiệu năng vượt trội trên phần cứng thương mại thông thường. Ví dụ, so với baseline ONNX Runtime, DeepSparse mang lại tốc độ nhanh hơn 5.8 lần cho YOLOv5s khi chạy trên cùng một máy!

Lần đầu tiên, các workload deep learning của bạn có thể đáp ứng các yêu cầu về hiệu năng trong production mà không cần đến sự phức tạp và chi phí của các bộ tăng tốc phần cứng. Đơn giản mà nói, DeepSparse mang lại cho bạn 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: Chạy nhất quán trên cloud, trung tâm dữ liệu và thiết bị biên với bất kỳ nhà cung cấp phần cứng nào.
- Khả năng mở rộng vô hạn: Mở rộng ra ngoài với Kubernetes tiêu chuẩn, theo chiều dọc lên tới hàng trăm lõi, hoặc được trừu tượng hóa hoàn toàn với serverless.
- Tích hợp dễ dàng: Sử dụng các API gọn gàng để tích hợp mô hình vào ứng dụng và giám sát nó trong môi trường production.
Link to this sectionĐạt hiệu năng cấp GPU trên CPU thông thường#
DeepSparse tận dụng tính thưa của mô hình để đạt được sự tăng tốc hiệu năng.
Việc làm thưa hóa (sparsification) thông qua tỉa (pruning) và lượng tử hóa (quantization) cho phép giảm đáng kể quy mô và khối lượng tính toán cần thiết để thực thi một mạng thần kinh trong khi vẫn duy trì độ chính xác cao. DeepSparse nhận biết được tính thưa, bỏ qua các phép nhân-cộng với số không và giảm khối lượng tính toán trong một lần truyền xuôi (forward pass). 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 nhỏ vấn đề thành các Tensor Columns, là các dải tính toán dọc vừa vặn trong bộ nhớ đệm (cache).

Các mạng thưa với tính toán được nén, thực thi theo chiều sâu trong bộ nhớ đệm, cho phép DeepSparse mang lại hiệu năng cấp GPU trên CPU!
Link to this sectionTạo phiên bản thưa của YOLOv5 được huấn luyện trên dữ liệu tùy chỉnh#
Kho lưu trữ mô hình mã nguồn mở của Neural Magic, SparseZoo, chứa các checkpoint đã được thưa hóa sẵn của mỗi mô hình YOLOv5. Sử dụng SparseML, vốn được tích hợp với Ultralytics, bạn có thể tinh chỉnh (fine-tune) một checkpoint thưa trên dữ liệu của mình bằng một lệnh CLI duy nhất.
Link to this sectionTriển khai YOLOv5 với DeepSparse#
Link to this sectionCài đặt DeepSparse#
Chạy lệnh sau để cài đặt DeepSparse. Chúng tôi khuyên bạn nên sử dụng môi trường ảo (virtual environment) với Python.
pip install deepsparse[server,yolo,onnxruntime]Link to this sectionThu thập tệp ONNX#
DeepSparse chấp nhận mô hình ở định dạng ONNX, được truyền dưới dạng:
- Đường dẫn cục bộ đến mô hình ONNX
- Một SparseZoo stub định danh mô hình trong SparseZoo
Chúng ta sẽ so sánh YOLOv5s dày (dense) tiêu chuẩn với YOLOv5s đã được tỉa và lượng tử hóa, được định danh bởi các SparseZoo stub sau:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneLink to this sectionTriển khai mô hình#
DeepSparse cung cấp các API tiện lợi để tích hợp mô hình của bạn vào một ứng dụng.
Để thử các ví dụ triển khai bên dưới, hãy tải xuống một ả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.jpgLink to this sectionPython API#
Các Pipeline bao bọc quá trình tiền xử lý và hậu xử lý đầu ra xung quanh runtime, cung cấp một giao diện gọn gàng để thêm DeepSparse vào ứng dụng. Tích hợp DeepSparse-Ultralytics bao gồm một Pipeline có sẵn (out-of-the-box) chấp nhận ảnh thô và xuất ra các bounding box.
Tạo một Pipeline và chạy suy luận:
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)Nếu bạn đang chạy trên cloud, bạn có thể gặp lỗi open-cv không tìm thấy libGL.so.1. Chạy lệnh sau trên Ubuntu để cài đặt nó:
apt-get install libgl1-mesa-glxLink to this sectionHTTP Server#
DeepSparse Server chạy trên framework web FastAPI phổ biến và máy chủ web Uvicorn. Chỉ với một lệnh CLI duy nhất, bạn có thể dễ dàng thiết lập một endpoint dịch vụ mô hình với DeepSparse. Server hỗ trợ bất kỳ Pipeline nào từ DeepSparse, bao gồm nhận diện vật thể với YOLOv5, cho phép bạn gửi ảnh thô đến endpoint và nhận lại các bounding box.
Khởi chạy Server với YOLOv5s đã được tỉa và lượng tử hóa:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneMột ví dụ yêu cầu, sử dụng gói requests của Python:
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"]Link to this sectionAnnotate CLI#
Bạn cũng có thể sử dụng lệnh annotate để trình engine lưu ảnh đã chú thích vào ổ đĩa. Hãy thử --source 0 để chú thích nguồn cấp dữ liệu từ 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 một thư mục annotation-results và lưu ảnh đã chú thích bên trong.

Link to this sectionBenchmark hiệu năng#
Sử dụng tập lệnh 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).
Link to this sectionSo sánh hiệu năng Batch 32#
Link to this sectionBaseline ONNX Runtime#
Tại batch 32, ONNX Runtime đạt 42 ảnh/giây với YOLOv5s dày 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 mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 32 Kịch bản: sync Thông lượng (items/sec): 41.9025
Link to this sectionHiệu năng DeepSparse Dense#
Trong khi DeepSparse mang lại hiệu năng tốt nhất với các mô hình thưa được tối ưu hóa, nó cũng hoạt động tốt với các mô hình YOLOv5s dày tiêu chuẩn.
Tại batch 32, DeepSparse đạt 70 ảnh/giây với YOLOv5s dày tiêu chuẩn—cải thiện hiệu năng 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 mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 32 Kịch bản: sync Thông lượng (items/sec): 69.5546
Link to this sectionHiệu năng DeepSparse Sparse#
Khi tính thưa được áp dụng vào mô hình, mức tăng hiệu năng của DeepSparse so với ONNX Runtime thậm chí còn mạnh mẽ hơn.
Tại batch 32, DeepSparse đạt 241 ảnh/giây với YOLOv5s đã được tỉa và lượng tử hóa—cải thiện hiệu năng 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 mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Batch Size: 32 Kịch bản: sync Thông lượng (items/sec): 241.2452
Link to this sectionSo sánh hiệu năng Batch 1#
DeepSparse cũng có thể tăng tốc so với ONNX Runtime cho kịch bản batch 1, vốn nhạy cảm với độ trễ.
Link to this sectionBaseline ONNX Runtime#
Tại batch 1, ONNX Runtime đạt 48 ảnh/giây với YOLOv5s dày 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 mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 1 Kịch bản: sync Thông lượng (items/sec): 48.0921
Link to this sectionHiệu năng DeepSparse Sparse#
Khi tính thưa được áp dụng vào mô hình, mức tăng hiệu năng của DeepSparse so với ONNX Runtime thậm chí còn mạnh mẽ hơn.
Tại batch 1, DeepSparse đạt 135 ảnh/giây với YOLOv5s đã được tỉa và lượng tử hóa—cải thiện hiệu năng 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 mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Batch Size: 1 Kịch bản: sync Thông lượng (items/sec): 134.9468
Vì các instance c6i.8xlarge có các tập lệnh VNNI, thông lượng của DeepSparse có thể được đẩy cao hơn nếu trọng số được tỉa theo các khối 4.
Tại batch 1, DeepSparse đạt 180 items/giây với YOLOv5s đã được tỉa 4-block và lượng tử hóa—mức tăng hiệu nă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 mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni Batch Size: 1 Kịch bản: sync Thông lượng (items/sec): 179.7375
Và xong! Bạn đã sẵn sàng để tối ưu hóa việc triển khai YOLOv5 của mình với DeepSparse.
Link to this sectionBắt đầu với YOLOv5 và DeepSparse#
Để liên hệ với chúng tôi, hãy tham gia cộng đồng của chúng tôi và để lại các câu hỏi cũng như nhận xét của bạn. Hãy xem kho lưu trữ Ultralytics YOLOv5 và toàn bộ tài liệu 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 để giúp tài trợ cho việc nghiên cứu và phát triển các công cụ mã nguồn mở tuyệt vời của chúng tôi, như YOLOv5, để giữ cho chúng miễn phí cho mọi người. Bài viết này có thể chứa các liên kết tiếp thị liên kết (affiliate links) đến những đối tác đó.






