コンテンツにスキップ

パフォーマンスのトラブルシューティング

ONNX Runtimeパフォーマンスのトラブルシューティング

Section titled “ONNX Runtimeパフォーマンスのトラブルシューティング”

このドキュメントでは、ONNX Runtimeのパフォーマンスの問題をトラブルシューティングする方法について説明します。

パフォーマンスの問題をトラブルシューティングする最初のステップは、モデルをプロファイリングしてボトルネックを特定することです。ONNX Runtimeは、モデルをプロファイリングするための組み込みのサポートを提供しています。

プロファイリングを有効にするには、OrtSessionOptionsオブジェクトでEnableProfilingを呼び出します。

session_options.EnableProfiling("profile_file");

これにより、セッションの実行後にprofile_file.jsonという名前のファイルが作成されます。このファイルは、chrome://tracingで開いて、モデルのパフォーマンスを視覚化できます。

パフォーマンスを向上させる最も簡単な方法の1つは、ハードウェアアクセラレータに最適化された実行プロバイダーを使用することです。ONNX Runtimeは、さまざまなハードウェアアクセラレータ用の実行プロバイダーをサポートしています。

詳細については、実行プロバイダーのドキュメントを参照してください。

ONNX Runtimeは、モデルのパフォーマンスを向上させるために適用できるさまざまなグラフ最適化をサポートしています。これらの最適化は、OrtSessionOptionsオブジェクトのSetGraphOptimizationLevelを呼び出すことで有効にできます。

session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL);

詳細については、グラフの最適化のドキュメントを参照してください。

量子化は、モデルのサイズを縮小し、パフォーマンスを向上させるために使用できる手法です。ONNX Runtimeは、静的量子化と動的量子化の両方をサポートしています。

詳細については、量子化のドキュメントを参照してください。

ONNX Runtimeは、推論を並列化するために複数のスレッドを使用できます。スレッドの数は、OrtSessionOptionsオブジェクトのSetIntraOpNumThreadsSetInterOpNumThreadsを呼び出すことで設定できます。

// 演算内並列処理に2つのスレッドを使用
session_options.SetIntraOpNumThreads(2);
// 演算間並列処理に2つのスレッドを使用
session_options.SetInterOpNumThreads(2);

一部のハードウェアアクセラレータは、特定のメモリレイアウトの恩恵を受けます。ONNX Runtimeは、パフォーマンスを向上させるために、テンソルのメモリレイアウトを変更できます。

詳細については、メモリレイアウトの最適化のドキュメントを参照してください。