トランスパイラーステージプラグインインターフェース
qiskit.transpiler.preset_passmanagers.plugin
このモジュールは、プリセット・パス・マネージャと transpile() 関数を定義します。 これにより、外部の Python パッケージが PassManager オブジェクトを提供できる。
プラグインインターフェースは、Qiskitの外部パッケージがトランスパイラステージを含むことを宣伝できるようにするsetuptools エントリーポイントを使用して構築されています。
トランスパイラ合成メソッド用のプラグインの書き方については、以下を参照してください。 qiskit.transpiler.passes.synthesis.plugin.
プラグインの段階
プリセット・パス・マネージャーには6つのステージがあり、いずれも対応するエントリー・ポイントを使って外部プラグインをアクティブにロードする。 各ステージの概要は以下の通り。 各ステージの説明と期待値の詳細については、ステージ名のリンクから完全なドキュメントを参照してください。
ステージ名 | エントリー・ポイント | 予約名 | サマリー |
|---|---|---|---|
| 初期化 | qiskit.transpiler.init | default | 抽象的な回路を高レベルで論理的に最適化し、マルチ量子ビット演算を1量子ビット演算や2量子ビット演算に変換する。 |
| 配置 | qiskit.transpiler.layout | trivial, dense, sabre, default | 仮想量子ビットの物理量子ビットへの初期マッピングを選択し、明示的なアンシラを含むように回路を拡張する。 このステージは、 routing と組み合わされることもある。 |
| ルーティング | qiskit.transpiler.routing | default, basic, stochastic, lookahead, sabre | ゲートを回路に挿入し、回路が以下の接続制約に適合するようにする。 Target. 挿入されたゲートはまだターゲットISAにある必要はないため、 swap 命令として出力されることが多い。 この段階は、 layout に包含されることもある。 |
| 変換 | qiskit.transpiler.translation | default, translator, synthesis | ターゲットISAの外にあるすべてのゲートを、ISA内のゲートだけを使用するように書き換える。 |
| 最適化 | qiskit.transpiler.optimization | default | 低レベルで物理回路を意識した最適化。 init とは異なり、 optimization ステージは物理的な回路レベルで機能する。 |
| スケジューリング | qiskit.transpiler.scheduling | alap, asap, default | 挿入 Delay を挿入し、回路の壁時計のタイミングを完全に明示する。 |
プラグインの作成
パスマネージャー・ステージ・プラグインを書くには、主に2つのステップがある。 最初のステップは、抽象プラグインクラス PassManagerStagePlugin のサブクラスを作成することです。 PassManager のサブクラスを作成します。 例えば、 layout ステージプラグインを作成する。 VF2Layout (を実行し(最適化レベルに応じて試行回数が増える)、完璧なレイアウトを見つけられなかった場合は TrivialLayout もし VF2Layout 、完璧なレイアウトを見つけることができなければ、このプラグインを使うことになる:
from qiskit.transpiler.preset_passmanagers.plugin import PassManagerStagePlugin
from qiskit.transpiler.preset_passmanagers import common
from qiskit.transpiler import PassManager
from qiskit.transpiler.passes import VF2Layout, TrivialLayout
from qiskit.transpiler.passes.layout.vf2_layout import VF2LayoutStopReason
from qiskit.passmanager import ConditionalController
def _vf2_match_not_found(property_set):
return property_set.get("layout") is None or (
property_set.get("VF2Layout_stop_reason") is not None
and property_set.get("VF2Layout_stop_reason")
is not VF2LayoutStopReason.SOLUTION_FOUND
)
class VF2LayoutPlugin(PassManagerStagePlugin):
def pass_manager(self, pass_manager_config, optimization_level):
layout_pm = PassManager(
[
VF2Layout(
coupling_map=pass_manager_config.coupling_map,
max_trials=optimization_level * 10 + 1,
target=pass_manager_config.target,
),
ConditionalController(
TrivialLayout(pass_manager_config.coupling_map),
condition=_vf2_match_not_found,
),
]
)
layout_pm += common.generate_embed_passmanager(pass_manager_config.coupling_map)
return layout_pm2番目のステップは、パッケージのメタデータ内で、その PassManagerStagePlugin サブクラスをsetuptoolsのエントリポイントとして公開することです。 これは、プラグインパッケージの entry-points table pyproject.toml 内で、プラグインが対象とするステージに応じた適切な名前空間の下に、必要なエントリポイントを記述することで実現できます。 「 Plugin Stages」 では、ステージの一覧、エントリポイント、および各ステージで求められる要件を確認できます。 たとえば、前述のサンプルプラグインを引き続き見てみましょう:
[project.entry-points."qiskit.transpiler.layout"]
"vf2" = "qiskit_plugin_pkg.module.plugin:VF2LayoutPlugin"各プラグインがユニークな名前である限り、1つのパッケージに含めることができるプラグインの数に制限はありません。 そのため、必要に応じて1つのパッケージで複数のプラグインを公開することができる。 各ステージの予約名のリストについては、 Plugin Stagesを参照してください。
プラグインAPI
PassManagerStagePlugin() | PassManagerStagePlugin は、カスタムステージを transpile(). |
PassManagerStagePluginManager() | プリセット・パス・マネージャー・ステージ・プラグイン用のマネージャー・クラス。 |
list_stage_plugins
qiskit.transpiler.preset_passmanagers.plugin.list_stage_plugins(stage_name)
ステージにインストールされているプラグインのリストを取得する。
パラメーター
stage_name (str) – プラグイン名を取得するステージ名
戻り値
指定されたステージにインストールされたプラグイン名のリスト
戻りの型
プラグイン
レイズ
TranspilerError - 無効なステージ名が指定された場合。
passmanager_stage_plugins
qiskit.transpiler.preset_passmanagers.plugin.passmanager_stage_plugins(stage)
各ステージ名について、プラグインのクラスタイプをdictで返します。
この関数は、プラグインに関する詳細情報を取得するのに便利です:
from qiskit.transpiler.preset_passmanagers.plugin import passmanager_stage_plugins
routing_plugins = passmanager_stage_plugins('routing')
basic_plugin = routing_plugins['basic']
help(basic_plugin)Help on BasicSwapPassManager in module ...preset_passmanagers.builtin_plugins object:
class BasicSwapPassManager(...preset_passmanagers.plugin.PassManagerStagePlugin)
| Plugin class for routing stage with :class:`~.BasicSwap`
|
| Method resolution order:
| BasicSwapPassManager
| ...preset_passmanagers.plugin.PassManagerStagePlugin
| abc.ABC
| builtins.object
...パラメーター
stage (str) – ステージネーム
戻り値
キーはプラグインの名前で、値はそれぞれのクラスタイプです。
戻りの型
レイズ
TranspilerError - 無効なステージ名が指定された場合。