Bỏ để qua phần nội dung

Neural Magic'DeepSparse

Chào mừng bạn đế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 Neural Magic'DeepSparse.

DeepSparse là thời gian chạy suy luận với hiệu suất vượt trội trên CPU. Ví dụ, so với ONNX Đường cơ sở thời gian chạy, DeepSparse cung cấp tốc độ 5,8 lần cho YOLOv5s, chạy trên cùng một máy!

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

Lần đầu tiên, khối lượng công việc deep learning của bạn có thể đáp ứng nhu cầu hiệu năng 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:

  • 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 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 100 lõi, xuất ra với Kubernetes tiêu chuẩn hoặc được trừu tượng hóa hoàn toàn với Serverless
  • Tích hợp dễ dàng: API sạch để 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 sản xuất

Làm thế nào để DeepSparse đạt được hiệu suất cấp GPU?

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

Thưa thớt hóa 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 kích thước và tính toán cần thiết để thực thi mạng, trong khi vẫn duy trì độ chính xác cao. DeepSparse nhận biết thưa thớt, có nghĩa là nó bỏ qua các tham số zeroed out, thu nhỏ lượng tính toán trong một đường chuyền về phía trước. Vì tính toán thưa thớt hiện bị ràng buộc bộ nhớ, DeepSparse thực thi độ sâu mạng, chia nhỏ vấn đề thành Tensor Cột, sọc tính toán dọc phù hợp với bộ nhớ cache.

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

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 thớt của YOLOv5 Được đào tạo về dữ liệu của tôi?

Neural MagicKho lưu trữ mô hình mã nguồn mở của SparseZoo, chứa các điểm kiểm tra thưa thớt trước của mỗi YOLOv5 mẫu. 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 điểm kiểm tra duy nhất CLI lệnh.

Checkout Neural Magic's YOLOv5 tài liệu để biết thêm chi tiết.

Sử dụng DeepSparse

Chúng ta sẽ đi qua một ví dụ về điểm chuẩn và triển khai một phiên bản YOLOv5s thưa thớt với DeepSparse.

Cài đặt DeepSparse

Chạy 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 một ONNX Tệp

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

  • Sơ khai SparseZoo xác định một ONNX tập tin trong SparseZoo
  • Một con đường địa phương đến một ONNX Mô hình trong hệ thống tệp

Các ví dụ dưới đây sử dụng các điểm kiểm tra YOLOv5s dày đặc và được cắt tỉa tiêu chuẩn, được xác định bởi các sơ khai 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 và lưu nó dưới dạng basilica.jpg với những điều sau đây:

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

Python API

Pipelines bọc tiền xử lý và xử lý hậu kỳ đầu ra trong suốt thời gian chạy, cung cấp giao diện sạch sẽ để thêm DeepSparse vào ứng dụng. The DeepSparse-Ultralytics Tích hợp bao gồm một out-of-the-box Pipeline Điều đó 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:

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 mà open-cv không thể tìm thấy libGL.so.1. Chạy phần sau trên Ubuntu sẽ cài đặt nó:

apt-get install libgl1

Máy chủ HTTP

DeepSparse Server chạy trên khung web FastAPI phổ biến và máy chủ web Uvicorn. Chỉ với một đĩa đơn CLI lệnh, 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 ảnh thô đến điểm cuối và nhận các hộp giới hạn.

Quay Máy chủ với YOLOv5s lượng tử hóa được cắt tỉ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's 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"]

Chú thích CLI

Bạn cũng có thể sử dụng lệnh annotate để công cụ 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 ra một annotation-results thư mục và lưu hình ảnh chú thích bên trong.

Chú thích

Hiệu suất đo điểm chuẩn

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

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

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

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

Tại đợt 32, ONNX Thời gian chạy đạ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 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 DeepSparse

Mặc dù 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, nhưng 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 gấp 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 DeepSparse

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

Ở lô 32, DeepSparse đạt được 241 hình ảnh / giây với YOLOv5s lượng tử hóa được cắt tỉ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 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 đợt 1

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

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

Ở đợt 1, ONNX Thời gian chạy đạ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 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 DeepSparse

Ở đợt 1, DeepSparse đạt được 135 vật phẩm / giây với YOLOv5s lượng tử hóa được cắt tỉa, Tăng hiệu suất gấp 2,8 lần 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

Từ c6i.8xlarge các phiên bản có lệnh VNNI, thông lượng của DeepSparse có thể được đẩy xa hơn nếu trọng số được cắt tỉa theo khối 4.

Ở đợt 1, DeepSparse đạt được 180 mục/giây với YOLOv5 lượng tử hóa 4 khối, một Hiệu suất tăng gấp 3,7 lần 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 hay thử nghiệm? Cộng đồng DeepSparse miễn phí cho nghiên cứu và thử nghiệm. Bắt đầu với Tài liệu của chúng tôi.



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (6)

Ý kiến