İçeriğe geç

Neural Magic'in DeepSparse

Yazılım destekli yapay zekaya hoş geldiniz.

Bu kılavuzda YOLOv5 adresinin Neural Magic's DeepSparse ile nasıl dağıtılacağı açıklanmaktadır.

DeepSparse, CPU'larda olağanüstü performansa sahip bir çı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ışı sunuyor!

YOLOv5 hız iyileştirme

İlk kez, derin öğrenme iş yükleriniz, 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:

  • Esnek Dağıtımlar: Intel'den AMD'ye ve ARM'ye kadar tüm donanım sağlayıcılarıyla bulut, veri merkezi ve uçta tutarlı bir şekilde çalışın
  • Sonsuz Ölçeklenebilirlik: Standart Kubernetes ile dikey olarak 100'lerce çekirdeğe ölçeklendirin veya Sunucusuz ile tamamen soyutlayın
  • Kolay Entegrasyon: Modelinizi bir uygulamaya entegre etmek ve üretimde izlemek için temiz API'ler

DeepSparse GPU Sınıfı Performansa Nasıl Ulaşıyor?

DeepSparse, performans hızını artırmak için model seyrekliğ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 azalmalara izin veren geniş çapta çalışılmış bir tekniktir. DeepSparse seyrekliğe duyarlıdır, yani sıfırlanmış parametreleri atlayarak ileri geçişte hesaplama miktarını azaltır. Seyrek hesaplama artık 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.

YOLO model budama

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

Verilerim Üzerinde Eğitilmiş YOLOv5 'un Seyrek Bir Sürümünü Nasıl Oluşturabilirim?

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'i kullanarak, tek bir CLI komutuyla seyrek bir kontrol noktasını verilerinize ince ayar yapabilirsiniz.

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

DeepSparse Kullanımı

DeepSparse ile YOLOv5s'in seyrek bir versiyonunu kıyaslayan ve dağıtan bir örnek üzerinden yürüyeceğiz.

DeepSparse'ı yükleyin

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

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

Bir ONNX Dosyası Toplayın

DeepSparse, ONNX biçiminde bir model kabul eder ve şu şekilde aktarılır:

  • SparseZoo'daki 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 taslakları ile tanımlanan standart yoğun ve budanmış-kuvantize YOLOv5s kontrol noktalarını kullanmaktadı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ın

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

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

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

Python API

Pipelines ön işleme ve çıktı son işlemeyi çalışma zamanının etrafına sararak bir uygulamaya DeepSparse eklemek için temiz bir arayüz sağlar. DeepSparse-Ultralytics entegrasyonu, kullanıma hazır bir Pipeline Ham görüntüleri kabul eder ve sınırlayıcı kutuları çıktı olarak verir.

Oluşturmak Pipeline ve çıkarımı çalıştırın:

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ız, open-cv'nin bulamadığı bir hata alabilirsiniz libGL.so.1. Ubuntu'da aşağıdakileri çalıştırmak yükler:

apt-get install libgl1

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öndermenize ve sınırlayıcı kutuları almanıza olanak tanır.

Sunucuyu budanmış-kuvantize edilmiş YOLOv5'lerle çalıştırın:

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

Python'u kullanan örnek bir istek requests Paket:

import requests, json

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

Ek açıklama CLI

Motorun açıklamalı bir fotoğrafı diske kaydetmesini sağlamak için annotate komutunu da kullanabilirsiniz. Canlı web kamerası akışınıza açıklama eklemek için --source 0 komutunu deneyin!

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ünü açın ve açıklamalı görüntüyü içine kaydedin.

AÇIKLAMALI

Performans Karşılaştırması

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

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

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

ONNX Çalışma Zamanı Temel Çizgisi

Toplu iş 32'de, ONNX Çalışma Zamanı standart yoğun YOLOv5'lerle 42 görüntü/sn'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

DeepSparse Yoğun Performans

DeepSparse en iyi performansını optimize edilmiş seyrek modellerle sunarken, standart yoğun YOLOv5'lerle de iyi performans gösterir.

Yığın 32'de DeepSparse, standart yoğun YOLOv5'lerle 70 görüntü/sn'ye ulaşarak ORT'ye göre 1,7 kat performans artışı sağlıyor!

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 Performans

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

Yığın 32'de DeepSparse, budanmış-kuvantize edilmiş YOLOv5'lerle 241 görüntü/sn elde ederek ORT'ye göre 5,8 kat performans artışı sağlıyor!

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

Parti 1 Performans Karşılaştırması

DeepSparse ayrıca gecikmeye duyarlı toplu iş 1 senaryosu için ONNX Runtime'a 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: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 Performans

Yığın 1'de DeepSparse, budanmış-kuvantize YOLOv5s ile 135 öğe/sn'ye ulaşarak ONNX Runtime' a göre 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.9468

O zamandan beri c6i.8xlarge örneklerinde VNNI talimatları varsa, ağırlıklar 4'lü bloklar halinde budanırsa DeepSparse'ın verimi daha da artırılabilir.

Toplu iş 1'de DeepSparse, 4 bloklu budanmış-kuvantize YOLOv5'lerle 180 öğe/sn'ye ulaşarak ONNX Çalışma Zamanına göre 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.7375

DeepSparse ile Başlayın

Araştırma mı Test mi? DeepSparse Topluluğu araştırma ve test için ücretsizdir. Dokümantasyonumuz ile başlayın.



Oluşturma 2023-11-12, Güncelleme 2024-03-19
Yazarlar: glenn-jocher (4)

Yorumlar