Yolo 深圳
深セン
今すぐ参加

Ultralytics YOLOv5 Neural MagicDeepSparseの組み合わせで、CPU上でGPUパフォーマンスを実現

Ultralytics

5分で読めます

2023年1月5日

Ultralytics YOLOv5 モデルのトレーニングとデプロイをNeural MagicDeepSparseで強化し、CPU上でGPUパフォーマンスを実現します。より高速でスケーラブルなYOLOv5 デプロイを実現します。

のトレーニングと配備を加速させたい。 YOLOv5モデルのトレーニングと導入を加速させたいとお考えですか?お任せください!私たちの新しいパートナー、Neural Magicご紹介します。Neural Magic 、最高のモデルパフォーマンスとシンプルなワークフローを重視したソフトウェアツールを提供しています。

DeepSparseは Neural Magic CPU 推論ランタイムであり、ニューラルネットワーク内のスパース性と低精度演算を活用し、コモディティハードウェア上で卓越したパフォーマンスを提供します。例えば、ONNX ランタイムのベースラインと比較して、DeepSparseは同じマシン上で実行されるYOLOv5に対して5.8倍のスピードアップを提供します!

YOLOv5 DeepSparseのスループット比較

ハードウェアアクセラレータの複雑さやコストなしに、ディープラーニングのワークロードが初めて本番環境のパフォーマンス要件を満たすことができます。簡単に言うと、DeepSparseはGPUのパフォーマンスとソフトウェアのシンプルさを提供します。

  1. 柔軟なデプロイメント:クラウド、データセンター、およびエッジ全体で、任意のハードウェアプロバイダーを使用して一貫して実行
  2. 無限のスケーラビリティ: 標準のKubernetesでスケールアウト、垂直方向に数百のコアへ、またはサーバーレスで完全に抽象化。
  3. 容易な統合:モデルをアプリケーションに統合し、本番環境で監視するためのクリーンなAPIを使用します。

コモディティCPUでGPUパフォーマンスを実現

DeepSparseは、モデルのスパース性を利用してパフォーマンスを向上させます。

刈り込みと量子化によるスパース化により、高い精度を維持しながら、ネットワークの実行に必要なサイズと計算量を桁違いに削減することができます。DeepSparseはスパース性を意識しており、ゼロによる乗算加算をスキップし、フォワード・パスの計算量を縮小します。スパース計算はメモリに拘束されるため、DeepSparseは深さ方向にネットワークを実行し、問題をTensor カラム(キャッシュに収まる計算の縦縞)に分割します。

DeepSparseとUltralytics YOLOv5 ネットワーク

圧縮された計算をキャッシュ内で深さ方向に実行するスパース・ネットワークにより、DeepSparseはCPU上でGPUパフォーマンスを実現します!

カスタムデータで学習させたYOLOv5 5のスパースバージョンを作成する

Neural MagicオープンソースモデルリポジトリであるSparseZooには、YOLOv5 モデルのスパース済みチェックポイントが含まれています。Ultralytics統合されているSparseMLを使用すると、CLI コマンド1つでスパースチェックポイントをデータに微調整することができます。

DeepSparseでYOLOv5 展開する

DeepSparseのインストール

以下を実行してDeepSparseをインストールします。Python仮想環境を使用することをお勧めします。

pip install deepsparse[serveryolo,onnxruntime]をインストールする。

ONNX ファイルの収集

DeepSparse はONNX 形式のモデルを受け取ります:

  • ONNX モデルへのローカルパス
  • SparseZoo内のモデルを識別するSparseZooスタブ

標準の密なYOLOv5sと、プルーニングおよび量子化されたYOLOv5sを比較します。これらは、以下のSparseZooスタブによって識別されます。

zoo:ultralytics
zoo:ultralytics

モデルのデプロイ

DeepSparseは、モデルをアプリケーションに統合するための便利なAPIを提供します。

以下の展開例を試すには、例のサンプル画像をプルダウンし、以下のコマンドでbasilica.jpgとして保存します:

wget -Obasilicabasilicajpg

Python API

パイプラインは、前処理と出力の後処理をランタイムでラップし、アプリケーションにDeepSparseを追加するためのクリーンなインタフェースを提供します。DeepSparseとUltralytics 統合には、生画像を受け取ってバウンディングボックスを出力する、すぐに使えるパイプラインが含まれています。

パイプラインを作成して推論を実行する:

from deepsparse import Pipeline


images = [basilica.jpg"] # ローカルファイルシステムにある画像のリスト

# パイプラインの作成
model_stub = "zoo:ultralytics"
yolo_pipeline = Pipeline.create(
task=yolo",
model_path=model_stub,
)

# 画像上で推論を実行し、バウンディングボックス + クラスを受け取る
pipeline_outputs =yolo(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

クラウドで実行している場合、open-cvがlibGL.so.1を見つけられないというエラーが発生する可能性があります。Ubuntuで以下を実行するとインストールされます:

apt-get install libgl1-mesa-glx

HTTPサーバー

DeepSparse Serverは、人気の高いFastAPI WebフレームワークとUvicorn Webサーバーの上で動作します。CLI コマンドを1つ実行するだけで、DeepSparseを使用したモデルサービスのエンドポイントを簡単に設定できます。Serverは、YOLOv5オブジェクト検出を含む、DeepSparseからのあらゆるPipelineをサポートしており、エンドポイントに生画像を送信してバウンディングボックスを受け取ることができます。

枝刈りおよび量子化されたYOLOv5sでサーバーを起動:

deepsparse.server \
--taskyolo ˶
--model_path zoo:ultralytics

Python の requests パッケージを使ったリクエストの例:

import requests, json

#
path = [basilica.jpg']
files = [('request', open(img, 'rb')) for img in path].

# HTTP経由で/predict/from_filesエンドポイントにリクエストを送信
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# レスポンスはJSONで返されます
annotations = json.loads(resp.text) # アノテーション結果の辞書
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

CLI注釈を付ける

annotateコマンドを使用して、エンジンにアノテーション付きの写真をディスクに保存させることもできます。ライブウェブカメラフィードにアノテーションを付けるには、--source 0を試してください。

deepsparse.object_detection.annotate --model_filepath zoo:ultralytics--sourcebasilica.jpg

上記のコマンドを実行すると、annotation-resultsフォルダーが作成され、アノテーションが付けられた画像がその中に保存されます。

YOLOv5 Basilica 注釈

ベンチマーク性能

DeepSparseのベンチマークスクリプトを使用して、YOLOv5s上でDeepSparseのスループットとONNX Runtimeのスループットを比較します。

ベンチマークは、AWS c6i.8xlargeインスタンス(16コア)で実行されました。

バッチ32のパフォーマンス比較

ONNX ランタイムベースライン

バッチ32では、ONNX Runtimeは標準的な高密度のYOLOv5で42画像/秒を達成した:

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

> オリジナルモデルのパス: zoo:ultralytics
> バッチサイズ: 32
> シナリオ: sync
> スループット (items/sec):41.9025

DeepSparseの高密度性能

DeepSparseは最適化されたスパースモデルで最高のパフォーマンスを発揮しますが、標準的な高密度YOLOv5sでも優れたパフォーマンスを発揮します。

バッチサイズ32で、DeepSparseは標準的な密なYOLOv5sで70 images/secを達成しました—ORTと比較して1.7倍の性能向上です!

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

> オリジナルモデルのパス: zoo:ultralytics
> バッチサイズ: 32
> シナリオ: sync
> スループット (items/sec):69.5546

DeepSparseのスパース性能

モデルにスパース性を適用した場合、DeepSparseのONNX Runtimeに対する性能向上はさらに強くなる。

バッチサイズ32で、DeepSparseは枝刈り量子化されたYOLOv5sで241 images/secを達成しました—ORTと比較して5.8倍の性能向上です!

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

> オリジナルモデルのパス: zoo:ultralytics
> バッチサイズ: 32
> シナリオ: sync
> スループット (items/sec):241.2452

バッチ1のパフォーマンス比較

DeepSparseは、レイテンシを重視するバッチ1のシナリオにおいても、ONNX Runtimeを上回るスピードアップを実現しています。

ONNX ランタイムベースライン

バッチ1では、ONNX Runtimeは、標準的な高密度のYOLOv5で48画像/秒を達成した。

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

> オリジナルモデルのパス: zoo:ultralytics
> バッチサイズ: 1
> シナリオ: sync
> スループット (items/sec):48.0921

DeepSparseのスパース性能

モデルにスパース性を適用した場合、DeepSparseのONNX Runtimeに対する性能向上はさらに強くなる。

バッチ1では、DeepSparseは、プルーニングされた量子化YOLOv5を使用して、 ONNX Runtimeの2.8倍の性能向上である135画像/秒を達成しました!

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

> オリジナルモデルのパス: zoo:ultralytics
> バッチサイズ: 1
> シナリオ: sync
> スループット (items/sec):134.9468

c6i.8xlargeインスタンスにはVNNI命令があるため、DeepSparseのスループットは、重みが4つのブロックでプルーニングされている場合、さらに向上させることができます。

バッチ1では、DeepSparseは4ブロック刈り込み量子化YOLOv5sで180アイテム/秒を達成し、これは ONNX Runtimeの3.7倍の性能向上である!

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

> オリジナルモデルのパス: zoo:ultralytics
> バッチサイズ: 1
> シナリオ: sync
> スループット (items/sec):179.7375

これで完了です!これで、DeepSparseを使用してYOLOv5 導入を最適化する準備が整いました。

YOLOv5 DeepSparseを使い始める

私たちと連絡を取るには、私たちのコミュニティに参加し、質問やコメントを残してください。 YOLOv5デプロイについてはUltralytics YOLOv5 リポジトリと Neural Magic ドキュメントをご覧ください。

Ultralytics、YOLOv5ような素晴らしいオープンソースツールの研究開発に資金を提供するために、他のスタートアップ企業と商業的に提携しています。この記事には、それらのパートナーへのアフィリエイトリンクが含まれている場合があります。

AIの未来を
共に築きましょう!

未来の機械学習で、新たな一歩を踏み出しましょう。

無料ではじめる