CPU'larda GPU Sınıfı Performans için Ultralytics YOLOv5'i Neural Magic'in DeepSparse'ı ile Dağıt
CPU'larda GPU sınıfı performans için Neural Magic'in DeepSparse'ı ile Ultralytics YOLOv5 model eğitimini ve dağıtımını güçlendir. Daha hızlı, ölçeklenebilir YOLOv5 dağıtımlarına ulaş.

YOLOv5 modellerinin eğitimini ve dağıtımını hızlandırmak mı istiyorsun? Hazırlığımız tamam! En yeni iş ortağımız Neural Magic ile tanışın. Neural Magic, en yüksek model performansını ve iş akışı basitliğini vurgulayan yazılım araçları sağladığı için YOLOv5 dağıtım sürecini daha da iyi hale getirecek bir çözüm sunmak üzere bir araya gelmemiz son derece doğal.
DeepSparse, standart donanımda olağanüstü performans sunmak için sinir ağlarındaki seyreklik (sparsity) ve düşük hassasiyetli aritmetikten yararlanan Neural Magic’in CPU çıkarım çalışma zamanıdır. Örneğin, ONNX Runtime taban çizgisine kıyasla DeepSparse, aynı makinede çalışan YOLOv5s için 5,8 kat hızlanma sunar!

Derin öğrenme iş yüklerin, ilk defa donanım hızlandırıcılarının karmaşıklığı ve maliyeti olmadan üretimin performans taleplerini karşılayabilir. Basitçe ifade etmek gerekirse, DeepSparse sana GPU performansı ve yazılım basitliği sunar:
- Esnek Dağıtımlar: Bulut, veri merkezi ve uç noktalarda herhangi bir donanım sağlayıcısı ile tutarlı bir şekilde çalıştır
- Sonsuz Ölçeklenebilirlik: Standart Kubernetes ile ölçeği genişlet, 100'lerce çekirdeğe dikey olarak çık veya sunucusuz (serverless) yapıyla tamamen soyutla
- Kolay Entegrasyon: Modelini bir uygulamaya entegre etmek ve üretimde izlemek için temiz API'lar kullan
Standart CPU'larda GPU Sınıfı Performansa Ulaş#
DeepSparse, performans artışı sağlamak için model seyrekliğinden (sparsity) yararlanır.
Budama (pruning) ve nicemleme (quantization) yoluyla seyrekleştirme, yüksek doğruluğu korurken bir ağı çalıştırmak için gereken boyut ve hesaplamada büyüklük derecesinde azalmalara olanak tanır. DeepSparse, seyreklik farkındalığına sahiptir; sıfır olan çarpma-toplama işlemlerini atlar ve ileri geçişteki (forward pass) hesaplama miktarını küçültür. Seyrek hesaplama bellek sınırlı olduğundan, DeepSparse ağı derinlemesine yürütür ve problemi önbelleğe sığan dikey hesaplama şeritleri olan Tensor Columns'a böler.

Sıkıştırılmış hesaplamaya sahip ve önbellekte derinlemesine yürütülen seyrek ağlar, DeepSparse'in CPU'larda GPU sınıfı performans sunmasını sağlar!
Özel Verilerle Eğitilmiş Bir Ultralytics YOLOv5 Seyrek Sürümünü Oluştur#
Neural Magic'in açık kaynaklı model deposu SparseZoo, her bir YOLOv5 modelinin önceden seyrekleştirilmiş kontrol noktalarını içerir. Ultralytics ile entegre olan SparseML'i kullanarak, tek bir CLI komutuyla seyrek bir kontrol noktasını verilerine göre ince ayar (fine-tune) yapabilirsin.
DeepSparse ile Ultralytics YOLOv5 Modelini Dağıt#
DeepSparse'i Yükle#
DeepSparse'i yüklemek için aşağıdakini çalıştır. Python ile bir sanal ortam kullanmanı öneririz.
pip install deepsparse[server,yolo,onnxruntime]Bir ONNX Dosyası Edin#
DeepSparse, modeli ONNX formatında kabul eder ve şu şekilde iletilir:
- Bir ONNX modeline giden yerel bir yol
- SparseZoo'daki bir modeli tanımlayan bir SparseZoo kısa yolu (stub)
Standart yoğun (dense) YOLOv5s'i, aşağıdaki SparseZoo kısa yolları ile tanımlanan budanmış-nicemlenmiş (pruned-quantized) YOLOv5s ile karşılaştıracağız:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneBir Model Dağıt#
DeepSparse, modelini bir uygulamaya entegre etmek için kullanışlı API'lar sunar.
Aşağıdaki dağıtım örneklerini denemek için, örnek bir görseli şu komutla basilica.jpg olarak kaydet ve indir:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgPython API#
Pipeline'lar, çalışma zamanının etrafında ön işleme ve çıktı sonrası işlemeyi sarmalar ve DeepSparse'i bir uygulamaya eklemek için temiz bir arayüz sağlar. DeepSparse-Ultralytics entegrasyonu, ham görüntüleri kabul eden ve sınırlayıcı kutuları (bounding boxes) çıktı olarak veren 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ışıyorsan, open-cv'nin libGL.so.1 dosyasını bulamadığına dair bir hata alabilirsin. Ubuntu üzerinde aşağıdakini çalıştırmak bunu kuracaktır:
apt-get install libgl1-mesa-glxHTTP Sunucusu#
DeepSparse Server, popüler FastAPI web çatısı ve Uvicorn web sunucusu üzerinde çalışır. Tek bir CLI komutuyla DeepSparse kullanarak kolayca bir model servis uç noktası kurabilirsin. Sunucu, Ultralytics YOLOv5 ile nesne tespiti dahil olmak üzere DeepSparse'tan herhangi bir Pipeline'ı destekler; böylece ham görüntüleri uç noktaya gönderip sınırlayıcı kutuları alabilirsin.
Sunucuyu budanmış-nicemlenmiş YOLOv5s ile çalıştır:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-nonePython'ın requests paketini kullanan bir örnek istek:
import requests, json
# 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"]Annotate CLI#
Motorun diskte açıklamalı (annotated) bir fotoğraf kaydetmesini sağlamak için annotate komutunu da kullanabilirsin. Canlı web kamerası akışını açıklamak için --source 0 kullanmayı 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şturacak ve açıklamalı görüntüyü içine kaydedecektir.

Performans Karşılaştırması#
DeepSparse'in kıyaslama (benchmarking) betiğini kullanarak, DeepSparse'in YOLOv5s üzerindeki verimliliğini ONNX Runtime'ın verimliliği ile karşılaştıracağız.
Kıyaslamalar bir AWS c6i.8xlarge örneğinde (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 42 görüntü/sn elde eder:
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntimeOrijinal Model Yolu: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Toplu İş Boyutu: 32 Senaryo: sync İş Çıkışı (öğe/sn): 41.9025
DeepSparse Yoğun 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 70 görüntü/sn elde eder—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 1Orijinal Model Yolu: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Toplu İş Boyutu: 32 Senaryo: sync İş Çıkışı (öğe/sn): 69.5546
DeepSparse Seyrek Performans#
Modele seyreklik uygulandığında, DeepSparse'in ONNX Runtime'a karşı performans kazançları daha da güçlü hale gelir.
Batch 32'de DeepSparse, budanmış-nicemlenmiş YOLOv5s ile 241 görüntü/sn elde eder—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 1Orijinal Model Yolu: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Toplu İş Boyutu: 32 Senaryo: sync İş Çıkışı (öğe/sn): 241.2452
Batch 1 Performans Karşılaştırması#
DeepSparse, gecikmeye duyarlı batch 1 senaryosu için de ONNX Runtime'a göre hız artışı sağlayabilir.
ONNX Runtime Temel Değeri#
Batch 1'de ONNX Runtime, standart yoğun YOLOv5s ile 48 görüntü/sn elde eder.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntimeOrijinal Model Yolu: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Toplu İş Boyutu: 1 Senaryo: sync İş Çıkışı (öğe/sn): 48.0921
DeepSparse Seyrek Performans#
Modele seyreklik uygulandığında, DeepSparse'in ONNX Runtime'a karşı performans kazançları daha da güçlü hale gelir.
Batch 1'de DeepSparse, budanmış-nicemlenmiş YOLOv5s ile 135 görüntü/sn elde eder—ONNX Runtime'a göre 2.8 kat performans iyileştirmesi!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1Orijinal Model Yolu: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Toplu İş Boyutu: 1 Senaryo: sync İş Çıkışı (öğe/sn): 134.9468
c6i.8xlarge örnekleri VNNI yönergelerine sahip olduğundan, ağırlıklar 4'lü bloklar halinde budanırsa DeepSparse'in verimliliği daha da artırılabilir.
Batch 1'de DeepSparse, 4 bloklu budanmış-nicemlenmiş YOLOv5s ile 180 öğe/sn elde eder—ONNX Runtime'a göre 3.7 kat performans kazancı!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1Orijinal Model Yolu: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni Toplu İş Boyutu: 1 Senaryo: sync İş Çıkışı (öğe/sn): 179.7375
Ve işte! YOLOv5 dağıtımını DeepSparse ile optimize etmeye hazırsın.
Ultralytics YOLOv5 ve DeepSparse ile Başla#
Bizimle iletişime geçmek için topluluğumuza katıl ve soru ile yorumlarını bizimle paylaş. Ultralytics YOLOv5 deposunu ve YOLOv5 dağıtımı için eksiksiz Neural Magic belgelerini incele.
Ultralytics olarak, YOLOv5 gibi harika açık kaynaklı araçlarımızı herkes için ücretsiz tutmak adına araştırma ve geliştirme çalışmalarımızı finanse etmemize yardımcı olmaları için diğer girişimlerle ticari ortaklıklar kuruyoruz. Bu makale, bu ortaklara ait satış ortaklığı bağlantıları içerebilir.






