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

Ultralytics YOLOv5モデルのトレーニングとデプロイをNeural MagicのDeepSparseで強化し、CPU上でGPUクラスのパフォーマンスを実現します。より高速でスケーラブルなYOLOv5のデプロイを実現します。
YOLOv5モデルのトレーニングと配備を加速させたいですか?お任せください!私たちの新しいパートナー、Neural Magicをご紹介します。Neural Magicは、最高のモデルパフォーマンスとシンプルなワークフローを重視したソフトウェアツールを提供しています。
DeepSparseはNeural MagicのCPU推論ランタイムであり、ニューラルネットワーク内のスパース性と低精度演算を活用し、コモディティハードウェア上で卓越したパフォーマンスを提供します。例えば、ONNXランタイムのベースラインと比較して、DeepSparseは同じマシン上で実行されるYOLOv5に対して5.8倍のスピードアップを提供します!
初めて、ディープラーニングのワークロードは、ハードウェアアクセラレータの複雑さとコストを伴わずに、本番環境でのパフォーマンス要求を満たすことができます。簡単に言えば、DeepSparseはGPUのパフォーマンスとソフトウェアのシンプルさを提供します:
DeepSparseは、モデルのスパース性を利用して性能の高速化を図っている。
刈り込みと量子化によるスパース化により、高い精度を維持しながら、ネットワークの実行に必要なサイズと計算量を桁違いに削減することができます。DeepSparseはスパース性を意識しており、ゼロによる乗算加算をスキップし、フォワード・パスの計算量を縮小します。スパース計算はメモリに拘束されるため、DeepSparseは深さ方向にネットワークを実行し、問題をテンソル・カラム(キャッシュに収まる計算の縦縞)に分割します。
圧縮された計算をキャッシュ内で深さ方向に実行するスパース・ネットワークにより、DeepSparseはCPU上でGPUクラスのパフォーマンスを実現します!
Neural MagicのオープンソースモデルリポジトリであるSparseZooには、各YOLOv5モデルのスパース済みチェックポイントが含まれています。Ultralyticsと統合されたSparseMLを使用すると、CLIコマンド1つでスパースチェックポイントをデータに微調整することができます。
以下を実行してDeepSparseをインストールします。Pythonの仮想環境を使用することをお勧めします。
pip install deepsparse[server,yolo,onnxruntime]をインストールする。
DeepSparse は ONNX 形式のモデルを受け取ります:
標準的な密な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 -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
パイプラインは、前処理と出力の後処理をランタイムでラップし、アプリケーションに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
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 パッケージを使ったリクエストの例:
インポート リクエスト, 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"]
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ランタイムは、標準的な高密度の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は最適化されたスパースモデルで最高の性能を発揮するが、標準的な密な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の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
> スループット (items/sec):241.2452
DeepSparseは、レイテンシを重視するバッチ1のシナリオにおいても、ONNX Runtimeを上回るスピードアップを実現しています。
バッチ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
> シナリオ: sync
> スループット (items/sec):48.0921
モデルにスパース性を適用した場合、DeepSparseのONNX Runtimeに対する性能向上はさらに強くなる。
バッチ1では、DeepSparseは、プルーニングされた量子化YOLOv5を使用して、ONNX Runtimeの2.8倍の性能向上である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は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
> オリジナルモデルのパス: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> バッチサイズ: 1
> シナリオ: sync
> スループット (items/sec):179.7375
これで完了です!これで、DeepSparseを使用してYOLOv5の導入を最適化する準備が整いました。
私たちと連絡を取るには、私たちのコミュニティに参加し、質問やコメントを残してください。YOLOv5のデプロイについては、Ultralytics YOLOv5リポジトリと Neural Magicドキュメントをご覧ください。
Ultralyticsでは、YOLOv5のような素晴らしいオープンソースツールの研究開発に資金を提供するために、他のスタートアップ企業と商業的に提携しています。この記事には、それらのパートナーへのアフィリエイトリンクが含まれている場合があります。