YOLOv5'i Neural Magic'in DeepSparse'ı ile dağıtma#
Yazılımla sunulan yapay zekâya hoş geldin.
Bu kılavuz, YOLOv5'in Neural Magic'in DeepSparse'ı ile nasıl dağıtılacağını açıklar.
DeepSparse, CPU'larda olağanüstü performans sunan bir çıkarım çalışma zamanıdır. Örneğin DeepSparse, ONNX Runtime temel değerine kıyasla YOLOv5s için aynı makinede 5,8 kat hızlanma sağlar!
İlk kez, derin öğrenme iş yüklerin donanım hızlandırıcılarının karmaşıklığı ve maliyetleri olmadan üretim performansı gereksinimlerini karşılayabilir. Basitçe söylemek gerekirse DeepSparse, sana GPU performansını ve yazılımın basitliğini sunar:
- Esnek Dağıtımlar: Intel'den AMD'ye ve ARM'a kadar tüm donanım sağlayıcılarıyla bulutta, veri merkezinde ve uçta tutarlı şekilde çalıştır
- Sonsuz Ölçeklenebilirlik: Dikey olarak yüzlerce çekirdeğe ölçekle, standart Kubernetes ile yatay olarak ölçeklendir veya Serverless ile tamamen soyutlanmış şekilde çalıştır
- Kolay Entegrasyon: Modelini bir uygulamaya entegre etmek ve üretimde izlemek için temiz API'ler
DeepSparse GPU Sınıfı Performansı Nasıl Elde Eder?#
DeepSparse, performans artışı elde etmek için model seyrekliğinden yararlanır.
Budama ve niceleme yoluyla seyreltme, yaygın olarak incelenen bir tekniktir; yüksek doğruluğu korurken bir ağı çalıştırmak için gereken boyutu ve hesaplamayı büyüklük sıralarıyla azaltmayı sağlar. DeepSparse seyreklik farkındalığına sahiptir; yani sıfırlanmış parametreleri atlayarak ileri geçişteki hesaplama miktarını azaltır. Seyrek hesaplama artık bellekle sınırlı olduğundan DeepSparse, ağı derinlik yönünde çalıştırır ve problemi önbelleğe sığan dikey hesaplama şeritleri olan Tensor Columns'a ayırır.
Önbellekte derinlik yönünde 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!
Verilerimle Eğitilmiş YOLOv5'in Seyrek Bir Sürümünü Nasıl Oluştururum?#
Neural Magic'in açık kaynaklı model deposu SparseZoo, her YOLOv5 modelinin önceden seyreltilmiş checkpoint'lerini içerir. Ultralytics ile entegre olan SparseML'i kullanarak tek bir CLI komutuyla seyrek bir checkpoint'i verilerine göre ince ayar yapabilirsin.
Daha fazla ayrıntı için Neural Magic'in YOLOv5 belgelerine göz at.
DeepSparse Kullanımı#
DeepSparse ile YOLOv5s'in seyrek bir sürümünü kıyaslayıp dağıtmaya yönelik bir örneği adım adım inceleyeceğiz.
DeepSparse'ı Yükleme#
DeepSparse'ı yüklemek için aşağıdakini çalıştır. Python içeren bir sanal ortam kullanmanı öneririz.
pip install "deepsparse[server,yolo,onnxruntime]"ONNX Dosyası Toplama#
DeepSparse, ONNX biçiminde bir modeli aşağıdaki seçeneklerden biri olarak kabul eder:
- SparseZoo'daki bir ONNX dosyasını tanımlayan SparseZoo stub'ı
- Dosya sistemindeki bir ONNX modeline giden yerel yol
Aşağıdaki örneklerde, şu SparseZoo stub'larıyla tanımlanan standart yoğun ve budanmış-nicelenmiş YOLOv5s checkpoint'leri kullanılır:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneModel Dağıtma#
DeepSparse, modelini 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ü indir ve aşağıdaki komutla basilica.jpg olarak kaydet:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgPython API#
Pipelines, çalışma zamanının etrafına ön işleme ve çıktı son işleme adımlarını ekleyerek DeepSparse'ı bir uygulamaya dahil etmek için temiz bir arayüz sağlar. DeepSparse-Ultralytics entegrasyonu, ham görüntüleri kabul edip sınırlayıcı kutuları çıktılayan kullanıma hazır bir Pipeline içerir.
Bir Pipeline oluştur ve çıkarımı çalıştır:
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ıştırıyorsan OpenCV'nin libGL.so.1 dosyasını bulamadığına dair bir hata alabilirsin. Eksik kitaplığı şu komutla yükleyebilirsin:
apt-get install libgl1Alternatif olarak, GUI bağımlılıklarını tamamen ortadan kaldıran başsız Ultralytics paketini kullan:
pip install ultralytics-opencv-headlessHTTP Sunucusu#
DeepSparse Server, popüler FastAPI web çatısı ve Uvicorn web sunucusu üzerinde çalışır. Yalnızca tek bir CLI komutuyla DeepSparse ile kolayca bir model hizmeti uç noktası oluşturabilirsin. Server, DeepSparse'taki nesne algılama dahil tüm Pipeline'ları destekler; böylece uç noktaya ham görüntüler gönderip sınırlayıcı kutuları alabilirsin.
Budanmış-nicelenmiş YOLOv5s ile Server'ı başlat:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-nonePython'un requests paketini kullanan örnek bir istek:
import json
from contextlib import ExitStack
import requests
# list of images for inference (local files on client side)
path = ["basilica.jpg"]
# send request over HTTP to /predict/from_files endpoint
url = "http://0.0.0.0:5543/predict/from_files"
with ExitStack() as stack:
files = [("request", stack.enter_context(open(img, "rb"))) for img in path]
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"]Açıklama CLI'sı#
Motorun diske açıklamalı bir fotoğraf kaydetmesini sağlamak için annotate komutunu da kullanabilirsin. Canlı web kameranı açıklamak için --source 0 komutunu dene!
deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpgYukarıdaki komutu çalıştırmak bir annotation-results klasörü oluşturur ve açıklamalı görüntüyü içine kaydeder.
Performans Kıyaslama#
DeepSparse'ın YOLOv5s üzerindeki aktarım hızını, DeepSparse'ın kıyaslama betiğini kullanarak ONNX Runtime'ın aktarım hızıyla karşılaştıracağız.
Kıyaslamalar, bir AWS c6i.8xlarge bulut sunucusunda (16 çekirdek) çalıştırıldı.
Batch 32 Performans Karşılaştırması#
ONNX Runtime Temel Değeri#
Batch 32'de ONNX Runtime, standart yoğun YOLOv5s ile saniyede 42 görüntü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.9025DeepSparse Yoğun Model Performansı#
DeepSparse en iyi performansını optimize edilmiş seyrek modellerle sunsa da standart yoğun YOLOv5s ile de iyi performans gösterir.
Batch 32'de DeepSparse, standart yoğun YOLOv5s ile saniyede 70 görüntüye ulaşır; bu, ORT'ye göre 1,7 kat performans artışıdır!
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.5546DeepSparse Seyrek Model Performansı#
Modele seyreklik uygulandığında DeepSparse'ın ONNX Runtime üzerindeki performans kazanımları daha da güçlenir.
Batch 32'de DeepSparse, budanmış-nicelenmiş YOLOv5s ile saniyede 241 görüntüye ulaşır; bu, ORT'ye göre 5,8 kat performans artışıdır!
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.2452Batch 1 Performans Karşılaştırması#
DeepSparse, gecikmeye duyarlı batch 1 senaryosunda da ONNX Runtime'a kıyasla hızlanma sağlayabilir.
ONNX Runtime Temel Değeri#
Batch 1'de ONNX Runtime, standart yoğun YOLOv5s ile saniyede 48 görüntü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.0921DeepSparse Seyrek Model Performansı#
Batch 1'de DeepSparse, budanmış-nicelenmiş YOLOv5s ile saniyede 135 öğeye ulaşır; bu, ONNX Runtime'a göre 2,8 kat performans kazanımıdır!
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.9468c6i.8xlarge örnekleri VNNI yönergelerine sahip olduğundan ağırlıklar 4'lük bloklar hâlinde budanırsa DeepSparse'ın aktarım hızı daha da artırılabilir.
Batch 1'de DeepSparse, 4 bloklu budanmış-nicelenmiş YOLOv5s ile saniyede 180 öğeye ulaşır; bu, ONNX Runtime'a göre 3,7 kat performans kazanımıdır!
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.7375DeepSparse ile Başla#
Araştırma veya Test mi Yapıyorsun? DeepSparse Community, araştırma ve test için ücretsizdir. Belgeleri ile başla.
YOLOv5'i DeepSparse ile dağıtma hakkında daha fazla bilgi için Neural Magic'in DeepSparse belgelerine ve Ultralytics'in DeepSparse entegrasyonu hakkındaki blog gönderisine göz at.