YOLOv5'i Neural Magic DeepSparse ile Dağıt
Yazılım tabanlı yapay zekaya hoş geldin.
Bu kılavuz, YOLOv5'in Neural Magic DeepSparse ile nasıl dağıtılacağını açıklar.
DeepSparse, CPU'larda olağanüstü performans sunan bir çıkarım (inference) çalışma zamanıdır. Örneğin, ONNX Runtime taban çizgisine kıyasla DeepSparse, aynı makinede çalışırken YOLOv5s için 5,8 kat hız artışı sunar!
İlk kez, derin öğrenme iş yüklerin, donanım hızlandırıcıların karmaşıklığı ve maliyetleri olmadan üretim performans gereksinimlerini 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'a kadar her türlü 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ış bir şekilde ölçeklendir
- Kolay Entegrasyon: Modelini bir uygulamaya entegre etmek ve üretimde izlemek için temiz API'ler
DeepSparse GPU Sınıfı Performansı Nasıl Elde Ediyor?
DeepSparse, performans hız artışını elde etmek için model seyreklik (sparsity) özelliğinden yararlanır.
Budama (pruning) ve niceleme (quantization) yoluyla seyrekleştirme, bir ağı çalıştırmak için gereken boyut ve hesaplamada on kat azalma sağlayan ve aynı zamanda yüksek doğruluk seviyesini koruyan geniş çapta incelenmiş bir tekniktir. DeepSparse seyreklik farkındalığına sahiptir, 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 Tensör Sütunlarına böler.
Sıkıştırılmış hesaplamaya sahip, önbellekte derinlemesine yürütülen seyrek ağlar, DeepSparse'ın CPU'larda GPU sınıfı performans sunmasını sağlar!
Verilerimle Eğitilmiş Bir YOLOv5 Seyrek Sürümünü Nasıl Oluştururum?
Neural Magic'in açık kaynaklı model deposu olan SparseZoo, her bir YOLOv5 modelinin önceden seyrekleştirilmiş kontrol noktalarını (checkpoints) içerir. Ultralytics ile entegre olan SparseML kullanarak, tek bir CLI komutuyla seyrek bir kontrol noktasını verilerine göre ince ayarlayabilirsin.
Daha fazla ayrıntı için Neural Magic'in YOLOv5 dokümantasyonuna göz at.
DeepSparse Kullanımı
YOLOv5s'in seyrek bir sürümünü DeepSparse ile kıyaslama (benchmarking) ve dağıtma örneğini inceleyeceğiz.
DeepSparse Kurulumu
DeepSparse'ı yüklemek için aşağıdakini çalıştır. Python ile bir sanal ortam kullanmanı öneririz.
pip install "deepsparse[server,yolo,onnxruntime]"ONNX Dosyası Topla
DeepSparse, modeli ONNX formatında kabul eder ve şu şekillerde iletilir:
- SparseZoo'daki bir ONNX dosyasını tanımlayan bir SparseZoo taslağı (stub)
- Dosya sistemindeki bir ONNX modeline giden yerel bir yol
Aşağıdaki örnekler, aşağıdaki SparseZoo taslakları tarafından tanımlanan standart yoğun (dense) ve budanmış-niceleştirilmiş 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-noneBir Modeli 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 görsel indir 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.jpgPython API
Pipelines, çalışma zamanının etrafında ön işleme ve çıktı son işleme süreçlerini sararak DeepSparse'ı 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ı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 libgl1Veya GUI bağımlılıklarını tamamen ortadan kaldıran başsız (headless) Ultralytics paketini kullanabilirsin:
pip install ultralytics-opencv-headlessHTTP Sunucusu
DeepSparse Server, popüler FastAPI web çerçevesi ve Uvicorn web sunucusu üzerinde çalışır. Sadece tek bir CLI komutuyla, DeepSparse ile kolayca bir model servis uç noktası kurabilirsin. Sunucu, YOLOv5 ile nesne algılama dahil olmak üzere DeepSparse'tan herhangi bir Pipeline'ı destekler ve uç noktaya ham görüntüler gönderip sınırlayıcı kutuları almanı sağlar.
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 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"]CLI ile Açıklama Ekleme (Annotate)
Motorun açıklamalı bir fotoğrafı diske kaydetmesini sağlamak için annotate komutunu da kullanabilirsin. Canlı web kamerası akışına açıklama eklemek 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 Kıyaslaması
DeepSparse'ın kıyaslama betiğini kullanarak, DeepSparse'ın iş hacmini (throughput) YOLOv5s üzerindeki ONNX Runtime'ın iş hacmi ile karşılaştıracağız.
Kıyaslamalar bir AWS c6i.8xlarge örneğinde (16 çekirdek) çalıştırılmıştır.
Toplu İş (Batch) 32 Performans Karşılaştırması
ONNX Runtime Taban Çizgisi
32'lik toplu işlemde, 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 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 (Dense) Performansı
DeepSparse en iyi performansını optimize edilmiş seyrek modellerle sunsa da, standart yoğun YOLOv5s ile de iyi performans gösterir.
32'lik toplu işlemde, DeepSparse standart yoğun YOLOv5s ile 70 görüntü/sn elde eder, bu ORT üzerinde 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.5546DeepSparse Seyrek (Sparse) Performansı
Modele seyreklik uygulandığında, DeepSparse'ın ONNX Runtime üzerindeki performans kazanımları daha da güçlüdür.
32'lik toplu işlemde, DeepSparse budanmış-niceleştirilmiş YOLOv5s ile 241 görüntü/sn elde eder, bu ORT üzerinde 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.2452Toplu İş 1 Performans Karşılaştırması
DeepSparse, gecikmeye duyarlı, toplu iş 1 senaryosu için de ONNX Runtime üzerinde hız artışı elde edebilir.
ONNX Runtime Taban Çizgisi
Toplu iş 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 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 (Sparse) Performansı
Toplu iş 1'de, DeepSparse budanmış-niceleştirilmiş YOLOv5s ile 135 öğe/sn elde eder, ONNX Runtime üzerinde 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.9468c6i.8xlarge örnekleri VNNI talimatlarına sahip olduğundan, ağırlıklar 4'lü bloklar halinde budanırsa DeepSparse'ın iş hacmi daha da artırılabilir.
Toplu iş 1'de, DeepSparse 4 bloklu budanmış-niceleştirilmiş YOLOv5s ile 180 öğe/sn elde eder, bu ONNX Runtime üzerinde 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.7375DeepSparse 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'in DeepSparse dokümantasyonuna ve Ultralytics'in DeepSparse entegrasyonu hakkındaki blog gönderisine göz at.