Neural Magic'in DeepSparse
Yazılım destekli yapay zekaya hoş geldiniz.
Bu kılavuzda YOLOv5 adresinin Neural Magic's DeepSparse ile nasıl dağıtılacağı açıklanmaktadır.
DeepSparse, CPU'larda olağanüstü performansa sahip bir çıkarım çalışma zamanıdır. Örneğin, ONNX Runtime taban çizgisine kıyasla DeepSparse, aynı makinede çalışan YOLOv5'ler için 5,8 kat hız artışı sunuyor!
İ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 'dan AMD'ye ve ARM'ye kadar herhangi bir donanım sağlayıcısıyla bulut, veri merkezi ve uçta tutarlı bir şekilde çalıştırın
- Sonsuz Ölçeklenebilirlik: Standart Kubernetes ile dikey olarak 100'lerce çekirdeğe ölçeklendirin veya Sunucusuz ile tamamen soyutlayın
- 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ızını artırmak için model seyrekliğinden yararlanır.
Budama ve niceleme yoluyla seyrekleştirme, yüksek doğruluğu korurken bir ağı yürütmek için gereken boyut ve hesaplamada büyüklük sırasına göre azalmalara izin veren geniş çapta çalışılmış bir tekniktir. DeepSparse seyrekliğe duyarlıdır, yani sıfırlanmış parametreleri atlayarak ileri geçişte hesaplama miktarını azaltır. Seyrek hesaplama artık belleğe bağlı olduğundan, DeepSparse ağı derinlemesine yürütür ve sorunu önbelleğe sığan dikey hesaplama şeritleri olan Tensor Sütunlarına böler.
Önbellekte derinlemesine yürütülen sıkıştırılmış hesaplamaya sahip seyrek ağlar, DeepSparse'ın CPU'larda GPU sınıfı performans sunmasını sağlar!
Verilerim Üzerinde Eğitilmiş YOLOv5 'un Seyrek Bir Sürümünü Nasıl Oluşturabilirim?
Neural Magic'in açık kaynaklı model deposu SparseZoo, her YOLOv5 modelinin önceden ayrıştırılmış kontrol noktalarını içerir. Ultralytics ile entegre olan SparseML'i kullanarak, tek bir CLI komutuyla seyrek bir kontrol noktasını verilerinize ince ayar yapabilirsiniz.
Daha fazla ayrıntı için Neural Magic'un YOLOv5 belgelerine göz atın.
DeepSparse Kullanımı
DeepSparse ile YOLOv5s'in seyrek bir versiyonunu kıyaslayan ve dağıtan bir örnek üzerinden yürüyeceğiz.
DeepSparse'ı yükleyin
DeepSparse'ı yüklemek için aşağıdakileri çalıştırın. Python ile sanal bir ortam kullanmanızı öneririz.
Bir ONNX Dosyası Toplayın
DeepSparse, ONNX biçiminde bir model kabul eder ve şu şekilde aktarılır:
- SparseZoo'daki bir ONNX dosyasını tanımlayan bir SparseZoo saplaması
- Dosya sistemindeki bir ONNX modeline giden yerel bir yol
Aşağıdaki örnekler, aşağıdaki SparseZoo taslakları ile tanımlanan standart yoğun ve budanmış-kuvantize YOLOv5s kontrol noktalarını kullanmaktadır:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
Bir Model Dağıtın
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üyü aşağı çekin ve şu şekilde kaydedin basilica.jpg
aşağıdaki ile:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
Python API
Pipelines
ön işleme ve çıktı son işlemeyi çalışma zamanının etrafına sararak bir uygulamaya DeepSparse eklemek için temiz bir arayüz sağlar. DeepSparse-Ultralytics entegrasyonu, kullanıma hazır bir Pipeline
Ham görüntüleri kabul eder ve sınırlayıcı kutuları çıktı olarak verir.
Oluşturmak 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ığı bir hata alabilirsiniz libGL.so.1
. Ubuntu'da aşağıdakileri çalıştırmak yükler:
HTTP Sunucusu
DeepSparse Server, popüler FastAPI web çerçevesi ve Uvicorn web sunucusu üzerinde çalışır. Sadece tek bir CLI komutuyla DeepSparse ile kolayca bir model hizmet uç noktası kurabilirsiniz. Sunucu, YOLOv5 ile nesne algılama da dahil olmak üzere DeepSparse'tan herhangi bir Pipeline'ı destekler ve uç noktaya ham görüntüler göndermenize ve sınırlayıcı kutuları almanıza olanak tanır.
Sunucuyu budanmış-kuvantize edilmiş YOLOv5'lerle çalıştırın:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
Python'u kullanan örnek bir istek requests
Paket:
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"]
Ek açıklama CLI
Motorun açıklamalı bir fotoğrafı diske kaydetmesini sağlamak için annotate komutunu da kullanabilirsiniz. Canlı web kamerası akışınıza açıklama eklemek için --source 0 komutunu deneyin!
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ünü açın ve açıklamalı görüntüyü içine kaydedin.
Performans Karşılaştırması
DeepSparse'ın kıyaslama betiğini kullanarak DeepSparse'ın verimini ONNX Runtime'ın YOLOv5s üzerindeki verimiyle karşılaştıracağız.
Kıyaslamalar bir AWS üzerinde çalıştırıldı c6i.8xlarge
örneği (16 çekirdek).
Batch 32 Performans Karşılaştırması
ONNX Çalışma Zamanı Temel Çizgisi
Toplu iş 32'de, ONNX Çalışma Zamanı standart yoğun YOLOv5'lerle 42 görüntü/sn'ye ulaşır:
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 en iyi performansını optimize edilmiş seyrek modellerle sunarken, standart yoğun YOLOv5'lerle de iyi performans gösterir.
Yığın 32'de DeepSparse, standart yoğun YOLOv5'lerle 70 görüntü/sn'ye ulaşarak ORT'ye göre 1,7 kat performans artışı sağlıyor!
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
Modele seyreklik uygulandığında, DeepSparse'ın ONNX Runtime'a göre performans kazanımları daha da güçlüdür.
Yığın 32'de DeepSparse, budanmış-kuvantize edilmiş YOLOv5'lerle 241 görüntü/sn elde ederek ORT'ye göre 5,8 kat performans artışı sağlıyor!
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
Parti 1 Performans Karşılaştırması
DeepSparse ayrıca gecikmeye duyarlı toplu iş 1 senaryosu için ONNX Runtime'a göre hız kazanabilmektedir.
ONNX Çalışma Zamanı Temel Çizgisi
Parti 1'de, ONNX Çalışma Zamanı standart, yoğun YOLOv5'lerle 48 görüntü/sn'ye ulaşır.
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
Yığın 1'de DeepSparse, budanmış-kuvantize YOLOv5s ile 135 öğe/sn'ye ulaşarak ONNX Runtime' a göre 2,8 kat performans artışı sağlar!
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
O zamandan beri c6i.8xlarge
örneklerinde VNNI talimatları varsa, ağırlıklar 4'lü bloklar halinde budanırsa DeepSparse'ın verimi daha da artırılabilir.
Toplu iş 1'de DeepSparse, 4 bloklu budanmış-kuvantize YOLOv5'lerle 180 öğe/sn'ye ulaşarak ONNX Çalışma Zamanına göre 3,7 kat performans artışı sağlar!
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ı Test mi? DeepSparse Topluluğu araştırma ve test için ücretsizdir. Dokümantasyonumuz ile başlayın.