Neural MagicのDeepSparse
ソフトウェアで提供されるAIへようこそ。
このガイドでは、Neural Magic の DeepSparse を使用してYOLOv5 を展開する方法を説明します。
DeepSparseは、CPU上で卓越したパフォーマンスを発揮する推論ランタイムです。例えば、ONNX Runtimeベースラインと比較して、DeepSparseは同じマシン上で実行されるYOLOv5sに対して5.8倍のスピードアップを提供します!
初めて、ディープラーニングのワークロードは、ハードウェアアクセラレータの複雑さとコストを伴わずに、本番環境でのパフォーマンス要求を満たすことができます。簡単に言えば、DeepSparseはGPUのパフォーマンスとソフトウェアのシンプルさを提供します:
- 柔軟な展開:Intel 、AMD、ARMなど、あらゆるハードウェア・プロバイダを使用して、クラウド、データセンター、エッジで一貫して実行できます。
- 無限のスケーラビリティ:標準的なKubernetesを使用して、またはServerlessを使用して完全に抽象化された、数百のコアに垂直にスケールします。
- 簡単な統合:モデルをアプリケーションに統合し、本番環境でモニタリングするためのクリーンなAPI
DeepSparseはどのようにしてGPU-クラスの性能を達成しているのか?
DeepSparseは、モデルのスパース性を利用して性能の高速化を図っている。
刈り込みと量子化によるスパース化は広く研究されている手法であり、高い精度を維持しながら、ネットワークの実行に必要なサイズと計算量を桁違いに削減できる。DeepSparseはスパース化を意識しており、ゼロ化されたパラメータをスキップし、フォワードパスでの計算量を削減します。DeepSparseは、スパース計算がメモリに束縛されるようになったため、深さ方向にネットワークを実行し、問題をTensor 、キャッシュに収まる計算の縦縞に分割します。
圧縮された計算によるスパース・ネットワークは、キャッシュ内で深さ方向に実行されるため、DeepSparseはCPU上でGPU クラスのパフォーマンスを実現します!
自分のデータで訓練したYOLOv5 のスパース・バージョンを作成するには?
Neural MagicのオープンソースモデルリポジトリであるSparseZooには、YOLOv5 各モデルのスパース済みチェックポイントが含まれています。Ultralytics と統合されている SparseML を使えば、CLI コマンドひとつで、スパースチェックポイントをデータに微調整することができます。
詳しくはNeural Magic のYOLOv5 ドキュメントをご覧ください。
DeepSparseの使用法
DeepSparseを使用したYOLOv5sのスパース・バージョンのベンチマークとデプロイの例を説明する。
DeepSparse のインストール
以下を実行して、DeepSparse をインストールします。Python の仮想環境を使用することをお勧めします。
ONNX ファイルの収集
DeepSparse は、ONNX 形式のモデルを受け取ります:
- SparseZooのスタブで、SparseZooのONNX 。
- ファイルシステム内のONNX モデルへのローカルパス。
以下の例では、以下のSparseZooスタブで識別される、標準的な密なYOLOv5sチェックポイントとプルーニングされた量子化されたYOLOv5sチェックポイントを使用しています:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
モデルを配置する
DeepSparseは、モデルをアプリケーションに統合するための便利なAPIを提供します。
以下の配置例を試すには、サンプル画像をプルダウンして、次のように保存します。 basilica.jpg
以下のように:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
Python API
Pipelines
前処理と出力の後処理をランタイムでラップし、アプリケーションにDeepSparseを追加するためのクリーンなインタフェースを提供します。DeepSparse-Ultralytics の統合には、すぐに使用できる Pipeline
これは生の画像を受け取り、バウンディングボックスを出力する。
を作成する。 Pipeline
と推論を実行する:
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)
クラウド上で実行している場合、open-cvが見つからないというエラーが出るかもしれない。 libGL.so.1
.Ubuntuで以下を実行するとインストールされる:
HTTPサーバー
DeepSparse Serverは、人気の高いFastAPI WebフレームワークとUvicorn Webサーバーの上で動作します。CLI コマンドを 1 つ実行するだけで、DeepSparse を使用したモデル・サービス・エンドポイントを簡単にセットアップできます。Serverは、YOLOv5 によるオブジェクト検出を含む、DeepSparseからのあらゆるPipelineをサポートしており、生画像をエンドポイントに送信し、バウンディングボックスを受信することができます。
プルーニングされたYOLOv5でサーバーをスピンアップする:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
Python を使ったリクエストの例 requests
パッケージで提供される:
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
annotateコマンドを使えば、エンジンが注釈付き写真をディスクに保存することもできます。ライブ・ウェブカメラ・フィードに注釈を付けるには、-source 0を試してください!
deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpg
上記のコマンドを実行すると annotation-results
フォルダの中に注釈付き画像を保存します。
パフォーマンスのベンチマーク
DeepSparseのベンチマーク・スクリプトを使用して、YOLOv5s上でDeepSparseのスループットとONNX Runtimeのスループットを比較します。
ベンチマークはAWS c6i.8xlarge
インスタンス(16コア)。
バッチ32の性能比較
ONNX ランタイム・ベースライン
バッチ32で、ONNX Runtimeは、標準的な高密度のYOLOv5で42画像/秒を達成した:
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 Dense パフォーマンス
DeepSparseは最適化されたスパース・モデルで最高の性能を発揮するが、標準的な密なYOLOv5でも良好な性能を発揮する。
バッチ32では、DeepSparseは標準的な高密度のYOLOv5sで70画像/秒を達成し、ORTの1.7倍の性能向上を実現した!
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 スパース・パフォーマンス
モデルにスパース性を適用すると、DeepSparseの性能はONNX Runtimeよりもさらに向上する。
バッチ32では、DeepSparseは、プルーニングされた量子化YOLOv5sで241画像/秒を達成し、ORTの5.8倍の性能向上を実現した!
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のパフォーマンス比較
DeepSparseは、レイテンシを重視するバッチ1のシナリオにおいても、ONNX Runtimeを上回るスピードアップを実現しています。
ONNX ランタイム・ベースライン
バッチ1では、ONNX Runtimeは、標準的な高密度のYOLOv5で48画像/秒を達成した。
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 スパース・パフォーマンス
バッチ1では、DeepSparseは、 ONNX Runtimeと比較して2.8倍の性能向上である、プルーニングされた量子化YOLOv5sで135アイテム/秒を達成した!
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
インスタンスに VNNI 命令がある場合、重みを 4 単位で刈り込めば、DeepSparse のスループットはさらに向上する。
バッチ1では、DeepSparseは4ブロック刈り込み量子化YOLOv5sで180アイテム/秒を達成し、 ONNX Runtimeと比較して3.7倍の性能向上を実現した!
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を使い始める
研究かテストか?DeepSparse Communityは、研究やテストに無料でご利用いただけます。まずはドキュメントをご覧ください。