İçeriğe geç

Neural Magic'in DeepSparse'u ile YOLOv5'i dağıtın

Yazılım tabanlı yapay zekaya hoş geldiniz.

Bu kılavuz, YOLOv5'in Neural Magic'in DeepSparse'si ile nasıl dağıtılacağını açıklamaktadır.

DeepSparse, CPU'larda olağanüstü performansa sahip bir çıkarım çalışma zamanıdır. Örneğin, ONNX Runtime temeliyle karşılaştırıldığında DeepSparse, aynı makinede çalışan YOLOv5s için 5,8 kat hızlanma sunar!

YOLOv5 hız iyileştirmesi

İlk kez, derin öğrenme iş yükleriniz, donanım hızlandırıcılarının karmaşıklığı ve maliyetleri olmadan üretimin performans taleplerini karşılayabilir. Basitçe söylemek gerekirse, DeepSparse size GPU'ların performansını ve yazılımın basitliğini sunar:

  • Esnek Dağıtımlar: Intel'den AMD'ye ve ARM'ye kadar herhangi bir donanım sağlayıcısıyla bulut, veri merkezi ve uç noktalarda tutarlı bir şekilde çalışır
  • Sonsuz Ölçeklenebilirlik: Standart Kubernetes ile dikey olarak 100'lerce çekirdeğe veya Sunucusuz ile tamamen soyutlanmış şekilde ölçeklendirin
  • Kolay Entegrasyon: Modelinizi bir uygulamaya entegre etmek ve üretimde izlemek için temiz API'ler

DeepSparse, GPU Sınıfı Performansı Nasıl Elde Ediyor?

DeepSparse, performans hızlandırması elde etmek için model seyrekliğinden yararlanır.

Budama ve nicemleme yoluyla seyrekleştirme, yüksek doğruluğu korurken, bir ağı yürütmek için gereken boyut ve hesaplama miktarında önemli ölçüde azalma sağlayan, yaygın olarak çalışılan bir tekniktir. DeepSparse, seyreklik konusunda duyarlıdır, yani sıfırlanmış parametreleri atlayarak ileri geçişteki hesaplama miktarını azaltır. Seyrek hesaplama artık bellek sınırlı olduğundan, DeepSparse ağı derinlemesine yürütür ve sorunu önbelleğe sığan Tensor Sütunlarına, dikey hesaplama şeritlerine böler.

YOLO model budaması

Sıkıştırılmış hesaplamaya sahip seyrek ağlar, önbellekte derinlemesine yürütülerek DeepSparse'ın CPU'larda GPU sınıfı performans sunmasını sağlar!

Verilerim Üzerinde Eğitilmiş YOLOv5'in Seyrek Bir Sürümünü Nasıl Oluşturabilirim?

Neural Magic'in açık kaynaklı model deposu SparseZoo, her YOLOv5 modelinin önceden seyreltilmiş kontrol noktalarını içerir. Ultralytics ile entegre edilmiş SparseML kullanarak, tek bir CLI komutuyla seyrek bir kontrol noktasını verileriniz üzerinde ince ayar yapabilirsiniz.

Daha fazla ayrıntı için Neural Magic'in YOLOv5 belgelerine göz atın.

DeepSparse Kullanımı

DeepSparse ile YOLOv5s'in seyrek bir sürümünü kıyaslama ve dağıtma örneğini inceleyeceğiz.

DeepSparse'ı Kur

DeepSparse'ı kurmak için aşağıdakileri çalıştırın. Python ile sanal bir ortam kullanmanızı öneririz.

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

Bir ONNX Dosyası Toplayın

DeepSparse, bir modeli ONNX biçiminde kabul eder ve şu şekilde iletilir:

  • SparseZoo'daki bir ONNX dosyasını tanımlayan bir SparseZoo saplaması
  • Bir dosya sistemindeki bir ONNX modelinin yerel yolu

Aşağıdaki örnekler, aşağıdaki SparseZoo saplamalarıyla tanımlanan standart yoğun ve budanmış-nicelenmiş YOLOv5s kontrol noktalarını kullanır:

zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Modeli Dağıt

DeepSparse, modelinizi bir uygulamaya entegre etmek için kullanışlı API'ler sunar.

Aşağıdaki dağıtım örneklerini denemek için, örnek bir görüntü çekin ve şu şekilde kaydedin: basilica.jpg aşağıdakilerle birlikte:

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

python API

Pipelines DeepSparse'ı bir uygulamaya eklemek için temiz bir arayüz sağlayarak, çalışma zamanı etrafında ön işleme ve çıktı son işlemeyi sarar. DeepSparse-Ultralytics entegrasyonu kullanıma hazır bir şekilde gelir Pipeline ham görüntüleri kabul eden ve sınırlayıcı kutuları çıktı olarak veren.

Bir tane oluşturun Pipeline ve çıkarımı çalıştırı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)

Bulutta çalışıyorsanız, open-cv'nin bulamadığına dair bir hata alabilirsiniz libGL.so.1. Ubuntu'ya aşağıdakini çalıştırarak kurabilirsiniz:

apt-get install libgl1

HTTP Sunucusu

DeepSparse Sunucusu, popüler FastAPI web çerçevesi ve Uvicorn web sunucusu üzerinde çalışır. Tek bir CLI komutuyla, DeepSparse ile kolayca bir model hizmeti uç noktası kurabilirsiniz. Sunucu, YOLOv5 ile nesne algılama dahil olmak üzere DeepSparse'dan herhangi bir İşlem Hattını destekler ve uç noktaya ham görüntüler göndermenize ve sınırlayıcı kutuları almanıza olanak tanır.

Kırpılmış-nicemlenmiş YOLOv5s ile Sunucuyu başlatın:

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

Python'ın kullanıldığı bir örnek istek: requests paketi:

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'yı Açıklama

Motorun disk üzerine açıklamalı bir fotoğraf kaydetmesini sağlamak için annotate komutunu da kullanabilirsiniz. Deneyin: --source 0 canlı web kamerası akışınızı açıklamak için!

deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpg

Yukarıdaki komutu çalıştırmak bir annotation-results klasörüne ve açıklama eklenmiş görüntüyü içine kaydedin.

açıklamalı

Performansı Kıyaslama

DeepSparse'ın kıyaslama betiğini kullanarak, DeepSparse'ın üretkenliğini YOLOv5s üzerindeki ONNX Runtime'ın üretkenliğiyle karşılaştıracağız.

Kıyaslamalar bir AWS üzerinde çalıştırıldı c6i.8xlarge örneği (16 çekirdek).

32. Parti Performans Karşılaştırması

ONNX Çalışma Zamanı Temel Çizgisi

32. grupta, ONNX Runtime standart yoğun YOLOv5s ile 42 resim/sn hıza ulaşıyor:

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

DeepSparse Yoğun Performans

DeepSparse, optimize edilmiş seyrek modellerle en iyi performansı sunarken, standart yoğun YOLOv5s ile de iyi performans gösterir.

32. grupta, DeepSparse standart yoğun YOLOv5s ile 70 resim/sn hıza ulaşıyor, ORT'ye göre 1.7 kat performans iyileştirmesi!

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

DeepSparse Seyrek Performans

Modelde seyreklik uygulandığında, DeepSparse'ın ONNX Runtime üzerindeki performans kazanımları daha da güçlenir.

32. grupta, DeepSparse budanmış-nicelenmiş YOLOv5s ile 241 resim/sn hıza ulaşıyor, ORT'ye göre 5.8 kat performans iyileştirmesi!

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

1. Parti Performans Karşılaştırması

DeepSparse ayrıca, gecikmeye duyarlı, 1'lik yığın senaryosu için ONNX Runtime'a göre bir hızlanma elde edebilir.

ONNX Çalışma Zamanı Temel Çizgisi

1. grupta, ONNX Runtime standart, yoğun YOLOv5s ile 48 resim/sn hıza ulaşıyor.

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

DeepSparse Seyrek Performans

1. grupta, DeepSparse budanmış-nicelenmiş bir YOLOv5s ile 135 öğe/sn hıza ulaşıyor, ONNX Runtime'a göre 2.8 kat performans artışı!

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

Çünkü c6i.8xlarge örneklerinde VNNI talimatları varsa, ağırlıklar 4'lük bloklar halinde budanırsa DeepSparse'ın verimi daha da artırılabilir.

1. grupta, DeepSparse 4 bloklu budanmış-nicelenmiş bir YOLOv5s ile 180 öğe/sn hıza ulaşıyor, ONNX Runtime'a göre 3.7 kat performans artışı!

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

DeepSparse ile Başlayın

Araştırma mı Yoksa Test mi? DeepSparse Topluluğu, araştırma ve test için ücretsizdir. Belgeleriyle başlayın.

YOLOv5'i DeepSparse ile dağıtma hakkında daha fazla bilgi için Neural Magic'in DeepSparse dökümanlarına ve Ultralytics'in DeepSparse entegrasyonu hakkındaki blog gönderisine göz atın.



📅 1 yıl önce oluşturuldu ✏️ 2 ay önce güncellendi

Yorumlar