Meet YOLO26: next-gen vision AI.

Link to this sectionYOLOv5'i Neural Magic DeepSparse ile dağıt#

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

Bu rehber, YOLOv5'i Neural Magic DeepSparse ile nasıl dağıtacağını açıklıyor.

DeepSparse, CPU'larda olağanüstü performans sunan bir çıkarım çalışma zamanıdır. Örneğin, ONNX Runtime temel çizgisine kıyasla DeepSparse, aynı makinede çalışırken YOLOv5s için 5,8 kat hız artışı sağlar!

YOLOv5 DeepSparse vs ONNX Runtime speed comparison chart

Derin öğrenme iş yüklerin, donanım hızlandırıcıların karmaşıklığı ve maliyeti olmadan ilk defa üretim performans taleplerini karşılayabilir. Basitçe ifade etmek gerekirse, DeepSparse sana GPU performansı ve yazılım basitliği 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ıştır
  • Sonsuz Ölçeklenebilirlik: Yüzlerce çekirdeğe dikey olarak, standart Kubernetes ile dışa doğru veya Serverless ile tamamen soyutlanmış şekilde ölçeklendir
  • Kolay Entegrasyon: Modelini bir uygulamaya entegre etmek ve üretimde izlemek için temiz API'ler

Link to this sectionDeepSparse GPU Sınıfı Performansa Nasıl Ulaşır?#

DeepSparse, performans hız artışı sağlamak için model seyrekliğinden (sparsity) yararlanır.

Budama (pruning) ve niceleme (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 azalmalar sağlayan, geniş çapta çalışılmış bir tekniktir. DeepSparse seyreklik farkındadır; yani sıfırlanmış parametreleri atlayarak ileri geçişteki (forward pass) hesaplama miktarını azaltır. Seyrek hesaplama artık bellek kısıtlı olduğundan, DeepSparse ağı derinlemesine yürütür ve problemi önbelleğe sığan dikey hesaplama şeritleri olan Tensor Sütunlarına böler.

DeepSparse tensor columns for sparse neural network inference

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

Link to this sectionVerilerimle Eğitilmiş YOLOv5'in Seyrek Versiyonunu Nasıl Oluşturabilirim?#

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

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

Link to this sectionDeepSparse Kullanımı#

DeepSparse ile YOLOv5s'in seyrek bir versiyonunun kıyaslama ve dağıtım sürecini adım adım inceleyeceğiz.

Link to this sectionDeepSparse'ı Kur#

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

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

Link to this sectionBir ONNX Dosyası Edin#

DeepSparse, modeli ONNX formatında kabul eder ve şu şekilde iletilir:

  • SparseZoo içindeki 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 saplamalarıyla tanımlanan standart yoğun ve budanmış-niceleme yapılmış 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

Link to this sectionBir Model Dağıt#

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

Aşağıdaki dağıtım örneklerini denemek için bir örnek resim çek ve aşağıdakilerle basilica.jpg olarak kaydet:

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

Link to this sectionPython API#

Pipelines, çalışma zamanı etrafında ön işleme ve çıktı son işlemesini sararak, uygulamaya DeepSparse 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ı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ışıyorsan, OpenCV'nin libGL.so.1 dosyasını bulamadığına dair bir hata alabilirsin. Eksik kütüphaneyi yükleyebilirsin:

apt-get install libgl1

Veya GUI bağımlılıklarından tamamen kaçınan başsız (headless) Ultralytics paketini kullanabilirsin:

pip install ultralytics-opencv-headless

Link to this sectionHTTP 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 hizmet uç noktası oluşturabilirsin. Sunucu, YOLOv5 ile nesne algılama dahil olmak üzere DeepSparse'dan herhangi bir Pipeline'ı destekler; böylece ham görüntüleri uç noktaya gönderebilir ve sınırlayıcı kutuları alabilirsin.

Sunucuyu budanmış-niceleme yapılmış YOLOv5s ile çalıştır:

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

Python'un requests paketini kullanan bir örnek istek:

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"]

Link to this sectionCLI ile Açıklama Ekle (Annotate CLI)#

Motorun açıklamalı bir fotoğrafı diske kaydetmesini sağlamak için annotate komutunu da kullanabilirsin. Canlı web kamerası yayınını 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.jpg

Yukarıdaki komutu çalıştırmak bir annotation-results klasörü oluşturacak ve açıklamalı görüntüyü içine kaydedecektir.

YOLOv5 detection results with bounding boxes

Link to this sectionPerformans Kıyaslaması#

DeepSparse'ın kıyaslama komut dosyasını kullanarak DeepSparse'ın YOLOv5s üzerindeki verimliliğini (throughput) 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ı.

Link to this section32'li Grup (Batch 32) Performans Karşılaştırması#

Link to this sectionONNX Runtime Temel Çizgisi#

32'li grupta 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.9025

Link to this sectionDeepSparse Yoğun Performansı#

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

32'li grupta DeepSparse, standart yoğun YOLOv5s ile saniyede 70 görüntüye ulaşır, bu ORT'ye göre 1,7 kat performans iyileştirmesidir!

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

Link to this sectionDeepSparse Seyrek Performansı#

Modele seyreklik uygulandığında, DeepSparse'ın ONNX Runtime üzerindeki performans kazanımları daha da güçlüdür.

32'li grupta DeepSparse, budanmış-niceleme yapılmış YOLOv5s ile saniyede 241 görüntüye ulaşır, bu ORT'ye göre 5,8 kat performans iyileştirmesidir!

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

Link to this section1'li Grup (Batch 1) Performans Karşılaştırması#

DeepSparse, gecikmeye duyarlı, 1'li grup senaryosu için de ONNX Runtime'a göre hız artışı sağlayabilir.

Link to this sectionONNX Runtime Temel Çizgisi#

1'li grupta 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.0921

Link to this sectionDeepSparse Seyrek Performansı#

1'li grupta DeepSparse, budanmış-niceleme yapılmış bir YOLOv5s ile saniyede 135 öğeye ulaşır, ONNX Runtime'a göre 2,8 kat performans kazancı!

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

c6i.8xlarge örnekleri VNNI talimatlarına sahip olduğundan, ağırlıklar 4'lük bloklar halinde budanırsa DeepSparse'ın verimliliği daha da artırılabilir.

1'li grupta DeepSparse, 4 blok budanmış-niceleme yapılmış YOLOv5s ile saniyede 180 öğeye ulaşır, bu ONNX Runtime'a göre 3,7 kat performans kazancı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.7375

Link to this sectionDeepSparse ile Başla#

Araştırma veya Test mi? DeepSparse Community araştırma ve test için ücretsizdir. Dokümantasyonları ile başla.

YOLOv5'i DeepSparse ile dağıtma hakkında daha fazla bilgi için Neural Magic DeepSparse belgelerine ve DeepSparse entegrasyonu hakkındaki Ultralytics blog yazısına göz at.

Katkıda bulunanlar

Yorumlar