Yolo Tầm nhìn Thâm Quyến
Thâm Quyến
Tham gia ngay

Triển khai Ultralytics YOLOv5 Với Neural Magic 's DeepSparse cho GPU -Hiệu suất lớp trên CPU

Ultralytics Đội

5 phút đọc

5 tháng 1, 2023

Trao quyền Ultralytics YOLOv5 đào tạo và triển khai mô hình với Neural Magic 's DeepSparse cho GPU -Hiệu suất hàng đầu trên CPU. Đạt được tốc độ nhanh hơn, khả năng mở rộng YOLOv5 triển khai.

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

DeepSparse là Neural Magic 'S CPU thời gian chạy suy luận, 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 để mang lại hiệu suất vượt trội trên phần cứng thông dụng. Ví dụ, so với ONNX Thời gian chạy cơ sở, DeepSparse cung cấp tốc độ tăng 5,8 lần cho YOLOv5 chạy trên cùng một máy!

YOLOv5 So sánh thông lượng 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 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:

  1. 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 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 quy mô với Kubernetes tiêu chuẩn, theo chiều dọc đến hàng trăm lõi hoặc được trừu tượng hóa hoàn toàn với serverless
  3. Dễ dàng tích hợp: Sử dụng các 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.

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

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

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

DeepSparse và Ultralytics YOLOv5 Mạng

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

Tạo một phiên bản thưa thớt của YOLOv5 Được đào tạo về Dữ liệu tùy chỉnh

Neural Magic Kho lưu trữ mô hình nguồn mở của SparseZoo chứa các điểm kiểm tra được phân tách trước của từng YOLOv5 mô hình. 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 vào dữ liệu của mình chỉ bằng một CLI yêu cầu.

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 ONNX Tài liệu

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

  • Một con đường địa phương đến một ONNX người mẫu
  • Một stub SparseZoo xác định một mô hình trong SparseZoo

Chúng tôi sẽ so sánh YOLOv5s dày đặc tiêu chuẩn với YOLOv5s được tỉa-lượng tử hóa, đượ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 kéo xuống một hình ảnh mẫu cho ví dụ và lưu dưới dạng basilica .jpg bằng lệnh sau:

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

Python API

Các đường ống bao gồm quá trình 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 ứng dụng. DeepSparse- Ultralytics tích hợp bao gồm một 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 Pipeline và chạy suy luận:

from deepsparse import 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 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 sẽ cài đặt nó:

apt-get install libgl1-mesa-glx

Máy chủ HTTP

DeepSparse Server chạy trên nền tảng web FastAPI phổ biến và máy chủ web Uvicorn. Chỉ với một CLI Lệnh này cho phép bạn 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 cả 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 YOLOv5s đã được tỉa và lượng tử hóa:

deepsparse.server \
--nhiệm vụ yolo \
--model_path zoo:cv/detection/ yolov5 -S/ pytorch / ultralytics /coco/pruned65_quant-none

Một ví dụ yêu cầu, sử dụng Python Gói yêu cầu của 's:

import requests, 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 endpoint /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# phản hồi được trả về ở định dạng JSON
annotations = json.loads(resp.text) # từ điển các kết quả chú thích
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

Chú thích CLI

Bạn cũng có thể sử dụng lệnh annotate để engine lưu ảnh đã được chú thích trên ổ cứng. Hãy thử --source 0 để chú thích trực tiếp từ webcam của bạn!

deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/ yolov5 -S/ pytorch / ultralytics /coco/pruned65_quant-none --nguồn basilica .jpg

Việc 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 bên trong.

Có chú thích Basilica với YOLOv5

Hiệu Suất Benchmark

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 ONNX Thông lượng thời gian chạy trên YOLOv5s.

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

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

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

Ở lô 32, ONNX Thời gian chạy đạt 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ộ hóa
> Thông lượng (mục/giây): 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 được 70 ảnh/giây với YOLOv5s dày đặc tiêu chuẩn—cải thiện hiệu suất gấp 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ộ hóa
> Thông lượng (mục/giây): 69,5546

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

Khi tính thưa thớt được áp dụng cho mô hình, hiệu suất của DeepSparse tăng lên ONNX Thời gian chạy 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—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 đồ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ộ hóa
> Thông lượng (mục/giây): 241,2452

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

DeepSparse cũng có thể tăng tốc độ hơn ONNX Thời gian chạy cho kịch bản nhạy cảm với độ trễ, lô 1.

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

Ở lô 1, ONNX Thời gian chạy đạt 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ộ hóa
> Thông lượng (mục/giây): 48,0921

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

Khi tính thưa thớt được áp dụng cho mô hình, hiệu suất của DeepSparse tăng lên ONNX Thời gian chạy thậm chí còn mạnh hơn.

Ở lô 1, DeepSparse đạt được 135 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 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ộ hóa
> Thông lượng (mục/giây): 134,9468

Vì các phiên bản c6i.8xlarge có các chỉ lệnh 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.

Ở lô 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ộ hóa
> 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 và để lại câu hỏi cũng như bình luận của bạn. Hãy xem kho lưu trữ Ultralytics YOLOv5tài liệu đầy đủ Neural Magic về cách 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 việc 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 tất cả 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 nhau xây dựng tương lai
của AI!

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

Bắt đầu miễn phí