0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【まとめ】Pythonで学習したCNNモデルを5つの方法で推論してみた

0
Posted at

はじめに

このシリーズでは、PythonでCNNモデルを学習し、
推論部分を5つの異なる実装で比較してきた。

記事 内容
1本目 Python (PyTorch) で学習・推論
2本目 C++ (libtorch) で推論
3本目 ONNX Runtime (Python) で推論
4本目 ONNX Runtime (C++) で推論
5本目 ONNX Runtime (C#) で推論

今回はその結果を改めて整理し、
「どのユースケースに何を使うべきか」をまとめる。


全結果まとめ

実行環境:Ryzen 5 7530U(CPUのみ)、ウォームアップあり、100回平均

実装 推論時間 Pythonとの比較 環境構築
Python (PyTorch) 0.20 ms 基準 簡単
C++ (libtorch) 0.23 ms 1.15倍遅い やや手間
ONNX Runtime (Python) 0.13 ms 1.54倍速い 簡単
ONNX Runtime (C#) 0.08 ms 2.5倍速い 簡単
ONNX Runtime (C++) 0.04 ms 5倍速い 手間

気づいたこと

C++にすれば速くなるとは限らない

2本目でC++ (libtorch) を試したとき、
「C++なら速くなるはず」という期待があった。
結果はPythonとほぼ同速(0.23ms vs 0.20ms)だった。

PyTorchの演算コアはすでにC++で実装されており、
PythonはほんのわずかなAPIラッパーに過ぎない。
つまりPythonのオーバーヘッドはほぼゼロだ。

推論特化のONNX Runtimeが強い

学習・推論の両方に対応したPyTorchと異なり、
ONNX Runtimeは推論に特化して設計されている。
グラフ最適化や不要な機能の排除により、
Python版でも0.13msとPyTorchを上回った。

C++とPythonの差が最も出るのはONNX Runtime

同じmodel.onnxを使っても、
PythonとC++で5倍の差(0.13ms vs 0.04ms)が出た。
Pythonのオーバーヘッドはわずかでも、
100回ループのような場面では積み重なって差になる。

C#は「速度」と「使いやすさ」のバランスが良い

C#はC++ほど速くないが(0.08ms vs 0.04ms)、
環境構築はNuGetの1行だけで完結する。
業務システムや.NETアプリへの組み込みなら
C#が最も現実的な選択肢だ。


ユースケース別おすすめ

学習・開発・実験をしたい
→ Python (PyTorch)
  学習から推論まで一貫して書ける。デバッグも楽。

とにかく速い推論が必要
→ ONNX Runtime (C++)
  5者中最速。ただし環境構築に手間がかかる。

Pythonが使えない環境に組み込みたい
→ ONNX Runtime (C++) または C++ (libtorch)
  組み込み・産業用機器など。

.NETシステムに推論を組み込みたい
→ ONNX Runtime (C#)
  NuGetで簡単セットアップ。速度も十分。

PyTorchを入れずに軽量デプロイしたい
→ ONNX Runtime (Python)
  PyTorch不要。onnxruntimenumpyだけで動く。


まとめ

「何のために推論するか」によって最適な実装は変わる。
速度だけを追うならONNX Runtime (C++)、
開発効率を重視するならPython (PyTorch)、
業務システムへの組み込みならC#、
という選び方が現実的だと思う。

フレームワークやプログラミング言語は手段であって目的ではない。
ユースケースに合わせて選ぶのが正解だ。


おわりに

1本目のエッセイで書いた通り、
30年前にC言語でバックプロパゲーションをゴリゴリ書いていた頃と、
やっていることの本質は変わっていない。

変わったのは「しんどさ」と「速さ」だけだ。


シリーズ一覧

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?