Yolo Vision Shenzhen
Shenzhen
Şimdi katılın

CPU'larda GPU Performans için Ultralytics YOLOv5 'i Neural Magic'in DeepSparse ile Dağıtın

Ultralytics Ekibi

5 dakikalık okuma

5 Ocak 2023

CPU'larda GPU performans için Ultralytics YOLOv5 model eğitimini ve dağıtımını Neural Magic'in DeepSparse ile güçlendirin. Daha hızlı, ölçeklenebilir YOLOv5 dağıtımları elde edin.

Şirketinizin eğitimini ve dağıtımını hızlandırmak ister misiniz? YOLOv5 modelleri? Sizi teminat altına aldık! Karşınızda en yeni ortağımız Neural Magic. Neural Magic , en yüksek model performansını ve iş akışı basitliğini vurgulayan yazılım araçları sağladığından, YOLOv5 dağıtım sürecini daha da iyi hale getirecek bir çözüm sunmak için bir araya gelmemiz çok doğal.

DeepSparse, Neural Magic'in sinir ağlarındaki seyreklik ve düşük hassasiyetli aritmetikten yararlanarak emtia donanımında olağanüstü performans sunan CPU çıkarım çalışma zamanıdır. Örneğin, ONNX Runtime taban çizgisine kıyasla DeepSparse, aynı makinede çalışan YOLOv5'ler için 5,8 kat hız artışı sunar!

DeepSparse ile YOLOv5 Verim Karşılaştırması

Derin öğrenme iş yükleriniz, ilk kez donanım hızlandırıcılarının karmaşıklığı ve maliyetleri olmadan üretimin performans taleplerini karşılayabilir. Basitçe söylemek gerekirse, DeepSparse size GPU'ların performansını ve yazılımın basitliğini sunar:

  1. Esnek Dağıtımlar: Herhangi bir donanım sağlayıcısıyla bulut, veri merkezi ve uç noktalarda tutarlı bir şekilde çalıştırın
  2. Sonsuz Ölçeklenebilirlik: Standart Kubernetes ile yatay olarak, 100'lerce çekirdeğe dikey olarak veya sunucusuz ile tamamen soyutlanmış şekilde ölçeklendirin
  3. Kolay Entegrasyon: Modelinizi bir uygulamaya entegre etmek ve üretimde izlemek için temiz API'ler kullanın

Commodity CPU'larda GPU Performans Elde Edin

DeepSparse, performans hızlandırması elde etmek için model seyreltikliğinden yararlanır.

Budama ve niceleme yoluyla seyrekleştirme, yüksek doğruluğu korurken bir ağı yürütmek için gereken boyut ve hesaplamada büyüklük sırasına göre azalma sağlar. DeepSparse seyrekliğin farkındadır, sıfırla çarpma eklemelerini atlar ve bir ileri geçişte hesaplama miktarını küçültür. Seyrek hesaplama belleğe bağlı olduğundan, DeepSparse ağı derinlemesine yürütür ve sorunu önbelleğe sığan dikey hesaplama şeritleri olan Tensor Sütunlarına böler.

DeepSparse ve Ultralytics YOLOv5 Ağı

Önbellekte derinlik bazında yürütülen sıkıştırılmış hesaplamaya sahip seyrek ağlar, DeepSparse'ın CPU'larda GPU performans sunmasına olanak tanır!

YOLOv5 'in Özel Veriler Üzerinde Eğitilmiş Seyrek Bir Sürümünü Oluşturun

Neural Magic'in açık kaynaklı model deposu SparseZoo, her YOLOv5 modelinin önceden ayrıştırılmış kontrol noktalarını içerir. Ultralytics ile entegre olan SparseML'yi kullanarak, tek bir CLI komutuyla verilerinize seyrek bir kontrol noktası ayarlayabilirsiniz.

YOLOv5 'i DeepSparse ile Dağıtın

DeepSparse'ı Kurun

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

pip deepsparse[serveryolo,onnxruntime] yükleyin

ONNX Dosyası Toplama

DeepSparse, ONNX biçiminde bir modeli kabul eder, ya olarak geçirilir:

  • ONNX modeline giden yerel bir yol
  • SparseZoo'daki bir modeli tanımlayan bir SparseZoo saplaması

Standart yoğun YOLOv5s'yi, aşağıdaki SparseZoo saplamalarıyla tanımlanan budanmış-nicemlenmiş YOLOv5s ile karşılaştıracağız:

zoo:ultralytics
zoo:ultralytics

Bir Model Dağıtın

DeepSparse, modelinizi bir uygulamaya entegre etmek için uygun API'ler sunar.

Aşağıdaki dağıtım örneklerini denemek için, örnek için örnek bir görüntü çekin ve aşağıdaki komutla basilica.jpg olarak kaydedin:

wget -O basilicabasilicajpg

Python API

Boru hatları, ön işleme ve çıktı son işlemeyi çalışma zamanının etrafına sararak DeepSparse'ı bir uygulamaya eklemek için temiz bir arayüz sağlar. Ultralytics entegrasyonu, ham görüntüleri kabul eden ve sınırlayıcı kutuları çıkaran kullanıma hazır bir Ardışık Düzen içerir.

Bir Ardışık Düzen oluşturun ve çıkarım çalıştırın:

from deepsparse import Pipeline

# yerel dosya sistemindeki resimlerin listesi
images = [basilica.jpg"]

# Pipeline oluşturun
model_stub = "zoo:ultralytics"
yolo_pipeline = Pipeline.create(
task=yolo",
model_path=model_stub,
)

# görüntüler üzerinde çıkarım çalıştırın, sınırlayıcı kutuları + sınıfları alın
pipeline_outputs = yolo(images=images, iou_thres=0.6, conf_thres=0.001)
print( yolo)

Bulutta çalışıyorsanız, open-cv'nin libGL.so.1'i bulamadığına dair bir hata alabilirsiniz. Ubuntu'da aşağıdakini çalıştırmak onu yükler:

apt-get install libgl1-mesa-glx

HTTP 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 hizmet uç noktası kurabilirsiniz. Sunucu, YOLOv5 ile nesne algılama da dahil olmak üzere DeepSparse'tan herhangi bir Pipeline'ı destekler ve uç noktaya ham görüntüler göndermenizi ve sınırlayıcı kutuları almanızı sağlar.

Kırpılmış-nicelenmiş YOLOv5s ile Sunucuyu başlatın:

deepsparse.server \
--task yolo \
--model_path zoo:ultralytics

Python'un requests paketini kullanan örnek bir istek:

import requests, json

# çıkarım için resimlerin listesi (istemci tarafında yerel dosyalar)
path = [basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]

# /predict/from_files uç noktasına HTTP üzerinden istek gönder
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# yanıt JSON olarak 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"]

CLI'ya Açıklama Ekleme

Motorun disk üzerinde açıklamalı bir fotoğraf kaydetmesi için annotate komutunu da kullanabilirsiniz. Canlı web kamerası akışınızı açıklamak için --source 0'ı deneyin!

deepsparse.object_detection.annotate --model_filepath zoo:ultralytics--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 ile Açıklamalı Basilica

Benchmark Performansı

DeepSparse'ın kıyaslama betiğini kullanarak DeepSparse'ın verimini ONNX Runtime'ın YOLOv5'lerdeki verimiyle karşılaştıracağız.

Benchmarklar bir AWS c6i.8xlarge örneği (16 çekirdek) üzerinde çalıştırıldı.

32'li Gruplar Halinde Performans Karşılaştırması

ONNX Çalışma Zamanı Temel Çizgisi

Toplu iş 32'de ONNX Runtime, standart yoğun YOLOv5'lerle 42 görüntü/sn'ye ulaşır:

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1 -e onnxruntime

> Orijinal Model Yolu: zoo:ultralytics
> Toplu İş Boyutu: 32
> Senaryo: sync
> Verim (öğe/sn): 41.9025

DeepSparse Yoğun Performansı

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

32'lik yığın boyutunda, DeepSparse standart yoğun YOLOv5s ile 70 resim/sn hıza ulaşıyor—ORT'ye göre 1,7 kat performans artışı!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> Orijinal Model Yolu: zoo:ultralytics
> Toplu İş Boyutu: 32
> Senaryo: sync
> Verim (öğe/sn): 69.5546

DeepSparse Seyrek Performansı

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

32'lik yığın boyutunda, DeepSparse budanmış-nicemlenmiş YOLOv5s ile 241 resim/sn hıza ulaşıyor—ORT'ye göre 5,8 kat performans artışı!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> Orijinal Model Yolu: zoo:ultralytics
> Toplu İş Boyutu: 32
> Senaryo: sync
> Verim (öğe/sn): 241.2452

Yığın 1 Performans Karşılaştırması

DeepSparse ayrıca gecikmeye duyarlı, toplu iş 1 senaryosu için ONNX Çalışma Zamanı'na göre hız kazanabilmektedir.

ONNX Çalışma Zamanı Temel Çizgisi

Parti 1'de, ONNX Çalışma Zamanı standart, yoğun YOLOv5'lerle 48 görüntü/sn'ye ulaşır.

deepsparse.benchmark zoo:ultralytics-s sync -b 1 -nstreams 1 -e onnxruntime

> Orijinal Model Yolu: zoo:ultralytics
> Toplu İş Boyutu: 1
> Senaryo: sync
> Verim (öğe/sn): 48.0921

DeepSparse Seyrek Performansı

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

Yığın 1'de DeepSparse, budanmış-kuvantize edilmiş YOLOv5'lerle 135 görüntü/sn'ye ulaşıyor; bu da ONNX Çalışma Zamanına göre 2,8 kat performans artışı demek!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> Orijinal Model Yolu: zoo:ultralytics
> Toplu İş Boyutu: 1
> Senaryo: sync
> Verim (öğe/sn): 134.9468

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

Yığın 1'de DeepSparse, 4 bloklu budanmış-kuvantize edilmiş YOLOv5'lerle 180 öğe/sn'ye ulaşarak ONNX Runtime'a göre 3,7 kat performans artışı sağlar!

deepsparse.benchmark zoo:ultralytics-s sync -b 1 -nstreams 1

> Orijinal Model Yolu: zoo:ultralytics
> Toplu İş Boyutu: 1
> Senaryo: sync
> Verim (öğe/sn): 179.7375

Ve işte! DeepSparse ile YOLOv5 dağıtımınızı optimize etmeye hazırsınız.

YOLOv5 ve DeepSparse ile Çalışmaya Başlayın

Bizimle iletişime geçmek için topluluğumuza katılın ve sorularınızı ve yorumlarınızı bize bırakın. YOLOv5'i dağıtmak için Ultralytics YOLOv5 deposuna ve tam Neural Magic belgelerine göz atın.

Ultralytics'te, YOLOv5 gibi harika açık kaynaklı araçlarımızın araştırma ve geliştirmesini finanse etmemize yardımcı olmak ve bunları herkes için ücretsiz tutmak için ticari olarak diğer girişimlerle ortaklık yapıyoruz. Bu makale, bu ortaklara bağlı bağlantılar içerebilir.

Gelin, yapay zekanın geleceğini
birlikte inşa edelim!

Makine öğreniminin geleceği ile yolculuğunuza başlayın

Ücretsiz başlayın