グリーンチェック
クリップボードにコピーされたリンク

Ultralytics YOLOv5 Neural Magic 'DeepSparse'でGPU-CPU上のクラス・パフォーマンスを実現する。

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

モデルのトレーニングや配備を加速させたいとお考えですか? YOLOv5加速させたいとお考えですか?お任せください!最新のパートナーをご紹介します、 Neural Magic.Neural Magic は、最高のモデルパフォーマンスとワークフローの簡素化を重視したソフトウェアツールを提供しており、YOLOv5 のデプロイメントプロセスをさらに優れたものにするソリューションを提供するために協力するのは当然のことです。

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

YOLOv5 DeepSparseとのスループット比較

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

  1. 柔軟な展開:クラウド、データセンター、エッジのあらゆるハードウェア・プロバイダで一貫した運用が可能
  2. 無限のスケーラビリティ:標準的なKubernetesでスケールアウト、垂直方向に数百コア、またはサーバーレスで完全に抽象化
  3. 簡単な統合:クリーンなAPIを使用して、モデルをアプリケーションに統合し、本番環境で監視します。

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

DeepSparseは、モデルのスパース性を利用して性能の高速化を図っている。

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

DeepSparse およびUltralytics YOLOv5  ネットワーク

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

カスタム・データで訓練されたYOLOv5 のスパース・バージョンを作成する。

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

詳しくはNeural MagicのYOLOv5 ドキュメントをご覧ください。

DeepSparse によるYOLOv5 の展開

DeepSparse のインストール

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

pip install deepsparse[server,yolo,onnxruntime].

ONNX ファイルの収集

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

  • ONNX モデルへのローカルパス
  • SparseZooのモデルを特定するSparseZooスタブ。

標準的な密なYOLOv5と、以下のSparseZooスタブで識別される、刈り込み量子化されたYOLOv5を比較する:

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 -Obasilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg

Python API

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

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

from deepsparse import Pipeline


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

# パイプラインの作成
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo _pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)

# 画像上で推論を実行し、バウンディングボックス + クラスを受け取る
pipeline_outputs =yolo_pipeline(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 をサポートしており、エンドポイントに生画像を送信し、バウンディングボックスを受信することができます。

プルーニングされたYOLOv5でサーバーをスピンアップする:

deepsparse.server ୧
--taskyolo ୧
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Python の 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:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --sourcebasilica.jpg

上記のコマンドを実行すると、annotation-resultsフォルダが作成され、その中に注釈画像が保存されます。

注釈付きBasilica  YOLOv5

ベンチマーク・パフォーマンス

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

> 元のモデルパス: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> バッチサイズ: 32
> シナリオ: sync
> スループット (items/sec):41.9025

DeepSparse Dense パフォーマンス

DeepSparseは最適化されたスパース・モデルで最高の性能を発揮するが、標準的な密なYOLOv5でも良好な性能を発揮する。

バッチ32では、DeepSparseは標準的な高密度のYOLOv5で70画像/秒を達成し、これはORTの1.7倍の性能向上である!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1

> 元のモデルパス: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> バッチサイズ: 32
> シナリオ: sync
> スループット (items/sec):69.5546

DeepSparse スパース・パフォーマンス

モデルにスパース性を適用すると、DeepSparseの性能はONNX Runtimeよりもさらに向上する。

バッチ32の場合、DeepSparseは、プルーニングされた量子化YOLOv5sで、ORTの5.8倍の性能向上である241画像/秒を達成した

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> 元のモデルパス: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> バッチサイズ: 32
> シナリオ: sync
> スループット(アイテム/秒):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

> 元のモデルパス: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> バッチサイズ:1
> シナリオ:同期
> スループット(アイテム/秒):48.0921

DeepSparse スパース・パフォーマンス

モデルにスパース性を適用すると、DeepSparseの性能はONNX Runtimeよりもさらに向上する。

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

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> 元のモデルパス: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> バッチサイズ: 1
> シナリオ: sync
> スループット (items/sec):134.9468

c6i.8xlargeインスタンスにはVNNI命令があるため、重みを4ブロック単位で刈り込めば、DeepSparseのスループットはさらに向上する。

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

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1

> 元のモデルパス: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> バッチサイズ: 1
> シナリオ: sync
> スループット(アイテム/秒):179.7375

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

YOLOv5 と DeepSparse を使い始める

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

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

Facebookのロゴツイッターのロゴリンクトインのロゴコピー・リンク・シンボル

このカテゴリの続きを読む

AIの未来
を一緒に作りましょう!

機械学習の未来への旅を始めよう