Triển khai Ultralytics YOLOv5 với DeepSparse của Neural Magic để có hiệu suất GPU-Class trên CPU

Đội ngũ Ultralytics

5 phút đọc

Ngày 5 tháng 1 năm 2023

Trao quyền cho việc đào tạo và triển khai mô hình YOLOv5 của Ultralytics với DeepSparse của Neural Magic để có hiệu suất GPU trên CPU. Triển khai YOLOv5 nhanh hơn và có thể mở rộng.

Bạn muốn đẩy nhanh quá trình đào tạo và triển khai các mô hình YOLOv5 ? Chúng tôi đã sẵn sàng hỗ trợ bạn! Xin giới thiệu đối tác mới nhất của chúng tôi, Neural Magic. Với Neural Magic cung cấp các công cụ phần mềm tập trung vào hiệu suất mô hình tối ưu và sự đơn giản trong quy trình làm việc, việc chúng tôi cùng nhau hợp tác để đưa ra một giải pháp giúp quy trình triển khai YOLOv5 trở nên tốt hơn nữa là điều dễ hiểu.

DeepSparse là thời gian chạy suy luận CPU của Neural Magic, tận dụng tính thưa thớt và số học có độ chính xác thấp trong mạng nơ-ron để cung cấp hiệu suất vượt trội trên phần cứng thông thường. Ví dụ, so với đường cơ sở ONNX Runtime, DeepSparse cung cấp tốc độ tăng 5,8 lần cho YOLOv5 chạy trên cùng một máy!

So sánh thông lượng YOLOv5 với DeepSparse

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 cần 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 cung cấp cho bạn hiệu suất của GPU và sự đơn giản của phần mềm:

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

Đạt được hiệu suất GPU-Class trên CPU hàng hóa

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

Việc thưa thớt thông qua việc cắt tỉa và lượng tử hóa cho phép giảm kích thước và tính toán theo cấp số nhân cần thiết để thực thi một mạng trong khi vẫn duy trì độ chính xác cao. DeepSparse nhận thức được sự thưa thớt, bỏ qua phép nhân-thêm bằng không và thu hẹp lượng tính toán trong một lần truyền tiếp. Vì tính toán thưa thớt bị ràng buộc bởi bộ nhớ, DeepSparse thực thi theo chiều sâu của mạng, chia nhỏ vấn đề thành các Cột Tensor, là các dải tính toán theo chiều dọc phù hợp với bộ nhớ đệm.

Mạng lưới YOLOv5 DeepSparse và Ultralytics

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

Tạo phiên bản thưa thớt của YOLOv5 được đào tạo 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 điểm kiểm tra được phân tán 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 phân tán vào dữ liệu của mình chỉ bằng một lệnh CLI.

Triển khai YOLOv5 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 cài đặt deepsparse[máy chủ, yolo, onnxruntime]

Thu thập một tập tin ONNX

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

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

Chúng tôi sẽ so sánh YOLOv5 dày đặc tiêu chuẩn với YOLOv5 được lượng tử hóa và cắt tỉa, được xác định bởi các đoạn mã SparseZoo sau:

sở thú:cv/phát hiện/yolov5-s/pytorch/ultralytics/coco/base-none
sở thú:cv/phát hiện/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Triển khai một 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 ứng dụng.

Để thử các ví dụ triển khai bên dưới, hãy kéo xuống một hình ảnh mẫu và lưu dưới dạng basilica.jpg bằng lệnh sau:

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

Giao diện lập trình Python

Pipelines bao bọc quá trình tiền xử lý và xử lý hậu kỳ xung quanh thời gian chạy, cung cấp giao diện sạch để thêm DeepSparse vào ứng dụng. Tích hợp DeepSparse-Ultralytics bao gồm Pipeline có sẵn chấp nhận hình ảnh thô và xuất ra các hộp giới hạn.

Tạo một Pipeline và chạy suy luận:

từ deepsparse nhập khẩu Pipeline

# danh sách hình ảnh trong hệ thống tập tin cục bộ
hình ảnh = ["basilica.jpg"]

# tạo Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
nhiệm vụ="yolo",
đường dẫn mô hình = mô hình sơ khai,
)

# chạy suy luận trên hình ảnh, nhận các hộp giới hạn + lớp
pipeline_outputs = yolo_pipeline(hình ảnh=hình ảnh, iou_thres=0.6, conf_thres=0.001)
in(pipeline_outputs)

Nếu bạn đang chạy trên đám mây, 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 cài đặt libgl1-mesa-glx

Máy chủ HTTP

DeepSparse Server chạy trên nền tảng web phổ biến FastAPI và máy chủ web Uvicorn. Chỉ với một lệnh CLI, bạn có thể dễ dàng thiết lập điểm cuối dịch vụ mô hình với DeepSparse. Máy chủ hỗ trợ bất kỳ Pipeline nào từ DeepSparse, bao gồm phát hiệ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 hộp giới hạn.

Khởi động Máy chủ với YOLOv5 đã được lượng tử hóa và cắt tỉa:

deepsparse.máy chủ \
--nhiệm vụ yolo \
--model_path sở thú:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

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

yêu cầu nhập khẩu, json

# danh sách hình ảnh để suy luận (các tệp cục bộ trên phía máy khách)
đường dẫn = ['basilica.jpg']
files = [('request', open(img, 'rb')) cho img trong đường dẫn]

# gửi yêu cầu qua HTTP đến điểm cuối /predict/from_files
url = 'http://0.0.0.0:5543/dự đoán/từ_tệp'
resp = yêu cầu.post(url=url, files=files)

# phản hồi được trả về trong JSON
chú thích = json.loads(resp.text) # từ điển kết quả chú thích
bounding_boxes = chú thích["hộp"]
nhãn = chú thích["nhãn"]

Chú thích CLI

Bạn cũng có thể sử dụng lệnh annotate để yêu cầu engine lưu ả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

Chạy lệnh trên sẽ tạo một thư mục annotation-results và lưu hình ảnh có chú thích vào bên trong.

Nhà thờ có chú thích với YOLOv5

Hiệu suất chuẩn

Sử dụng tập lệnh đánh giá chuẩn của DeepSparse, 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 YOLOv5.

Các điểm chuẩn được chạy trên phiên bản AWS c6i.8xlarge (16 lõi).

So sánh hiệu suất lô 32

Đường cơ sở thời gian chạy ONNX

Ở lô 32, ONNX Runtime đạt được 42 hình ảnh/giây với YOLOv5s dày đặc tiêu chuẩn:

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s đồng bộ -b 32 -nstreams 1 -e onnxruntime

> Đường dẫn mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Kích thước lô: 32
> Kịch bản: đồng bộ
> Thông lượng (mục/giây): 41,9025

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

Trong khi DeepSparse cung cấp hiệu suất tốt nhất với các mô hình thưa thớt được tối ưu hóa, nó cũng hoạt động tốt với YOLOv5 dày đặc tiêu chuẩn.

Ở lô 32, DeepSparse đạt được 70 hình ảnh/giây với YOLOv5s dày đặc 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 đồng bộ -b 32 -nstreams 1

> Đường dẫn mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Kích thước lô: 32
> Kịch bản: đồng bộ
> Thông lượng (mục/giây): 69,5546

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

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

Ở lô 32, DeepSparse đạt được 241 hình ảnh/giây với YOLOv5s được lượng tử hóa đã cắt tỉa— cải thiện hiệu suất 5,8 lần so với ORT!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s đồng bộ -b 32 -nstreams 1

> Đường dẫn mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Kích thước lô: 32
> Kịch bản: đồng bộ
> Thông lượng (mục/giây): 241.2452

So sánh hiệu suất lô 1

DeepSparse cũng có khả năng tăng tốc độ so với ONNX Runtime cho tình huống nhạy cảm với độ trễ, xử lý theo lô 1.

Đường cơ sở thời gian chạy ONNX

Ở đợt 1, ONNX Runtime đạt được 48 hình ảnh/giây với YOLOv5s tiêu chuẩn, dày đặc.

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s đồng bộ -b 1 -nstreams 1 -e onnxruntime

> Đường dẫn mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Kích thước lô: 1
> Kịch bản: đồng bộ
> Thông lượng (mục/giây): 48.0921

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

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

Ở đợt 1, DeepSparse đạt được 135 hình ảnh/giây với YOLOv5s được lượng tử hóa đã cắt bớt —hiệu suất được 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 đồng bộ -b 32 -nstreams 1

> Đường dẫn mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Kích thước lô: 1
> Kịch bản: đồng bộ
> Thông lượng (mục/giây): 134.9468

Vì các phiên bản c6i.8xlarge có lệnh VNNI nên thông lượng của DeepSparse có thể được đẩy cao hơn nữa nếu trọng số được cắt theo khối gồm 4.

Ở đợt 1, DeepSparse đạt được 180 mục/giây với YOLOv5s được lượng tử hóa và cắt tỉa 4 khối —hiệu suất 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 đồng bộ -b 1 -nstreams 1

> Đường dẫn mô hình gốc: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Kích thước lô: 1
> Kịch bản: đồng bộ
> Thông lượng (mục/giây): 179,7375

Và thế là 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.

Bắ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âu hỏi và bình luận của bạn. Hãy xem kho lưu trữ Ultralytics YOLOv5tài liệu đầy đủ của Neural Magic để triển khai YOLOv5 .

Tại Ultralytics, chúng tôi hợp tác thương mại với các công ty khởi nghiệp khác để giúp chúng tôi tài trợ cho hoạt động nghiên cứu và phát triển các công cụ nguồn mở tuyệt vời của mình, như YOLOv5, để giữ 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 liên kết đến các đối tác đó.

Hãy cùng xây dựng tương lai
của AI cùng nhau!

Bắt đầu hành trình của bạn với tương lai của máy học

Bắt đầu miễn phí
Liên kết đã được sao chép vào clipboard