推論の最適化¶
実行時の最適化、またはデプロイの最適化は、推論パラメーターと実行手段 (例えば、同時に実行される要求の最適な数) のチューニングに焦点を当てます。モデルレベルの最適化とは異なり、使用されるハードウェアとケースに固有であり、多くの場合コストがかかります。ov::hint::inference_precision
は、精度をパフォーマンスと引き換えにする “典型的なランタイム構成” であり、元の fp32
モデルの量子化後に fp32
に残るレイヤーに対して fp16/bf16
の実行を許可します。
したがって、最適化はユースケースを定義することから始めます。例えば、データセンターの夜間で数百万のサンプルを処理する場合、レイテンシーよりもスループットが優先される可能性があります。一方、リアルタイムの利用では、最小限のレイテンシーで結果を得るためスループットを犠牲にする可能性があります。特定のレイテンシーのしきい値を維持しながら、可能な限り最高のスループットを目標とする、組み合わせたシナリオも可能です。
フルスタック・アプリケーションが推論コンポーネントを “エンドツーエンド” でどのように使用するか理解することも重要です。例えば、入力データのフェッチと準備に費やされるワークロードを節約するには、どのステージをチューニングする必要があるか知らなければなりません。
このトピックの詳細については、以下を参照してください。
可変サイズの入力の場合は、動的形状を考慮
ユースケース固有の最適化については、レイテンシーとスループットの最適化ガイドを参照してください。
パフォーマンスを意識したポータブルな推論アプリケーションの作成¶
OpenVINO ランタイムで実行される推論は、多くの低レベルのパフォーマンス設定で構成できますが、ほとんどの場合は推奨されません。このような調整で最高のパフォーマンスを達成するには、デバイスのアーキテクチャーと推論エンジンについて深い理解が必要です。
このような最適化は、他のデバイスとモデルの組み合わせにはうまく適合しない可能性があります。つまり、1 つの実行パラメーター・セットを異なる条件で使用すると、異なるパフォーマンス結果になります。
例:
CPU と GPU はどちらもストリームの概念をサポートしていますが、最適な数を推定する方法は大きく異なります。
同じ種類のデバイスであっても、命令セットや CPU コア数、GPU のバッチサイズなど、異なる構成が最適と見なされる場合があります。
モデルが異なれば、計算とメモリー帯域幅、推論精度、可能なモデルの量子化などの要素を考慮して、最適なパラメーター構成も異なります。
実行の “スケジューリング” はパフォーマンスに大きく影響しデバイス固有です。例えば、複数の入力を組み合わせて最適なスループットを実現するバッチ処理など GPU 指向の最適化は、必ずしも CPU に適切にマッピングされるわけではありません。
構成プロセスをさらに簡単にし、パフォーマンスの最適化をより移植可能にするため、パフォーマンス・ヒントのオプションが導入されました。これは、レイテンシーまたはスループットのいずれかに焦点を当てた 2 つの高レベルの “プリセット” で構成されており、基本的に実行の詳細とは無関係です。
パフォーマンスのヒントは、アプリケーションに対して構成を透過的にします。例えば、明示的な (アプリケーション側の) バッチ処理またはストリームの必要性を予測し、異なる入力ソースに対する個別の推論要求の並列処理を容易にします。