パフォーマンスのトラブルシューティング
ONNX Runtimeパフォーマンスのトラブルシューティング
Section titled “ONNX Runtimeパフォーマンスのトラブルシューティング”このドキュメントでは、ONNX Runtimeのパフォーマンスの問題をトラブルシューティングする方法について説明します。
プロファイリング
Section titled “プロファイリング”パフォーマンスの問題をトラブルシューティングする最初のステップは、モデルをプロファイリングしてボトルネックを特定することです。ONNX Runtimeは、モデルをプロファイリングするための組み込みのサポートを提供しています。
プロファイリングを有効にするには、OrtSessionOptionsオブジェクトでEnableProfilingを呼び出します。
session_options.EnableProfiling("profile_file");これにより、セッションの実行後にprofile_file.jsonという名前のファイルが作成されます。このファイルは、chrome://tracingで開いて、モデルのパフォーマンスを視覚化できます。
実行プロバイダー
Section titled “実行プロバイダー”パフォーマンスを向上させる最も簡単な方法の1つは、ハードウェアアクセラレータに最適化された実行プロバイダーを使用することです。ONNX Runtimeは、さまざまなハードウェアアクセラレータ用の実行プロバイダーをサポートしています。
詳細については、実行プロバイダーのドキュメントを参照してください。
グラフの最適化
Section titled “グラフの最適化”ONNX Runtimeは、モデルのパフォーマンスを向上させるために適用できるさまざまなグラフ最適化をサポートしています。これらの最適化は、OrtSessionOptionsオブジェクトのSetGraphOptimizationLevelを呼び出すことで有効にできます。
session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL);詳細については、グラフの最適化のドキュメントを参照してください。
量子化は、モデルのサイズを縮小し、パフォーマンスを向上させるために使用できる手法です。ONNX Runtimeは、静的量子化と動的量子化の両方をサポートしています。
詳細については、量子化のドキュメントを参照してください。
スレッド処理
Section titled “スレッド処理”ONNX Runtimeは、推論を並列化するために複数のスレッドを使用できます。スレッドの数は、OrtSessionOptionsオブジェクトのSetIntraOpNumThreadsとSetInterOpNumThreadsを呼び出すことで設定できます。
// 演算内並列処理に2つのスレッドを使用session_options.SetIntraOpNumThreads(2);
// 演算間並列処理に2つのスレッドを使用session_options.SetInterOpNumThreads(2);メモリレイアウト
Section titled “メモリレイアウト”一部のハードウェアアクセラレータは、特定のメモリレイアウトの恩恵を受けます。ONNX Runtimeは、パフォーマンスを向上させるために、テンソルのメモリレイアウトを変更できます。
詳細については、メモリレイアウトの最適化のドキュメントを参照してください。