OpenVINO グラフ書き換えパス

ov::pass::GraphRewrite は、単一のグラフ走査で ov::Model 上の複数のマッチャーパスを実行するために機能します。
例:

    // Two matcher passes will run simultaneously in a single graph traversal
    ov::pass::GraphRewrite pass;
    pass.add_matcher<ov::pass::DecomposeDivideMatcher>();
    pass.add_matcher<ov::pass::ReluReluFusionMatcher>();
    pass.run_on_model(f);

さらに、GraphRewrite は、MatcherPasses の実行中に登録されたノードを処理します。このノードは、パターンマッチング用のノードとともにシーケンスの先頭に追加されます。

ov::pass::Manager を使用する場合、単一の MatcherPass を実行するため一時的な GraphRewrite が使用されます。

GraphRewrite には、MatcherPasses 実行用の 2 つのアルゴリズムがあります。最初のアルゴリズムはストレートフォワードです。各 MatcherPass を登録順に現在のノードに適用します。

../../../_images/graph_rewrite_execution.png

ただし、登録されたパスが多くなるとあまり効率的ではありません。最初に、GraphRewrite は、すべての MatcherPass パターンにタイプベースのルートノードがあることを確認します (これは、このノードのタイプがプレディケートに隠蔽されていないことを意味します)。そして、登録された MatcherPasse からマップを作成します。これにより、ノードごとに MatcherPass を適用する追加コストを回避できます。

../../../_images/graph_rewrite_efficient_search.png

GraphRewrite の実行アルゴリズムは手動で設定できず、MatcherPasses 内に登録されたルートノードにのみ依存します。

関連情報