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

YOLOv5モデルのトレーニングとデプロイを高速化したいとお考えですか?お任せください!最新のパートナーであるNeural Magicをご紹介します。Neural Magicは、モデルのピークパフォーマンスとワークフローのシンプルさを重視したソフトウェアツールを提供しており、YOLOv5のデプロイプロセスをさらに改善するソリューションを提供するために両社が協力するのは自然な流れです。
DeepSparseは、Neural Magicが提供するCPU向け推論ランタイムです。ニューラルネットワーク内のスパース性(疎性)と低精度演算を活用することで、汎用ハードウェア上で卓越したパフォーマンスを提供します。例えば、ONNX Runtimeのベースラインと比較して、DeepSparseは同一マシン上でYOLOv5sを5.8倍高速化します!

ディープラーニングのワークロードにおいて、ハードウェアアクセラレータに伴う複雑さやコストをかけずに、プロダクション環境のパフォーマンス要求を満たすことが初めて可能になりました。簡単に言えば、DeepSparseはGPU並みのパフォーマンスとソフトウェアの簡便さを提供します。
- 柔軟なデプロイメント: クラウド、データセンター、エッジを問わず、あらゆるハードウェアプロバイダーで一貫した動作を実現
- 無限のスケーラビリティ: 標準的なKubernetesでのスケールアウト、数百コアへの垂直スケーリング、またはサーバーレスによる完全な抽象化が可能
- 容易な統合: クリーンなAPIを使用して、アプリケーションへのモデル統合とプロダクション環境でのモニタリングを実現
Link to this section汎用CPU上でGPUクラスのパフォーマンスを実現#
DeepSparseはモデルのスパース性を利用してパフォーマンスの高速化を実現します。
プルーニング(枝刈り)と量子化を通じたスパース化により、高い精度を維持したまま、ネットワーク実行に必要なサイズと計算量を桁違いに削減できます。DeepSparseはスパース性を認識しており、ゼロに対する積和演算をスキップし、フォワードパスにおける計算量を削減します。スパースな計算はメモリバウンドであるため、DeepSparseはネットワークを深さ方向に実行し、キャッシュに収まる「テンソル列(Tensor Columns)」と呼ばれる垂直ストライプ状の計算に分割します。

圧縮された計算を行い、キャッシュ内で深さ方向に実行されるスパースネットワークにより、DeepSparseはCPU上でGPUクラスのパフォーマンスを実現します!
Link to this sectionカスタムデータでトレーニングされたYOLOv5のスパースバージョンを作成#
Neural MagicのオープンソースモデルリポジトリであるSparseZooには、各YOLOv5モデルの事前スパース化されたチェックポイントが含まれています。Ultralyticsと統合されたSparseMLを使用すれば、単一のCLIコマンドで、カスタムデータに対してスパースチェックポイントのファインチューニングを行うことができます。
Link to this sectionDeepSparseを使用してYOLOv5をデプロイする#
Link to this sectionDeepSparseのインストール#
以下のコマンドを実行してDeepSparseをインストールします。Pythonの仮想環境を使用することを推奨します。
pip install deepsparse[server,yolo,onnxruntime]Link to this sectionONNXファイルの取得#
DeepSparseは、以下のいずれかの形式で渡されたONNX形式のモデルを受け入れます。
- ONNXモデルへのローカルパス
- SparseZoo内のモデルを特定するSparseZooスタブ
標準の密なYOLOv5sと、以下のSparseZooスタブで特定されるプルーニング・量子化済みYOLOv5sを比較します。
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneLink to this sectionモデルのデプロイ#
DeepSparseは、モデルをアプリケーションに統合するための便利なAPIを提供しています。
以下のデプロイ例を試すには、サンプル画像をダウンロードし、次のコマンドでbasilica.jpgとして保存してください。
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgLink to this sectionPython API#
パイプラインはランタイムの前後で前処理と後処理をラップし、DeepSparseをアプリケーションに追加するためのクリーンなインターフェースを提供します。DeepSparseとUltralyticsの統合には、生の画像を受け取ってバウンディングボックスを出力するすぐに使えるパイプラインが含まれています。
パイプラインを作成して推論を実行します。
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で以下を実行するとインストールされます。
apt-get install libgl1-mesa-glxLink to this sectionHTTPサーバー#
DeepSparse Serverは、人気の高いFastAPIウェブフレームワークとUvicornウェブサーバー上で動作します。単一のCLIコマンドで、DeepSparseを使用したモデルサービスエンドポイントを簡単にセットアップできます。サーバーはYOLOv5を使用した物体検出を含む、DeepSparseのあらゆるパイプラインをサポートしており、エンドポイントに生の画像を送信してバウンディングボックスを受け取ることが可能です。
プルーニング・量子化済みYOLOv5sを使用してサーバーを起動します。
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-nonePythonのrequestsパッケージを使用したリクエスト例です。
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"]Link to this sectionAnnotate CLI#
annotateコマンドを使用して、エンジンにアノテーション付き写真をディスクに保存させることもできます。--source 0を試して、ライブWebカメラフィードにアノテーションを付けてみてください!
deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpg上記のコマンドを実行すると、annotation-resultsフォルダーが作成され、その中にアノテーション付き画像が保存されます。

Link to this sectionパフォーマンスのベンチマーク#
DeepSparseのベンチマークスクリプトを使用して、YOLOv5sにおけるDeepSparseのスループットをONNX Runtimeのスループットと比較します。
ベンチマークはAWS c6i.8xlargeインスタンス(16コア)で実行されました。
Link to this sectionバッチサイズ32でのパフォーマンス比較#
Link to this sectionONNX Runtimeのベースライン#
バッチサイズ32において、ONNX Runtimeは標準の密なYOLOv5sで42 images/secを達成します。
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntimeOriginal Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 32 Scenario: sync Throughput (items/sec): 41.9025
Link to this sectionDeepSparse(密モデル)のパフォーマンス#
DeepSparseは最適化されたスパースモデルで最高のパフォーマンスを発揮しますが、標準の密なYOLOv5sでも良好な性能を示します。
バッチサイズ32において、DeepSparseは標準の密なYOLOv5sで70 images/secを達成しました。これはORTと比較して1.7倍のパフォーマンス向上です!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 32 Scenario: sync Throughput (items/sec): 69.5546
Link to this sectionDeepSparse(スパースモデル)のパフォーマンス#
モデルにスパース性が適用されると、ONNX Runtimeに対するDeepSparseのパフォーマンス向上はさらに顕著になります。
バッチサイズ32において、DeepSparseはプルーニング・量子化済みYOLOv5sで241 images/secを達成しました。これはORTと比較して5.8倍のパフォーマンス向上です!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Batch Size: 32 Scenario: sync Throughput (items/sec): 241.2452
Link to this sectionバッチサイズ1でのパフォーマンス比較#
DeepSparseは、レイテンシが重視されるバッチサイズ1のシナリオにおいても、ONNX Runtimeに対して高速化を実現できます。
Link to this sectionONNX Runtimeのベースライン#
バッチサイズ1において、ONNX Runtimeは標準の密なYOLOv5sで48 images/secを達成します。
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntimeOriginal Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 1 Scenario: sync Throughput (items/sec): 48.0921
Link to this sectionDeepSparse(スパースモデル)のパフォーマンス#
モデルにスパース性が適用されると、ONNX Runtimeに対するDeepSparseのパフォーマンス向上はさらに顕著になります。
バッチサイズ1において、DeepSparseはプルーニング・量子化済みYOLOv5sで135 images/secを達成しました。これはONNX Runtimeと比較して2.8倍のパフォーマンス向上です!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1Original 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 items/secを達成しました。これはONNX Runtimeと比較して3.7倍のパフォーマンス向上です!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1Original 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を使用してYOLOv5のデプロイメントを最適化する準備が整いました。
Link to this sectionYOLOv5とDeepSparseを使い始める#
私たちに連絡するには、コミュニティに参加して質問やコメントをお寄せください。Ultralytics YOLOv5リポジトリと、YOLOv5をデプロイするためのNeural Magicの全ドキュメントもご確認ください。
Ultralyticsでは、YOLOv5のような優れたオープンソースツールを誰もが無料で利用し続けられるよう、その研究開発資金を調達するために他のスタートアップ企業と商業的なパートナーシップを組んでいます。この記事には、それらのパートナーへのアフィリエイトリンクが含まれている場合があります。






