Chuyển đến nội dung

Triển khai YOLOv5 với DeepSparse của Neural Magic

Chào mừng đến với AI được phân phối bằng phần mềm.

Hướng dẫn này giải thích cách triển khai YOLOv5 với DeepSparse của Neural Magic.

DeepSparse là một runtime suy luận với hiệu suất vượt trội trên CPU. Ví dụ: so với ONNX Runtime cơ bản, DeepSparse mang lại tốc độ nhanh hơn 5.8 lần cho YOLOv5s, chạy trên cùng một máy!

Cải thiện tốc độ YOLOv5

Lần đầu tiên, khối lượng công việc học sâu của bạn có thể đáp ứng nhu cầu hiệu suất của sản xuất mà không gặp sự phức tạp và chi phí của bộ tăng tốc phần cứng. Nói một cách đơn giản, DeepSparse mang lại cho bạn hiệu suất của GPU và sự đơn giản của phần mềm:

  • Triển khai linh hoạt: Chạy nhất quán trên đám mây, trung tâm dữ liệu và biên với mọi nhà cung cấp phần cứng từ Intel đến AMD đến ARM
  • Khả năng mở rộng vô hạn: Mở rộng theo chiều dọc lên đến hàng trăm lõi, mở rộng với Kubernetes tiêu chuẩn hoặc hoàn toàn trừu tượng với Serverless
  • Dễ dàng tích hợp: API rõ ràng để tích hợp mô hình của bạn vào một ứng dụng và giám sát nó trong quá trình sản xuất.

DeepSparse đạt được hiệu suất tương đương GPU như thế nào?

DeepSparse tận dụng tính thưa thớt của mô hình để đạt được tốc độ hiệu suất.

Sự thưa thớt thông qua cắt tỉa và lượng tử hóa là một kỹ thuật được nghiên cứu rộng rãi, cho phép giảm đáng kể về kích thước và tính toán cần thiết để thực thi một mạng, đồng thời duy trì độ chính xác cao. DeepSparse nhận biết được độ thưa thớt, có nghĩa là nó bỏ qua các tham số bằng không, giảm lượng tính toán trong một lần chuyển tiếp. Vì tính toán thưa thớt hiện 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 Cột Tensor, các sọc tính toán dọc phù hợp với bộ nhớ cache.

Cắt tỉa mô hình YOLO

Các mạng thưa thớt với tính toán nén, được thực thi theo chiều sâu trong bộ nhớ cache, cho phép DeepSparse cung cấp hiệu suất cấp GPU trên CPU!

Làm cách nào để tạo phiên bản thưa (Sparse) của YOLOv5 được huấn luyện trên dữ liệu của tôi?

Kho lưu trữ mô hình mã nguồn mở của Neural Magic, SparseZoo, chứa các điểm kiểm tra đã được làm thưa trước của mỗi mô hình YOLOv5. Sử dụng SparseML, được tích hợp với Ultralytics, bạn có thể tinh chỉnh một điểm kiểm tra thưa thớt trên dữ liệu của mình bằng một lệnh CLI duy nhất.

Xem tài liệu YOLOv5 của Neural Magic để biết thêm chi tiết.

Cách sử dụng DeepSparse

Chúng ta sẽ cùng nhau xem qua một ví dụ về việc đánh giá và triển khai phiên bản sparse (thưa thớt) của YOLOv5s với DeepSparse.

Cà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 với Python.

pip install "deepsparse[server,yolo,onnxruntime]"

Thu thập Tệp ONNX

DeepSparse chấp nhận một mô hình ở định dạng ONNX, được chuyển dưới dạng:

  • Một stub SparseZoo xác định một tệp ONNX trong SparseZoo
  • Một đường dẫn cục bộ đến mô hình ONNX trong hệ thống tệp

Các ví dụ dưới đây sử dụng các điểm kiểm tra YOLOv5s được lượng tử hóa-tỉa thưa và dày đặc tiêu chuẩn, được xác định bởi 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-none

Triển khai Mô hình

DeepSparse cung cấp các API thuận tiện để 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 và lưu nó thành basilica.jpg với những điều sau:

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

Python API

Pipelines gói tiền xử lý và hậu xử lý đầu ra xung quanh thời gian chạy, cung cấp một giao diện rõ ràng để thêm DeepSparse vào một ứng dụng. Tích hợp DeepSparse-Ultralytics bao gồm một Pipeline 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 đám mây, bạn có thể gặp lỗi rằng open-cv không thể tìm thấy libGL.so.1. Chạy lệnh sau trên Ubuntu để cài đặt:

apt-get install libgl1

Máy chủ HTTP

DeepSparse Server chạy trên nền tảng web framework FastAPI phổ biến và web server 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 điểm cuối 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 đối tượng với YOLOv5, cho phép bạn gửi hình ảnh thô đến điểm cuối và nhận các bounding box.

Khởi động Server với YOLOv5s đã được tỉa bớt và lượng tử hóa:

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

Một yêu cầu ví dụ, sử dụng Python requests gói:

import json

import requests

# 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"]

CLI chú thích

Bạn cũng có thể sử dụng lệnh annotate để engine lưu một ảnh đã được chú thích trên ổ đĩa. Hãy thử --source 0 để chú thích nguồn cấp dữ liệu 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.jpg

Việc chạy lệnh trên sẽ tạo ra một annotation-results và lưu ảnh đã được chú thích vào bên trong.

đã chú thích

Đánh giá Hiệu suất

Chúng tôi sẽ so sánh thông lượng của DeepSparse với thông lượng của ONNX Runtime trên YOLOv5s, sử dụng tập lệnh đo điểm chuẩn của DeepSparse.

Các đánh giá hiệu năng được chạy trên AWS c6i.8xlarge instance (16 cores).

So sánh hiệu suất Batch 32

Đường cơ sở 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

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

Hiệu suất dày đặc của DeepSparse

Mặc dù DeepSparse mang lại hiệu suất tốt nhất với các mô hình sparse đã được tối ưu hóa, nhưng nó 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, cải thiện hiệu suất 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

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

Hiệu suất thưa thớt của DeepSparse

Khi sparsity được áp dụng cho mô hình, hiệu suất của DeepSparse so với ONNX Runtime thậm chí còn mạnh hơn.

Ở batch 32, DeepSparse đạt được 241 ảnh/giây với YOLOv5s đã được tỉa-lượng tử hóa, một cải thiện hiệu suất gấp 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

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

So sánh hiệu suất Batch 1

DeepSparse cũng có thể tăng tốc so với ONNX Runtime cho trường hợp độ trễ nhạy cảm, batch 1.

Đường cơ sở ONNX Runtime

Ở batch 1, ONNX Runtime đạt được 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

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

Hiệu suất thưa thớt của DeepSparse

Ở batch 1, DeepSparse đạt được 135 mục/giây với YOLOv5s đã được tỉa-lượng tử hóa, mức tăng hiệu suất gấp 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

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

Kể từ c6i.8xlarge Các instance có hướng dẫn VNNI, thông lượng của DeepSparse có thể được đẩy mạnh hơn nữa nếu trọng số được tỉa theo các khối 4.

Ở batch 1, DeepSparse đạt được 180 mục/giây với YOLOv5s đã được tỉa-lượng tử hóa 4-block, một mức tăng hiệu suất gấp 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

# 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

Bắt đầu với DeepSparse

Nghiên cứu hoặc Thử nghiệm? DeepSparse Community miễn phí cho nghiên cứu và thử nghiệm. Bắt đầu với Tài liệu của họ.

Để biết thêm thông tin về cách triển khai YOLOv5 với DeepSparse, hãy xem tài liệu DeepSparse của Neural Magicbài đăng trên blog của Ultralytics về tích hợp DeepSparse.



📅 Đã tạo 1 năm trước ✏️ Cập nhật 2 tháng trước

Bình luận