グループ・トランスフォーメーション・パス#

group ov_pass_cpp_api

OpenVINO 変換を操作する OpenVINO C++ API

関数

OPENVINO_API void disable_constant_folding (const std::shared_ptr< Node > &node)

このメソッドは、指定されたノードの定数フォールディングを無効にします。定数フォールディングでは ConstantFolding 変換を考慮するため、get_constant_from_source のような他のタイプの定数フォールディングはこの属性では機能しません。また、この属性を使用する前に、2 つの例外ケースを考慮してください:

  1. ShapeOf -> ShapeOf のようなサブグラフの場合、最初の ShapeOf ノードの cf を無効にすると、2 番目の ShapeOf に伝達しないため、サブグラフ全体が折りたたまれます。(最初の ShapeOf にコンシューマーが 1 つだけある場合)

  2. disable_constant_folding を持つノードが別のノードに置き換えられた場合、属性はコピーできないため失われます。

OPENVINO_API bool constant_folding_is_disabled (const std::shared_ptr< Node > &node)

Node で定数フォールディングが無効になっているか確認します。

パラメーター:

node – ノードへのスマートポインター。

戻り値:

属性定数折りたたみが設定されている場合は true、それ以外は false。

OPENVINO_API bool constant_folding_is_disabled (const Node *const node)

Node で定数フォールディングが無効になっているか確認します。

パラメーター:

node – ノードへのポインター。

戻り値:

属性定数折りたたみが設定されている場合は true、それ以外は false。

class ConstantFolding : public ov::pass::ModelPass#
#include <constant_folding.hpp>

定数フォールディングは関数を反復し、定数入力を使用してノードを評価します。このようなノードは、折り畳まれた操作の結果を含む新しい定数に置き換えられます。

class ConvertFP32ToFP16 : public ov::pass::ModelPass#
#include <convert_fp32_to_fp16.hpp>

ConvertFP32ToFP16 トランスフォーメーション。

class MatcherPass : public ov::pass::PassBase#
#include <graph_rewrite.hpp>

MatcherPass は、パターンベースのトランスフォーメーションの基本ブロックです。パターンが一致した場合に適用されるアクションを記述します。

MatcherPass は Matcher と matcher_pass_callback で構成されており、次を使用して実装し最終的に登録する必要があります:

関連情報

register_matcher。MatcherPass は次の内のノードで実行可能です:

関連情報

はメソッドを適用します。関数でマッチャーパスを実行するには、GraphRewrite を使用します。さらに、MatcherPass は、GraphRewrite 実行キューに新しい操作を追加する方法を提供します。つまり、トランスフォーメーション・コールバック内で作成された操作をマッチング用に追加できるということです。ノードを登録するには以下を使用します:

関連情報

register_new_node メソッド。GraphRewriteは登録されたノードを自動的に取得し、実行キューに配置します。複数のノードが登録されている場合は、それらがトポロジー順序で登録されていることを確認してください。注: マッチャーのパターンを実装するときは、ルートノードが opset からの操作であるか、ov::pass::pattern::op::WrapType を持っていることを確認してください。これにより、GraphRewrite はマッチャーパスをより効率的に実行できるようになります。

以下によってサブクラス化: ConvertReduceBaseCvtReduceBase, ov::pass::AUGRUCellFusionov::pass::AbsSinking, ov::pass::AdaptivePoolToReduceov::pass::AddAddFusion, ov::pass::AddFakeQuantizeFusionov::pass::AddMultiplyFusion, ov::pass::AlignEltwiseInputRanksov::pass::BatchNormDecomposition, ov::pass::BatchToSpaceFusionov::pass::BidirectionalGRUSequenceDecomposition, ov::pass::BidirectionalLSTMSequenceDecompositionov::pass::BidirectionalRNNSequenceDecomposition, ov::pass::BinarizeWeightsov::pass::BroadcastConstRangeReplacement, ov::pass::BroadcastElementwiseFusionov::pass::BroadcastTransitionov::pass::ChainedMaximumOptimizationov::pass::ClampFusionov::pass::CompressFloatConstantsImplov::pass::CompressWeightsWithFakeConvertov::pass::CompressWeightsWithFakeQuantizeov::pass::ConcatFusion, ov::pass::ConcatToBroadcastov::pass::ConvStridesPropagation, ov::pass::ConvToBinaryConvov::pass::ConvertAvgPool14ToAvgPool1, ov::pass::ConvertBatchToSpaceov::pass::ConvertBitwiseAndToLogicalAndov::pass::ConvertBitwiseNotToLogicalNotov::pass::ConvertBitwiseOrToLogicalOr, ov::pass::ConvertBitwiseXorToLogicalXorov::pass::ConvertBroadcast3ov::pass::ConvertBroadcastToTilesov::pass::ConvertConvertLikeov::pass::ConvertConvertPromoteTypesov::pass::ConvertDeformableConv8To1ov::pass::ConvertDepthToSpaceov::pass::ConvertDetectionOutput1ToDetectionOutput8ov::pass::ConvertDetectionOutput8ToDetectionOutput1ov::pass::ConvertDivideov::pass::ConvertDivideWithConstantov::pass::ConvertEmbeddingBagOffsets15ToEmbeddingBagOffsetsSum3ov::pass::ConvertEmbeddingBagPacked15ToEmbeddingBagPackedSum3ov::pass::ConvertGELUov::pass::ConvertGP9ToGPIEInternalov::pass::ConvertGRUSequenceToTensorIterator, ov::pass::ConvertGather0Dov::pass::ConvertGather1ToGather7, ov::pass::ConvertGather7ToGather1, ov::pass::ConvertGather7ToGather8, ov::pass::ConvertGather8ToGather7, ov::pass::ConvertGatherToGatherCompressed, ov::pass::ConvertInterpolate11ToInterpolate4, ov::pass::ConvertInterpolate1ToInterpolate4, ov::pass::ConvertLSTMSequenceToTensorIterator, ov::pass::ConvertLoopWithScatterUpdateToLSTMSequence, ov::pass::ConvertLoopWithSlicedInputConcatOutputToLSTMSequence, ov::pass::ConvertMVN1ToMVN6, ov::pass::ConvertMatrixNmsToMatrixNmsIE, ov::pass::ConvertMaxPool14ToMaxPool8, ov::pass::ConvertMaxPool1ToMaxPool8, ov::pass::ConvertMaxPool8ToMaxPool1, ov::pass::ConvertMinimum, ov::pass::ConvertMod, ov::pass::ConvertMulticlassNms8ToMulticlassNms9, ov::pass::ConvertMulticlassNmsToMulticlassNmsIE, ov::pass::ConvertNMS1ToNMS5, ov::pass::ConvertNMS1ToNMS9, ov::pass::ConvertNMS3ToNMS5, ov::pass::ConvertNMS3ToNMS9, ov::pass::ConvertNMS4ToNMS5, ov::pass::ConvertNMS4ToNMS9, ov::pass::ConvertNMS5ToNMS9, ov::pass::ConvertNMS9ToNMSIEInternal, ov::pass::ConvertNMSRotatedToNMSIEInternal, ov::pass::ConvertNMSToNMSIEInternal, ov::pass::ConvertNegative, ov::pass::ConvertPad12ToPad1, ov::pass::ConvertPadToGroupConvolution, ov::pass::ConvertPriorBox8To0, ov::pass::ConvertQuantizeDequantize, ov::pass::ConvertRNNSequenceToTensorIterator, ov::pass::ConvertROIAlign3To9, ov::pass::ConvertROIAlign9To3, ov::pass::ConvertScatterElementsToScatter, ov::pass::ConvertScatterElementsUpdate12ToScatterElementsUpdate3, ov::pass::ConvertShapeOf3, ov::pass::ConvertShuffleChannels3, ov::pass::ConvertSoftMax1ToSoftMax8, ov::pass::ConvertSoftMax8ToSoftMax1, ov::pass::ConvertSpaceToBatch, ov::pass::ConvertSpaceToDepth, ov::pass::ConvertSubtract, ov::pass::ConvertSubtractWithConstant, ov::pass::ConvertTensorIteratorToGRUSequence, ov::pass::ConvertTensorIteratorToLSTMSequence, ov::pass::ConvertTensorIteratorToRNNSequence, ov::pass::ConvertTopK11ToTopK3, ov::pass::ConvertTopK3, ov::pass::ConvertU4WeightsZeroPointToScalar, ov::pass::ConvertXorToLogicalXor, ov::pass::ConvolutionBackpropDataMultiplyFusion, ov::pass::ConvolutionMultiplyFusion, ov::pass::ConvolutionToGroupConvolutionFusion, ov::pass::DeReshapeFullyConnected, ov::pass::DeReshapeMatMul, ov::pass::DepthToSpaceFusion, ov::pass::DilatedConvolutionConverter, ov::pass::DisableDecompressionConvertConstantFolding, ov::pass::DisableRandomUniformConstantFolding, ov::pass::DisableShapeOfConstantFolding, ov::pass::DivideFusion, ov::pass::DropoutWithRandomUniformReplacer, ov::pass::EinsumDecomposition, ov::pass::EliminateConcat, ov::pass::EliminateConvert, ov::pass::EliminateConvertNonZero, ov::pass::EliminateDuplicateTIInputs, ov::pass::EliminateEltwise, ov::pass::EliminateGatherUnsqueeze, ov::pass::EliminateLoopInputsOutputs, ov::pass::EliminateNopBroadcast, ov::pass::EliminatePad, ov::pass::EliminateScatterUpdate, ov::pass::EliminateSlice, ov::pass::EliminateSliceBeforeGatherElements, ov::pass::EliminateSplit, ov::pass::EliminateSplitConcat, ov::pass::EliminateSqueeze, ov::pass::EliminateStridedSlice, ov::pass::EliminateStridedSliceByShape, ov::pass::EliminateTranspose, ov::pass::EliminateUnsqueeze, ov::pass::EliminateUnsqueezeGather, ov::pass::EnableDecompressionConvertConstantFolding, ov::pass::EnableShapeOfConstantFolding, ov::pass::EyeDecomposition, ov::pass::FakeQuantizeDecomposition, ov::pass::FakeQuantizeMulFusion, ov::pass::FakeQuantizeReshapeFusion, ov::pass::FlushFP32SubnormalsToZero, ov::pass::FoldSubgraphEmptyInputs, ov::pass::FuseLSTMSequencesToBidirectionalLSTMSequence, ov::pass::FuseReverseLSTMSequence, ov::pass::GRUCellDecomposition, ov::pass::GRUCellFusion, ov::pass::GatherNopElimination, ov::pass::Gelu7Downgrade, ov::pass::GeluFusionWithErfFour, ov::pass::GeluFusionWithErfOne, ov::pass::GeluFusionWithErfThree, ov::pass::GeluFusionWithErfTwo, ov::pass::GeluFusionWithTanh, ov::pass::GeluFusionWithTanhNoPower, ov::pass::GroupConvolutionBackpropDataMultiplyFusion, ov::pass::GroupConvolutionMultiplyFusion, ov::pass::GroupNormalizationDecomposition, ov::pass::GroupedGatherElimination, ov::pass::HSigmoidDecomposition, ov::pass::HSigmoidFusionWithClampDiv, ov::pass::HSigmoidFusionWithClampMul, ov::pass::HSigmoidFusionWithReluDiv, ov::pass::HSigmoidFusionWithReluMul, ov::pass::HSigmoidFusionWithoutRelu, ov::pass::HSwishDecomposition, ov::pass::HSwishFusionWithClamp, ov::pass::HSwishFusionWithHSigmoid, ov::pass::HSwishFusionWithReluDiv, ov::pass::HSwishFusionWithReluMul, ov::pass::HardSigmoidDecomposition, ov::pass::InitConstMask, ov::pass::InterpolateSequenceFusion, ov::pass::KeepConstAndDecompression, ov::pass::KeepConstantsPrecisionAndAddConverts, ov::pass::LSTMCellDecomposition, ov::pass::LSTMCellFusionWithJointWeights, ov::pass::LSTMCellFusionWithSplitWeights, ov::pass::LabelResolvingThroughSelect, ov::pass::LeakyReluFusion, ov::pass::LogSoftmaxDecomposition, ov::pass::MVN6Decomposition, ov::pass::MVNFusionWithConstantsInside, ov::pass::MVNFusionWithoutConstants, ov::pass::MarkCompressedFloatConstants, ov::pass::MarkDequantizationSubgraph, ov::pass::MatMulConstTransposesExtraction, ov::pass::MatMulMultiplyFusion, ov::pass::MishFusion, ov::pass::MoveEltwiseUpThroughDataMov, ov::pass::MulFakeQuantizeFusion, ov::pass::MultiplyConvolutionBackpropDataFusion, ov::pass::MultiplyConvolutionFusion, ov::pass::MultiplyGroupConvolutionBackpropDataFusion, ov::pass::MultiplyGroupConvolutionFusion, ov::pass::MultiplyMultiplyFusion, ov::pass::NearestNeighborUpsamplingFusion, ov::pass::NonZeroHorizontalFusion, ov::pass::NopBroadcast, ov::pass::NormalizeL2Decomposition, ov::pass::NormalizeL2Fusion, ov::pass::PReluFusionAbsSubMulMulAdd, ov::pass::PReluFusionMultiplyAdd, ov::pass::PReluFusionMultiplySub, ov::pass::PReluFusionNegReluMulAdd, ov::pass::PReluFusionNegativeAdd, ov::pass::PReluFusionNegativeSub, ov::pass::PadFusionAvgPool, ov::pass::PadFusionConvolution, ov::pass::PadFusionConvolutionBackpropData, ov::pass::PadFusionGroupConvolution, ov::pass::PadFusionGroupConvolutionBackpropData, ov::pass::PositionIDsReplacer, ov::pass::PrepareShapeOpsForEliminationAroundBE, ov::pass::PrevSequenceLengthPattern, ov::pass::Proposal1Scales, ov::pass::Proposal4Scales, ov::pass::PullReshapeThroughReduce, ov::pass::PullSqueezeThroughEltwise, ov::pass::PullTransposeThroughFQUp, ov::pass::PullUnsqueezeThroughReduce, ov::pass::RMSFusion, ov::pass::RNNCellDecomposition, ov::pass::RandomUniformFusion, ov::pass::ReduceL1Decomposition, ov::pass::ReduceL2Decomposition, ov::pass::ReduceMerge, ov::pass::ReduceReshapeFusion, ov::pass::ReluFakeQuantizeFusion, ov::pass::RemoveConcatZeroDimInput, ov::pass::RemoveFilteringBoxesBySize, ov::pass::ReplaceConcatReduceByMinOrMax, ov::pass::ReshapeAMatMul, ov::pass::ReshapeBMatMul, ov::pass::ReshapeOptimizations, ov::pass::ReshapePRelu, ov::pass::ReshapeSequenceFusion, ov::pass::ReshapeSinkingMatMul, ov::pass::ReshapeTo1D, ov::pass::RoPEFusionChatGLM, ov::pass::RoPEFusionCosSinPreprocess, ov::pass::RoPEFusionGPTJ, ov::pass::RoPEFusionGPTNEOX, ov::pass::RoPEFusionIOSlicing, ov::pass::RoPEFusionPreprocess, ov::pass::RoPEFusionQwen, ov::pass::RoPEShareCosSin, ov::pass::ScaledDotProductAttentionDecomposition, ov::pass::SelectWithOneValueCondition, ov::pass::SequenceFusion, ov::pass::ShapeOfConstFolding, ov::pass::ShuffleChannelsFusion, ov::pass::SimplifyCTCGreedyDecoderSeqLen, ov::pass::SimplifyGatherShapeOf, ov::pass::SimplifySecondInputOfReshape, ov::pass::SkipGatherBeforeTransposeAndReshape, ov::pass::SliceSequenceToSingleSlice, ov::pass::SliceToStridedSlice, ov::pass::SoftPlusDecomposition, ov::pass::SoftPlusFusion, ov::pass::SoftPlusToMishFusion, ov::pass::SoftSignDecomposition, ov::pass::SoftmaxDecomposition, ov::pass::SoftmaxFusion, ov::pass::SpaceToBatchFusion, ov::pass::SplitConcatPairToInterpolateFusion, ov::pass::SplitSqueezeConcatFusion, ov::pass::SqueezeStridedSlice, ov::pass::StateManagementPattern, ov::pass::StridedSliceSqueeze, ov::pass::SubtractFusion, ov::pass::SupportedNodesStridesPropagation, ov::pass::SwishFusionWithBeta, ov::pass::SwishFusionWithSigmoid, ov::pass::SwishFusionWithSigmoidWithBeta, ov::pass::SwishFusionWithoutBeta, ov::pass::TotalSequenceLengthPattern, ov::pass::TransposeConvert, ov::pass::TransposeEltwise, ov::pass::TransposeFQReduction, ov::pass::TransposeFuse, ov::pass::TransposeMatMul, ov::pass::TransposeReduction, ov::pass::TransposeReshapeEliminationForMatmul, ov::pass::TransposeToReshape, ov::pass::UniqueDecomposition, ov::pass::UnsupportedNodesStridesPropagation, ov::pass::WeightsDequantizeToFakeQuantize, ov::pass::WrapInterpolateIntoTransposes, ov::pass::low_precision::ConvertSubtractConstant, ov::pass::low_precision::CreatePrecisionsDependentAttribute< AttributeType, OperationType >, ov::pass::low_precision::LayerTransformation, ov::pass::low_precision::MarkupBias, ov::pass::low_precision::PropagateThroughPrecisionPreserved< AttributeType >, ov::pass::low_precision::PropagateToInput< AttributeType >, ov::pass::low_precision::PullReshapeThroughDequantization, ov::pass::low_precision::PullTransposeThroughDequantization, ov::pass::low_precision::UpdateSharedPrecisionPreserved< AttributeType, ExpectedAttributeType >, ov::pass::transpose_sinking::TSBinaryBackward, ov::pass::transpose_sinking::TSConcatBackward, ov::pass::transpose_sinking::TSCumSumBackward, ov::pass::transpose_sinking::TSDataMovementBackward, ov::pass::transpose_sinking::TSForwardBase, ov::pass::transpose_sinking::TSFuse, ov::pass::transpose_sinking::TSGatherBackward, ov::pass::transpose_sinking::TSInterpolateBackward, ov::pass::transpose_sinking::TSReductionBackward, ov::pass::transpose_sinking::TSResetNoSinkingAttribute, ov::pass::transpose_sinking::TSSliceBackward, ov::pass::transpose_sinking::TSSplitBackward, ov::pass::transpose_sinking::TSSqueezeBackward, ov::pass::transpose_sinking::TSTileBackward, ov::pass::transpose_sinking::TSUnaryBackward, ov::pass::transpose_sinking::TSUnsqueezeBackward

class GraphRewrite : public ov::pass::ModelPass#
#include <graph_rewrite.hpp>

GraphRewrite は MatcherPass のコンテナであり、MatcherPass を関数上で効率的に実行できるようにします。

グラフ書き換えパスは、関数のマッチャーパス実行に使用されます。MatcherPassを登録するには以下を使用します:

関連情報

add_matcher<T>(args) メソッド。ここで、T は MatcherPass クラスです。デフォルトのアルゴリズムとして、グラフの書き換えパスはトポロジカルな順序で関数をトラバースし、各ノードに登録されたマッチャーパスを適用します。ただし、登録されているすべてのマッチャーパスにマッチャーパターン内のタイプベースのルートノードがある場合は、効率的なメカニズムを使用して実行されます。マッチャーパターンのルートは、opset または pattern::op::WrapType からの操作の場合、タイプベースになります。注: マッチャーパターンを実装するときは、ルートノードが opset からの操作であるか、ov::pass::pattern::op::WrapType を持っていることを確認してください。これにより、GraphRewrite はマッチャーパスをより効率的に実行できるようになります。

以下によってサブクラス化: ConvertBitwiseToLogicalov::pass::BackwardGraphRewriteov::pass::BidirectionalSequenceDecompositionov::pass::CompressFloatConstantsov::pass::CompressQuantizeWeightsov::pass::ConcatReduceFusionov::pass::ConvertLoopToLSTMSequenceov::pass::ConvertNmsGatherPathToUnsignedov::pass::ConvertReduceToPoolingov::pass::ConvertReduceToReshapeov::pass::ConvertSequenceToTensorIteratorov::pass::ConvertTensorIteratorToSequenceov::pass::FuseFilteringBoxesBySizeov::pass::GeluFusionov::pass::HSigmoidFusionov::pass::HSwishFusionov::pass::InitMasksov::pass::LSTMCellFusionov::pass::LinOpSequenceFusionov::pass::MVNFusionov::pass::NopEliminationov::pass::PReluFusionov::pass::PadFusionov::pass::PropagateMasksov::pass::PullThroughReduceov::pass::RoPEFusionov::pass::SwishFusionov::pass::TransposeSinkingov::pass::low_precision::TypeRelaxedReplacerov::pass::transpose_sinking::TSGeneralBackwardov::pass::transpose_sinking::TSGeneralForward

パブリック関数

template<typename T, bool Enabled = true, class ...Args, typename std::enable_if<std::is_base_of<pass::MatcherPass, T>::value, bool>::type = true>
inline std::shared_ptr<T> add_matcher(Args&&... args)#

指定されたトランスフォーメーション・クラス・タイプを GraphRewrite 実行リストに登録します。登録されたすべてのトランスフォーメーションは、単一のグラフトラバースで実行されます。以下の例は、pass::GraphRewrite の基本的な使用方法を示しています。

pass::Manager manager; 
auto anchor = manager.register_pass<GraphRewrite>(); anchor->add_matcher<MatcherPassA>(); 
anchor->add_matcher<MatcherPassB>(); anchor->set_name("CommonMatchers"); 
manager.run_passes(f);
いくつかの目的で、トランスフォーメーションを登録してデフォルトで無効にすることができます。
anchor->add_matcher<MatcherPassB, false>();

戻り値:

トランスフォーメーション・インスタンスへの shared_ptr

template<typename T, class ...Args, typename std::enable_if<std::is_base_of<pass::GraphRewrite, T>::value, bool>::type = true>
inline void add_matcher(Args&&... args)#

コンストラクターに登録されたマッチャーパスのシーケンスを含む GraphRewrite クラスからパスを登録します。次に例を示します:

class ov::pass::LinFusions: public ov::pass::GraphRewrite { public: OPENVINO_RTTI(“LinFusion”); Fusions() { add_matcher<ov::pass::AddFusion>(); add_matcher<ov::pass::MulFusion>(); } };

pass::Manager manager; auto anchor = manager.register_pass<GraphRewrite>(); anchor->add_matcher<LinFusions>(); anchor->add_matcher<OtherFusions>(); anchor->set_name(“CommonFusions”); manager.run_passes(f);

この場合、LinFusions パスからのすべてのマッチャーパスは、他の登録済みマッチャーと統合されます。

virtual void set_pass_config(const std::shared_ptr<PassConfig> &pass_config) override#

特定のトランスフォーメーション・インスタンスの PassConfig を設定します。

パラメーター:

pass_configPassConfig は shared_ptr です

class LowLatency2 : public ov::pass::ModelPass#
#include <low_latency.hpp>

トランスフォーメーションは、ネットワーク内のすべての TensorIterator/Loop レイヤーを検出し、TensorIterator/Loop 本体の Result と Parameter 間の接続を記述するすべてのバックエッジを処理し、このバックエッジに対応する入力と出力に ReadValue レイヤーと Assign レイヤーを挿入します。サポートされるプラットフォーム: CPU

以下の例は、transformation [] - TensorIterator body () - new layer BE - バックエッジによって行われた変更を説明しています:

トランスフォーメーションを適用する前: -> input1[BE_1 -> Parameter -> Layers … -> Result -> BE_1 ]output1->

トランスフォーメーションを適用した後: ->(ReadValue)-> input1[BE_1 ->Parameter->Layers …->Result->BE_1]output1 ->(Assign) \ ->… トランスフォーメーションを適用した後、結果のネットワークを段階的に推論することができ、状態は推論間で保存されます。

class MakeStateful : public ov::pass::ModelPass#
#include <make_stateful.hpp>

トランスフォーメーションにより、提供された Parameter と Result のペアが、メモリーレイヤーの ReadValue と Assign に置き換えられます。

class Manager#
#include <manager.hpp>

マネージャー・クラスを使用すると、トランスフォーメーション・パスを管理できます。

パブリック関数

template<typename T, bool Enable = true, class ...Args>
inline std::shared_ptr<T> register_pass(Args&&... args)#

指定されたトランスフォーメーション・クラス・タイプを実行リストに登録します。以下の例は、pass::Manager の基本的な使用方法を示しています。

pass::Manager manager; 
manager.register_pass<MyTransformation>(/*transformation constructor ars*&zwj;/); 
manager.run_passes(f);
いくつかの目的で、トランスフォーメーションを登録してデフォルトで無効にすることができます。
manager.register_pass<MyTransformation, false>();

戻り値:

トランスフォーメーション・インスタンスへの shared_ptr

bool run_passes(std::shared_ptr<Model> model)#

指定されたモデルに対して登録されたトランスフォーメーションを実行します。

パラメーター:

model入力モデル

戻り値:

入力が受け付けられた場合は true、それ以外は false を返します。

void set_per_pass_validation(bool new_state)#

登録された各パスを実行した後、検証パスの実行を有効/無効にするフラグを設定します。

パラメーター:

new_state – 値 “true” は検証パスの実行を有効にし、 “false” は無効にします

inline std::shared_ptr<PassConfig> get_pass_config()#
戻り値:

PassConfig 共有オブジェクト。このオブジェクトは、トランスフォーメーション・パイプラインの構成に使用されます。このオブジェクトを使用すると、トランスフォーメーションの実行を無効/有効にしたり、特定のトランスフォーメーションにコールバックを設定したりできます。詳細については、PassConfig クラスを参照してください。

class PassBase#
#include <pass.hpp>

トランスフォーメーション・パスの基本クラス。

ov::pass::MatcherPassov::pass::ModelPass によってサブクラス化されます

パブリック関数

bool get_property(const PassPropertyMask &prop_mask) const#

このパスにすべてのパス・プロパティーがあるか確認します。

void set_callback(const param_callback &callback)#

特定のトランスフォーメーション・タイプのコールバックを設定します。このメソッドはグローバル・コールバックを設定します。詳細については、PassConfig クラスのドキュメントを参照してください。

パラメーター:

callback – ノードを受け取りブール値を返すラムダ関数

inline virtual void set_pass_config(const std::shared_ptr<PassConfig> &pass_config)#

特定の変換インスタンスの PassConfig を設定します。

パラメーター:

pass_configPassConfig は shared_ptr です

inline std::shared_ptr<PassConfig> get_pass_config()#

PassConfig 共有インスタンスにアクセスできるようにします。

戻り値:

PassConfig クラスの共有インスタンス

inline bool transformation_callback(const std::shared_ptr<const Node> &node)#

指定されたノードにコールバックを適用します。デフォルトでコールバックは false を返します。

パラメーター:

node – コールバック内で使用されるノード

戻り値:

指定されたノードのコールバック実行の結果

class ModelPass : public ov::pass::PassBase#
#include <pass.hpp>

モデルパスの基本クラス。

以下でサブクラス化されます: ov::pass::AlignMixedFP32FP16Typesov::pass::ApplySymbolEquivalenceov::pass::ChangePlaceholderTypesov::pass::CommonOptimizationsov::pass::ConstantFoldingov::pass::ConvertCompressedOnlyToLegacyov::pass::ConvertFP32ToFP16ov::pass::ConvertOpSet2ToOpSet1ov::pass::ConvertOpSet3ToOpSet2ov::pass::ConvertPrecisionov::pass::FindBatchov::pass::FusedNamesCleanupov::pass::GraphRewriteov::pass::GroupedSliceToVSplitOptimizationov::pass::GroupedStridedSliceOptimizerov::pass::Hashov::pass::InitNodeInfoov::pass::LSTMStatesBroadcastov::pass::LowLatency2ov::pass::MOCLegacyTransformationsov::pass::MOCTransformationsov::pass::MakeStatefulov::pass::MarkPrecisionSensitiveShapeOfSubgraphsov::pass::MarkSugraphsToKeepInMixedPrecisionov::pass::OptimizeSymbolsUsedAsValuesov::pass::Pruningov::pass::PushConstantToSubgraphov::pass::RemoveMultiSubGraphOpDanglingParamsResultsov::pass::ResolveNameCollisionsov::pass::ReverseInputChannelsFusionov::pass::ReverseShapeAndTypeInferov::pass::SDPAToPagedAttentionov::pass::Serializeov::pass::SharedOpOptimizationov::pass::ShrinkWeights、ov::pass::SimplifyShapeOfSubGraph、ov::pass::SmartReshapeov::pass::StatefulToStatelessov::pass::StreamSerializeov::pass::StridedSliceOptimizationov::pass::SymbolicOptimizationsov::pass::SymbolicPropagationov::pass::UnrollIfov::pass::UnrollTensorIteratorov::pass::UselessSliceEraserov::pass::Validateov::pass::VisualizeTreeov::pass::low_precision::AlignQuantizationIntervalsov::pass::low_precision::AlignQuantizationParametersov::pass::low_precision::MarkupAvgPoolPrecisionPreservedov::pass::low_precision::MarkupCanBeQuantizedov::pass::low_precision::MarkupOptimizationsov::pass::low_precision::MarkupPrecisionsov::pass::low_precision::MarkupQuantizationGranularityov::pass::low_precision::PropagatePrecisionsov::pass::low_precision::PropagateSharedValue< AttributeType >ov::pass::transpose_sinking::TSGeneral

class PassConfig#
#include <pass_config.hpp>

pass::Manager 内に登録されたトランスフォーメーションを無効化/有効化するのに使用されるトランスフォーメーションの構成を表すクラス。また、すべてまたは特定のトランスフォーメーションに対してコールバックを設定することもできます。

pass::Manager が作成されると、ネストされたパスを含むこのマネージャー内に登録されたすべてのパスは、PassConfig クラスの同じインスタンスを共有します。このクラスを使用するには、まず manager.get_pass_config() メソッドを呼び出して、クラスの共有インスタンスを取得する必要があります。その後、トランスフォーメーション type_info に基づいてパスを無効/有効にできるようになります。次に例を示します:

pass::Manager manager; 
manager.register_pass<CommonOptimizations>(); 
auto pass_config = manager.get_pass_config(); 
pass_config->disable<ConvertGELU>(); // this will disable nested pass inside // CommonOptimizations pipeline manager.run_passes(f);
場合によっては、他のトランスフォーメーション内のトランスフォーメーションを手動で呼び出す必要があります。その場合、トランスフォーメーションを実行する前に、このパスが無効になっていないことを手動で確認し、現在の PassConfig インスタンスをこのトランスフォーメーションに設定する必要があります。次に例を示します:
// MatcherPass コールバック内または FunctionPass run_on_function() メソッド内 
// PassConfig の共有インスタンスを取得するには get_pass_config() メソッドを呼び出す必要があります 
auto pass_config = get_pass_config(); 

// ネストされたトランスフォーメーションを実行する前に、無効になっているかどうかを確認する必要があります
if (!pass_config->is_disabled<ConvertGELU>()) { 
    auto pass = ConvertGELU(); 
    pass->set_pass_config(pass_config); 
    pass.apply(node); 
}
トランスフォーメーション内でこのロジックに従うことで、トランスフォーメーションが正しい方法で実行されることが保証されます。

パブリック関数

PassConfig()#

デフォルト・コンストラクター。

void disable(const DiscreteTypeInfo &type_info)#

type_info によるトランスフォーメーションを無効にします。

パラメーター:

type_info – トランスフォーメーションの type_info

template<class T>
inline void disable()#

クラスタイプによるトランスフォーメーションを無効にします (type_info に基づく)

void enable(const DiscreteTypeInfo &type_info)#

type_info によるトランスフォーメーションを有効にします。

パラメーター:

type_info – トランスフォーメーションの type_info

template<class T>
inline void enable()#

クラスタイプによるトランスフォーメーションを有効にします (type_info に基づく)

inline void set_callback(const param_callback &callback)#

あらゆる種類のトランスフォーメーションのコールバックを設定します。

template<typename T, class ...Args>
inline void set_callback(const param_callback &callback)#

特定のトランスフォーメーション・クラス・タイプのコールバックを設定します。

以下の例は、このメソッドを使用して 1 つまたは複数のパスのコールバックを設定する方法を示しています。

pass_config->set_callback<ov::pass::ConvertBatchToSpace, ov::pass::ConvertSpaceToBatch>( [](const_node_ptr &node) -> bool { // Disable transformations for cases when input shape rank is not equal to 4 const auto input_shape_rank = node->get_output_partial_shape(0).rank().get_length(); 
if (input_shape_rank != 4) { 
    return false; 
} 
return true; });
トランスフォーメーション内では、このコールバックで動作するコードを提供する必要があることに注意してください。次の例を参照してください:
if (transformation_callback(node)) 
{ 
    return false; // exit from transformation 
}

param_callback get_callback(const DiscreteTypeInfo &type_info) const#

指定されたトランスフォーメーション type_info のコールバックを取得します。

指定されたトランスフォーメーション・タイプに対してコールバックが設定されていない場合、グローバル・コールバックが返されます。ただし、グローバル・コールバックも設定されていない場合は、デフォルトのコールバックが返されます。

パラメーター:

type_info – トランスフォーメーションの type_info

template<class T>
inline param_callback get_callback() const#

特定のトランスフォーメーション・クラス・タイプのコールバックを取得します。

戻り値:

コールバック・ラムダ関数

inline bool is_disabled(const DiscreteTypeInfo &type_info) const#

いずれかのトランスフォーメーション・タイプが無効になっているかどうかを確認します。

パラメーター:

type_info – トランスフォーメーションの type_info

戻り値:

トランスフォーメーション・タイプが無効になっている場合は true、そうでない場合は false

template<class T>
inline bool is_disabled() const#

いずれかのトランスフォーメーション・クラス・タイプが無効になっているかどうかを確認します。

戻り値:

トランスフォーメーション・タイプが無効になっている場合は true、そうでない場合は false

inline bool is_enabled(const DiscreteTypeInfo &type_info) const#

いずれかのトランスフォーメーション・タイプがを有効に強制されているかどうかを確認します。

パラメーター:

type_info – トランスフォーメーションの type_info

戻り値:

トランスフォーメーション・タイプがを有効に強制されている場合は true、そうでない場合は false

template<class T>
inline bool is_enabled() const#

いずれかのトランスフォーメーション・クラス・タイプがを有効に強制されているかどうかを確認します。

戻り値:

トランスフォーメーション・タイプがを有効に強制されている場合は true、そうでない場合は false

class SDPAToPagedAttention : public ov::pass::ModelPass#
#include <sdpa_to_paged_attention.hpp>

このトランスフォーメーションにより、LLM の KV キャッシュ処理部分が PagedAttention 操作に置き換えられます。

class Serialize : public ov::pass::ModelPass#
#include <serialize.hpp>

シリアル化トランスフォーメーションは、ov::Model を IR ファイルに変換します。

Attention

  • 動的形状はサポートされていません。

class StreamSerialize : public ov::pass::ModelPass#
#include <serialize.hpp>

StreamSerialize トランスフォーメーションは、ov::Model を単一のバイナリーストリームに変換します。

Attention

  • 動的形状はサポートされていません。

struct DataHeader#
#include <serialize.hpp>
class StatefulToStateless : public ov::pass::ModelPass#
#include <stateful_to_stateless.hpp>

トランスフォーメーションにより、KV キャッシュの状態がステートレス形式に戻ります。

class Validate : public ov::pass::ModelPass#
#include <validate.hpp>

検証パスは、属性と入力の健全性チェックを実行し、指定された計算グラフ内のすべての計算ノードの出力形状と要素タイプを計算します。

検証と推論は、各ノードの ov::Node::validate_and_infer_types() 関数の特定の実装を呼び出すことによって行われます。

デフォルトでは、ov::pass::Manager はすべての最適化パスを実行した後にこのパスを実行します。これは、最適化パスによるグラフの更新によって、計算ノード上の形状とデータタイプの要件が満たされるようにするためです。このデフォルトの検証実行は、ov::pass::Manager::set_per_pass_validation(bool) 関数を呼び出すことによって変更できます。

class VisualizeTree : public ov::pass::ModelPass#
#include <visualize_tree.hpp>

VisualizeTree パスを使用すると、ov::Model を xDot 形式にシリアル化できます。