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!
İ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.
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.
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.