YOLOv5'i Neural Magic'in DeepSparse çözümüyle dağıt#
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.
Yazılımın sunduğu yapay zekâya hoş geldin.
Bu kılavuz, YOLOv5'i Neural Magic'in DeepSparse çözümüyle nasıl dağıtacağını açıklar.
DeepSparse, CPU'larda olağanüstü performans sunan bir çıkarım çalışma zamanıdır. Örneğin DeepSparse, aynı makinede çalışırken ONNX Runtime temel çizgisine kıyasla YOLOv5s için 5.8 kat hız artışı sağlar!
Donanım hızlandırıcıların karmaşıklığı ve maliyeti olmadan, derin öğrenme iş yüklerin ilk kez üretim ortamının performans gereksinimlerini karşılayabilir. Basitçe söylemek gerekirse DeepSparse, GPU performansını yazılımın kolaylığıyla sunar:
- 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
- Sınırsız Ölçeklenebilirlik: Dikey olarak yüzlerce çekirdeğe, standart Kubernetes ile yatay olarak veya sunucusuz yapılarla tümüyle soyutlanmış biçimde ölçeklendir
- Kolay Entegrasyon: Modelini bir uygulamaya entegre etmek ve üretim ortamında izlemek için yalın 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 niceleme yoluyla seyrekleştirme, yüksek doğruluğu korurken bir ağın çalışması için gereken boyut ve hesaplama miktarını kat kat azaltabilen, kapsamlı biçimde incelenmiş bir tekniktir. DeepSparse seyrekliğin farkındadır; yani sıfırlanmış parametreleri atlayarak ileri geçişte gereken hesaplama miktarını azaltır. Seyrek hesaplama artık bellek sınırlı olduğundan DeepSparse, ağı derinlik boyunca çalıştırı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 derinlik boyunca çalıştırılan seyrek ağlar, DeepSparse'ın CPU'larda GPU sınıfı performans sunmasını sağlar!
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-noneBir 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.jpgPython API'si#
Pipelines, çalışma zamanının etrafına ön işleme ve çıktı son işleme adımlarını sararak DeepSparse'ı bir uygulamaya eklemek için yalın bir arayüz sunar. DeepSparse-Ultralytics entegrasyonunda, ham görselleri kabul edip sınırlayıcı kutuları çıktı olarak veren kullanıma hazır bir Pipeline bulunur.
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 libgl1Ya da GUI bağımlılıklarını tamamen ortadan kaldıran headless OpenCV derlemesini kullanabilirsin:
pip install opencv-python-headlessHTTP Sunucusu#
DeepSparse Server, popüler FastAPI web çatısı ve Uvicorn web sunucusu üzerinde çalışır. Tek bir CLI komutuyla DeepSparse kullanarak model hizmeti uç noktasını kolayca kurabilirsin. Sunucu, YOLOv5 ile nesne tespiti dahil DeepSparse'taki tüm Pipeline'ları destekler; böylece uç noktaya ham görseller gönderebilir ve 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-nonePython'ı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 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ırdığında annotation-results klasörü oluşturulur ve açıklama eklenmiş görüntü bu klasöre kaydedilir.
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.9025DeepSparse 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 batch boyutunda DeepSparse, standart yoğun YOLOv5s ile saniyede 70 görüntü işler; bu, ORT'ye kıyasla 1,7 kat performans artışı demektir!
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'a kıyasla performans kazanımları daha da artar.
32 batch boyutunda DeepSparse, budanmış ve kuantize edilmiş YOLOv5s ile saniyede 241 görüntü işler; bu, ORT'ye kıyasla 5,8 kat performans artışı demektir!
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.24521 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.0921DeepSparse Seyrek Model Performansı#
1 batch boyutunda DeepSparse, budanmış ve kuantize edilmiş YOLOv5s ile saniyede 135 öğe işler; ONNX Runtime'a kıyasla 2,8 kat performans artışı sağlar!
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 ö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 batch boyutunda DeepSparse, 4 bloklu budanmış ve kuantize edilmiş YOLOv5s ile saniyede 180 öğe işler; ONNX Runtime'a kıyasla 3,7 kat performans artışı sağlar!
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'ı 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 onnxile ONNX biçimine aktar ve dosya yolunu SparseZoo stub'ı yerinemodel_patholarak 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.