Neural Magic 's DeepSparse
Chào mừng đến với AI được cung cấp 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 của DeepSparse.
DeepSparse là một thời gian chạy suy luận với hiệu suất đặc biệt trên CPU. 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 khi chạy trên cùng một máy!
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:
- 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 từ Intel từ AMD đến ARM
- Khả năng mở rộng vô hạn : Mở rộng theo chiều dọc lên tới hàng trăm lõi, với Kubernetes tiêu chuẩn hoặ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 ứng dụng và giám sát nó trong quá trình sản xuất
DeepSparse đạt được điều gì GPU - Hiệu suất lớp học?
DeepSparse tận dụng tính thưa thớt của mô hình để tăng 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 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 biết được sự thưa thớt, nghĩa là nó bỏ qua các tham số được xóa, 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 hiện 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 Tensor Các cột, các sọc dọc của phép tính phù hợp với bộ nhớ đệm.
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!
Làm thế nào để tôi tạo ra một phiên bản thưa thớt của YOLOv5 Đã được đào tạo về Dữ liệu của tôi chưa?
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.
Kiểm tra tài liệu YOLOv5 của Neural Magic để biết thêm chi tiết .
Sử dụng DeepSparse
Chúng tôi sẽ hướng dẫn một ví dụ về đánh giá chuẩn và triển khai phiên bản YOLOv5 thưa thớt 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 .
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 thông qua như sau:
- Một đoạn mã 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 một hệ thống tập tin
Các ví dụ bên dưới sử dụng các điểm kiểm tra YOLOv5s dày đặc và được cắt tỉa theo tiêu chuẩn, được xác định bởi các đoạn mã 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ộ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 nó dưới dạng basilica.jpg
với nội dung sau:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
Python Giao diện lập trình ứng dụng (API)
Pipelines
bao bọc quá trình tiền xử lý và xử lý hậu kỳ đầu ra xung quanh thời gian chạy, cung cấp giao diện sạch để thêm DeepSparse vào ứng dụng. DeepSparse- Ultralytics tích hợp bao gồm một hộp Pipeline
chấp nhận hình ảnh thô và đưa 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 tìm thấy libGL.so.1
. Chạy lệnh sau trên Ubuntu để cài đặt nó:
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, 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.server \
--task 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 'S requests
bưu kiện:
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 để 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 ra một annotation-results
thư mục và lưu hình ảnh có chú thích bên trong.
Hiệu suất chuẩn
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 YOLOv5, sử dụng tập lệnh đánh giá chuẩn của DeepSparse.
Các tiêu chuẩn được chạy trên AWS c6i.8xlarge
Ví dụ (16 lõi).
So sánh hiệu suất lô 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 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
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 YOLOv5 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 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 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ô 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 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 lô 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 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 mục/giây với YOLOv5s được lượng tử hóa, tăng 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 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
Trong trường hợp có 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 cắt thành các 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 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? Cộng đồng DeepSparse miễn phí cho việc nghiên cứu và thử nghiệm. Bắt đầu với Tài liệu của chúng tôi.