Ultralytics YOLO27: Bekleme listesine katıl.
Başla

YOLOv5'i Neural Magic'in DeepSparse çözümüyle dağıt#

DeepSparse Kullanım Ömrünün Sonu

Neural Magic, Ocak 2025'te Red Hat tarafından satın alındı ve DeepSparse, SparseML, SparseZoo ve Sparsify'nin topluluk sürümlerini 2 Haziran 2025'te kullanımdan kaldırdı. Araçlar çalışmaya devam ediyor ancak artık güncelleme veya destek almıyor. Bakımı sürdürülen CPU hızlandırma çözümleri için OpenVINO ve ONNX entegrasyonlarına göz at.

Bu kılavuz, YOLOv5 modelinin Neural Magic DeepSparse ile nasıl dağıtılacağını açıklar. ultralytics paketindeki Neural Magic entegrasyonu da aynı işi yapar.

DeepSparse, CPU'lar için optimize edilmiş bir çıkarım çalışma zamanıdır. Aşağıdaki kıyaslamalarda budanmış ve nicemlenmiş YOLOv5s, aynı makinede ONNX Runtime ile çalışan yoğun modele kıyasla DeepSparse üzerinde 5.8 kat daha hızlı çalışır.

YOLOv5 DeepSparse vs ONNX Runtime speed comparison chart

DeepSparse, özel donanım hızlandırıcıların karmaşıklığı ve maliyeti olmadan CPU'larda derin öğrenme iş yüklerinin üretim performansı gereksinimlerini karşılamasını amaçlar:

  • Esnek Dağıtımlar: Intel'den AMD'ye ve ARM'a kadar her türlü donanım sağlayıcısıyla bulutta, veri merkezinde ve uçta tutarlı biçimde çalıştır
  • Ölçeklenebilirlik: Dikey olarak yüzlerce çekirdeğe, standart Kubernetes ile yatay olarak veya sunucusuz yapıyla tamamen soyutlanmış biçimde ölçeklen.
  • Kolay Entegrasyon: Modelini bir uygulamaya entegre etmek ve üretimde izlemek için API'ler.

DeepSparse GPU Sınıfı Performansı Nasıl Sağlar?#

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

Budama ve nicemleme yoluyla seyreltme, yüksek doğruluğu korurken bir ağı çalıştırmak için gereken boyut ve hesaplama miktarında kat kat azalma sağlayan, kapsamlı biçimde araştırılmış bir tekniktir. DeepSparse seyrekliğin farkındadır; 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 boyunca çalıştırır ve problemi önbelleğe sığan dikey hesaplama şeritleri olan Tensör Sütunlarına böler.

DeepSparse tensor columns for sparse neural network inference

DeepSparse'ın CPU'larda hızlı çıkarım yapmasını sağlayan şey, seyrek ağları önbellekte derinlik boyunca çalıştırmaktır.

Verilerimle Eğitilmiş YOLOv5'in Seyrek Sürümünü Nasıl Oluşturabilirim?#

Neural Magic'in açık kaynaklı model deposu SparseZoo, her YOLOv5 modelinin önceden seyrekleştirilmiş kontrol noktalarını içerir. Ultralytics ile entegre edilmiş SparseML aracılığıyla, tek bir CLI komutuyla seyrek bir kontrol noktasını verilerine göre ince ayarlayabilirsin.

Daha fazla bilgi için SparseML YOLOv5 entegrasyonuna göz at.

DeepSparse Kullanımı#

DeepSparse ile YOLOv5s'in seyrek bir sürümünü kıyaslayıp dağıtacağımız bir örneği adım adım inceleyeceğiz.

DeepSparse'ı yükle#

DeepSparse'ı yüklemek için aşağıdaki komutu çalıştır. Python ile bir sanal ortam kullanmanı öneririz.

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

Bir ONNX Dosyası Edin#

DeepSparse, ONNX biçiminde bir modeli şu şekillerde alabilir:

  • SparseZoo'daki bir ONNX dosyasını tanımlayan SparseZoo stub'ı
  • Dosya sistemindeki bir ONNX modelinin yerel yolu

Aşağıdaki örneklerde, şu SparseZoo stub'larıyla tanımlanan standart yoğun ve budanmış-niceleştirilmiş YOLOv5s kontrol noktaları kullanılı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#

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örsel indir ve şu komutla basilica.jpg adıyla kaydet:

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

Python API'si#

Pipelines, çalışma zamanı etrafında ön işleme ve çıktı son işleme işlevlerini sararak DeepSparse'ı bir uygulamaya eklemek için temiz bir arayüz sunar. DeepSparse-Ultralytics entegrasyonu, ham görüntüleri kabul edip sınırlayıcı kutular veren, kullanıma hazır bir Pipeline içerir.

Bir Pipeline oluştur ve çıkarım çalıştır:

from deepsparse import Pipeline

# yerel dosya sistemindeki görsellerin listesi
images = ["basilica.jpg"]

# Pipeline oluştur
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
    task="yolo",
    model_path=model_stub,
)

# görseller üzerinde çıkarım çalıştır, sınırlayıcı kutuları ve sınıfları al
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ığı yükleyebilirsin:

apt-get install libgl1

Ya da GUI bağımlılıklarını tamamen ortadan kaldıran headless OpenCV derlemesini kullanabilirsin:

pip install opencv-python-headless

HTTP Sunucusu#

DeepSparse Server, popüler FastAPI web çatısı ve Uvicorn web sunucusu üzerinde çalışır. Tek bir CLI komutuyla DeepSparse kullanarak bir model hizmet uç noktası kurabilirsin. Sunucu, YOLOv5 ile nesne algılama dâhil olmak üzere DeepSparse'ın tüm Pipeline'larını destekler; böylece uç noktaya ham görüntüler gönderip sınırlayıcı kutuları alabilirsin.

Budanmış-niceleştirilmiş YOLOv5s ile Sunucuyu başlat:

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

Python'ın requests paketini kullanan örnek bir istek:

import json
from contextlib import ExitStack

import requests

# çıkarım için görsellerin listesi (istemci tarafındaki yerel dosyalar)
path = ["basilica.jpg"]

# HTTP üzerinden /predict/from_files uç noktasına istek gönder
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)

# yanıt JSON biçiminde döndürülür
annotations = json.loads(resp.text)  # açıklama sonuçlarının sözlüğü
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

Annotate CLI#

Motorun diske açıklama eklenmiş bir fotoğraf kaydetmesini sağlamak için annotate komutunu da kullanabilirsin. Canlı web kamerası görüntüne açıklama eklemek 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ırdığında annotation-results klasörü oluşturulur ve açıklama eklenmiş görüntü bu klasöre kaydedilir.

YOLOv5 detection results with bounding boxes

Performans Karşılaştırması#

DeepSparse'ın aktarım hızını, YOLOv5s üzerinde 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 örneğinde (16 çekirdek) çalıştırıldı.

32 Batch Boyutunda Performans Karşılaştırması#

ONNX Runtime Referans Değeri#

32 batch boyutunda ONNX Runtime, standart yoğun YOLOv5s ile saniyede 42 görüntü işler:

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 Model Performansı#

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

32 toplu iş boyutunda DeepSparse, standart yoğun YOLOv5s ile saniyede 70 görüntüye ulaşır; bu, ONNX Runtime'a kıyasla 1.7 kat iyileşmedir.

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 Model Performansı#

Modele seyreklik uygulandığında DeepSparse'ın ONNX Runtime'a kıyasla performans kazanımları daha da artar.

32 toplu iş boyutunda DeepSparse, budanmış ve nicemlenmiş YOLOv5s ile saniyede 241 görüntüye ulaşır; bu, ONNX Runtime'a kıyasla 5.8 kat iyileşmedir.

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 Batch Boyutunda Performans Karşılaştırması#

DeepSparse, gecikmeye duyarlı 1 batch boyutlu senaryoda da ONNX Runtime'a kıyasla hız artışı sağlayabilir.

ONNX Runtime Referans Değeri#

1 batch boyutunda ONNX Runtime, standart yoğun YOLOv5s ile saniyede 48 görüntü işler.

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 Model Performansı#

1 toplu iş boyutunda DeepSparse, budanmış ve nicemlenmiş YOLOv5s ile saniyede 135 öğeye ulaşır; bu, ONNX Runtime'a kıyasla 2.8 kat artıştı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.9468

c6i.8xlarge örneklerinde VNNI talimatları bulunduğundan, ağırlıklar 4'lük bloklar hâlinde budanırsa DeepSparse'ın aktarım hızı daha da artırılabilir.

1 toplu iş boyutunda DeepSparse, 4 bloklu, budanmış ve nicemlenmiş YOLOv5s ile saniyede 180 öğeye ulaşır; bu, ONNX Runtime'a kıyasla 3.7 kat artıştı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

DeepSparse'ı Kullanmaya Başla#

Araştırma veya Test mi Yapıyorsun? DeepSparse Community, araştırma ve test için ücretsizdir. DeepSparse README ile başlayabilirsin.

DeepSparse ile YOLOv5 dağıtımı hakkında daha fazla bilgi için DeepSparse YOLOv5 örneklerine ve Ultralytics blogundaki DeepSparse entegrasyonu yazısına göz at.

Sık Sorulan Sorular#

  • Hayır. DeepSparse, CPU üzerinde çalışan bir çalışma zamanıdır ve yukarıdaki kıyaslamalar herhangi bir hızlandırıcı kullanılmadan 16 çekirdekli bir AWS c6i.8xlarge örneğinde ölçülmüştür.

  • python export.py --weights best.pt --include onnx ile ONNX biçimine aktar ve dosya yolunu SparseZoo stub'ı yerine model_path olarak belirt. Yoğun modeller çalışma zamanından yine de yararlanır; budanmış ve kuantize edilmiş modeller ise en büyük kazanımı sağlar.

  • Seyreklik yapısını eğitim sırasında koruyan SparseML ile önceden seyrekleştirilmiş SparseZoo kontrol noktalarından birini kendi verin üzerinde ince ayarla, ardından ONNX biçimine aktar.

  • Hayır. Topluluk sürümleri 2 Haziran 2025'te kullanımdan kaldırıldı ve PyPI'daki paketler donduruldu. Mevcut işlem hatları çalışmaya devam ediyor; ancak yeni dağıtımlar, etkin olarak sürdürülen OpenVINO veya ONNX Runtime seçeneklerini değerlendirmeli.

Yorumlar

Bir soru sor, sonuçlarını paylaş veya başka birine yardım et.