コンテンツにスキップ

トラブルシューティング

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

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

パフォーマンス問題を評価する際にチェックすべき項目のリストです:

  • すべてのグラフ最適化を有効にしていますか?公式公開パッケージはデフォルトですべて有効になっていますが、ソースからビルドする場合は、ビルドでこれらが有効になっていることを確認してください。
  • 以前に提出されたGitHub issuesを検索して、あなたの問題が以前に議論されているかどうかを確認しましたか?新しいissueを提出する前に、これを行ってください。
  • CUDAまたはTensorRTを使用している場合、依存ライブラリの正しいバージョンがインストールされていますか?CUDA EP / TensorRT EP

graph_optimization_levelをORT_ENABLE_ALLに設定してもモデルグラフが最適化されないのはなぜですか?

Section titled “graph_optimization_levelをORT_ENABLE_ALLに設定してもモデルグラフが最適化されないのはなぜですか?”

IR_VERSION 4以降のONNXモデルは、グラフ入力に現れるイニシャライザーのみを非定数として扱います。これにより、定数畳み込み、演算子融合などの一部のグラフ最適化が妨げられる可能性があります。オーバーライドする必要がない場合は、最新のエクスポーター/コンバーターでモデルを再生成するか、ツールremove_initializer_from_input.pyを使用して、イニシャライザーをグラフ入力から移動してください。

なぜ私のモデルはCPUよりもGPUで遅く動作するのですか?

Section titled “なぜ私のモデルはCPUよりもGPUで遅く動作するのですか?”

使用している実行プロバイダーによっては、モデル内のすべての演算子を完全にサポートしていない可能性があります。CPU演算子へのフォールバックは、パフォーマンス速度に影響を与える可能性があります。さらに、演算子がCUDA実行プロバイダーによって実装されていても、パフォーマンス上の理由でORTが演算子をCUDA EPに割り当て/配置しない場合があります。ORTによって決定された配置を確認するには、詳細ログを有効にしてコンソール出力を確認してください。

変換したTensorFlowモデルが遅いのはなぜですか?

Section titled “変換したTensorFlowモデルが遅いのはなぜですか?”

NCHWとNHWCは、4次元テンソルの2つの異なるメモリレイアウトです。

CNNで使用されるほとんどのTensorFlow演算は、NHWCとNCHWの両方のデータ形式をサポートしています。TensorFlowチームは、GPUではNCHWが高速ですが、CPUではNHWCがTensorFlowで時々高速であることを示唆しています。しかし、ONNXはNCHWのみをサポートしています。その結果、元のモデルがNHWC形式の場合、モデルが変換される際に追加の転置が追加される可能性があります。tensorflow-onnxコンバーターはこれらの転置の多くを削除しますが、これが十分に役立たない場合は、NCHW形式でモデルを再トレーニングすることを検討してください。

高いレイテンシ分散が見られます。

Section titled “高いレイテンシ分散が見られます。”

一部のプラットフォームでは、onnxruntimeは推論中に高いレイテンシ分散を示すことがあります。これは、onnxruntimeがスレッドプール内のタスクを並列化するために使用する定数コストモデルによって引き起こされます。 各タスクに対して、定数コストモデルはスレッド間の並列化の粒度を計算し、これはタスク実行の終了まで一定のままです。このアプローチは時々不均衡な負荷をもたらし、高いレイテンシ分散を引き起こす可能性があります。 これを軽減するために、onnxruntimeはセッションオプションとして有効にできる動的コストモデルを提供します: