メインコンテンツへスキップ

トランスパイラープラグインのインストールと使用

Package versions

The code on this page was developed using the following requirements. We recommend using these versions or newer.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Qiskitユーザーのより広いコミュニティがカスタムトランスパイルコードを開発・再利用しやすくするため、Qiskit SDKはプラグインインターフェースをサポートしています。これにより、サードパーティのPythonパッケージがQiskit経由でアクセス可能な拡張トランスパイル機能を提供することを宣言できます。

現在、サードパーティプラグインは以下の3つの方法で拡張トランスパイル機能を提供できます。

このページの残りの部分では、利用可能なプラグインの一覧表示、新しいプラグインのインストール、およびその使用方法について説明します。

利用可能なプラグインの一覧と新規インストール

Qiskitにはすでにトランスパイル用の組み込みプラグインがいくつか含まれています。さらにインストールするには、Pythonのパッケージマネージャーを使用します。たとえば、pip install qiskit-toqmを実行してQiskit TOQMルーティングステージプラグインをインストールできます。多数のサードパーティプラグインがQiskitエコシステムの一部となっています。

利用可能なトランスパイラーステージプラグインの一覧

list_stage_plugins関数を使用し、一覧表示したいステージの名前を引数として渡します。

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit.transpiler.preset_passmanagers.plugin import list_stage_plugins

list_stage_plugins("layout")
['default', 'dense', 'sabre', 'trivial']
list_stage_plugins("routing")
['basic', 'default', 'lookahead', 'none', 'sabre']

qiskit-toqmがインストールされている場合、toqmroutingプラグインの一覧に表示されます。

利用可能なユニタリー合成プラグインの一覧

unitary_synthesis_plugin_names関数を使用します。

from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names

unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']

利用可能な高レベル合成プラグインの一覧

high_level_synthesis_plugin_names関数を使用し、合成する「高レベルオブジェクト」の型名を引数として渡します。この名前は、合成対象のオブジェクト型を表すOperationクラスのname属性に対応します。

from qiskit.transpiler.passes.synthesis import (
high_level_synthesis_plugin_names,
)

high_level_synthesis_plugin_names("clifford")
['ag', 'bm', 'default', 'greedy', 'layers', 'lnn', 'rb_default']

すべての高レベル合成プラグインの名前を一覧表示するには、HighLevelSynthesisPluginManagerクラスを使用できます。

from qiskit.transpiler.passes.synthesis.plugin import (
HighLevelSynthesisPluginManager,
)

HighLevelSynthesisPluginManager().plugins.names()
['FullAdder.default',
'FullAdder.ripple_c04',
'FullAdder.ripple_v95',
'HalfAdder.default',
'HalfAdder.qft_d00',
'HalfAdder.ripple_c04',
'HalfAdder.ripple_r25',
'HalfAdder.ripple_v95',
'IntComp.default',
'IntComp.noaux',
'IntComp.twos',
'ModularAdder.default',
'ModularAdder.modular_v17',
'ModularAdder.qft_d00',
'ModularAdder.ripple_c04',
'ModularAdder.ripple_v95',
'Multiplier.cumulative_h18',
'Multiplier.default',
'Multiplier.qft_r17',
'PauliEvolution.default',
'PauliEvolution.rustiq',
'WeightedSum.default',
'annotated.default',
'clifford.ag',
'clifford.bm',
'clifford.default',
'clifford.greedy',
'clifford.layers',
'clifford.lnn',
'linear_function.default',
'linear_function.kms',
'linear_function.pmh',
'mcmt.default',
'mcmt.noaux',
'mcmt.vchain',
'mcmt.xgate',
'mcx.1_clean_b95',
'mcx.1_clean_kg24',
'mcx.1_dirty_kg24',
'mcx.2_clean_kg24',
'mcx.2_dirty_kg24',
'mcx.default',
'mcx.gray_code',
'mcx.n_clean_m15',
'mcx.n_dirty_i15',
'mcx.noaux_hp24',
'mcx.noaux_v24',
'permutation.acg',
'permutation.basic',
'permutation.default',
'permutation.kms',
'permutation.token_swapper',
'qft.default',
'qft.full',
'qft.line',
'clifford.rb_default']

プラグインの使用

このセクションでは、トランスパイラープラグインの使用方法を説明します。コード例ではQiskitに付属のプラグインを使用していますが、サードパーティパッケージからインストールしたプラグインも同じ方法で使用できます。

トランスパイラーステージプラグインの使用

トランスパイラーステージプラグインを使用するには、generate_preset_pass_managerまたはtranspileの適切な引数にプラグイン名を指定します。引数名はトランスパイルステージ名に_methodを付加した形式になります。たとえば、lookaheadルーティングプラグインを使用するには、routing_method引数にlookaheadを指定します。

from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("ibm_fez")

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, routing_method="lookahead"
)

ユニタリー合成プラグインの使用

ユニタリー合成プラグインを使用するには、generate_preset_pass_managerまたはtranspileunitary_synthesis_method引数にプラグイン名を指定します。

pass_manager = generate_preset_pass_manager(
optimization_level=3,
backend=backend,
unitary_synthesis_method="sk",
unitary_synthesis_plugin_config=dict(
basis_gates=["cz", "id", "rz", "sx", "x"]
),
)

ユニタリー合成は、generate_preset_pass_managerが返す、またはtranspileで使用されるステージドパスマネージャーのinittranslationoptimizationステージで使用されます。これらのステージの説明については、トランスパイラーステージを参照してください。

ユニタリー合成メソッドのオプションを渡すには、自由形式の辞書であるunitary_synthesis_plugin_config引数を使用します。合成メソッドのドキュメントに、サポートされるオプションが記載されています。組み込みユニタリー合成プラグインのドキュメントへのリンクはこちらのリストを参照してください。

高レベル合成プラグインの使用

まず、さまざまな高レベルオブジェクトに使用するプラグイン名を格納するためにHLSConfigを作成します。たとえば次のようにします。

from qiskit.transpiler.passes import HLSConfig

hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])

このコードセルは、Cliffordオブジェクトの合成にlayersプラグインを使用し、LinearFunctionオブジェクトの合成にpmhプラグインを使用する高レベル合成設定を作成します。キーワード引数の名前は、合成対象のオブジェクト型を表すOperationクラスのname属性に対応します。各高レベルオブジェクトについて、指定されたプラグインのリストがいずれかが成功するまで順番に試行されます(上記の例では、各リストにプラグインが1つだけ含まれています)。

プラグインを名前で指定する代わりに、(name, options)タプルを渡すこともできます。タプルの2番目の要素はプラグインのオプションを含む辞書です。合成メソッドのドキュメントに、サポートされるオプションが記載されています。組み込み高レベル合成プラグインのドキュメントへのリンクはこちらのリストを参照してください。

HLSConfigオブジェクトを作成したら、generate_preset_pass_managerまたはtranspilehls_config引数として渡します。

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)

高レベル合成は、generate_preset_pass_managerが返す、またはtranspileで使用されるステージドパスマネージャーのinittranslationoptimizationステージで使用されます。これらのステージの説明については、トランスパイラーステージを参照してください。

次のステップ

Recommendation