トランスパイラ設定のデフォルト値と構成オプション
このページのコードは、以下の要件に基づいて開発された。 これらのバージョンまたは新しいバージョンの使用をお勧めします。
qiskit[all]~=2.5.1 qiskit-ibm-runtime~=0.47.0
QPUは基底ゲートのセットが限られており、任意の演算を実行できないため、抽象回路はトランスパイルする必要がある。 トランスパイラの機能は、任意の回路を指定のQPU上で動作するように変更することである。 これは、回路をサポートされている基底ゲートに変換し、必要に応じてSWAPゲートを導入することで、回路の接続性がQPUのそれと一致するようにする。
パス・マネージャを使ったトランスパイルで説明したように、 パス・マネージャは generate_preset_pass_manager 関数を使用してパスマネージャを作成し、回路または回路のリストをその run メソッドに渡してトランスパイルします。 generate_preset_pass_manager に最適化レベルとバックエンドだけを渡して呼び出すことも、他のすべてのオプションにデフォルトを使用することもできます。
パラメータなしの基本的な使用法
この例では、トランスパイラに回路とターゲットQPUを渡し、それ以上のパラメータは指定しない。
回路を作り、結果を見る:
from qiskit import QuantumCircuit
from qiskit.circuit.library import grover_operator, DiagonalGate
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
# Create circuit to test transpiler on
oracle = DiagonalGate([1] * 7 + [-1])
qc = QuantumCircuit(3)
qc.h([0, 1, 2])
qc = qc.compose(grover_operator(oracle))
# Add measurements to the circuit
qc.measure_all()
# View the circuit
qc.draw(output="mpl")Output:
回路をトランスパイルし、結果を見る:
from qiskit.transpiler import generate_preset_pass_manager
# Specify the QPU to target
backend = FakeSherbrooke()
# Transpile the circuit
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend
)
transpiled_circ = pass_manager.run(qc)
# View the transpiled circuit
transpiled_circ.draw(output="mpl", idle_wires=False)Output:
利用可能なすべてのパラメータ
以下は generate_preset_pass_manager 関数で使用可能なすべてのパラメータです。 引数には、コンパイルの対象を記述するものと、トランスパイラの動作に影響を与えるものの2種類がある。
optimization_level 以外のパラメータはすべてオプションである。 詳細については、 Transpiler APIドキュメントを参照してください。
optimization_level(int) - 回路の最適化の度合い. 範囲 (0 - 3) の整数。 より高いレベルは、より最適化された回路を生成するが、その代償としてトランスパイルタイムが長くなる。 詳細は、 トランスパイラの最適化レベルを設定するを参照してください。
コンパイル対象を記述するために使用されるパラメータ:
これらの引数は、QPUのカップリングマップ(量子ビットの接続性を記述)、QPUがサポートする基底ゲート、ゲートのエラー率などの情報を含む、回路実行のターゲットQPUを記述します。
これらのパラメーターの多くは、「 トランスピレーションでよく使われるパラメーター 」で詳しく説明されている。
バックエンドパラメータ -
backendを指定した場合、targetやその他のバックエンドオプションを指定する必要はありません。 同様に、targetを指定した場合、backendやその他のバックエンドオプションを指定する必要はない。backend(バックエンド) - これが設定されている場合、トランスパイラーは入力回路をこのデバイスにコンパイルします。coupling_mapなど、これらの設定に影響を与える他のオプションが設定されている場合、それはbackendからの設定を上書きする。target(Target) - バックエンド・トランスパイラ・ターゲット。 通常、これはバックエンドの引数の一部として指定されますが、ターゲットオブジェクトを手動で構築した場合は、ここで指定することができます。 これはbackendからのターゲットを上書きする。backend_properties( BackendProperties ) - ゲート・エラー、読み出しエラー、量子ビットのコヒーレンス時間などの情報を含む、QPU から返されるプロパティ。backend.properties()を実行して、この情報を提供するQPUを見つける。timing_constraints(Dictstr[, int] | None) - 命令の時間分解能に関するオプションの制御ハードウェア制限。 この情報はQPUコンフィギュレーションによって提供される。 QPUに命令時間割り当ての制限がない場合、timing_constraints、None、調整は行われない。 QPUは、次のような一連の制限を報告するかもしれない:granularity:パルスゲートの最小分解能をdt単位で表した整数値。 ユーザー定義のパルスゲートは、この粒度値の倍数の持続時間を持つべきである。min_length:最小パルスゲート長をdt単位で表す整数値。 ユーザー定義のパルスゲートは、この長さより長くなければならない。pulse_alignment:ゲート命令開始時刻の時間分解能を表す整数値。 ゲート命令は、この値の倍数の時間から開始すべきである。acquire_alignment:測定指示開始時刻の時間分解能を表す整数値。 測定指示は、この値の倍数の時刻に開始されなければならない。
basis_gates( [Liststr] | None) - 展開先の基底ゲート名のリスト。 たとえば[、「 u1 」、「 u2 」、「 u3 」、「 cx 」]。Noneの場合は展開しない。coupling_map( CouplingMap | リスト[ [Listint] ]) - マッピングのターゲットへの直接結合マップ(カスタムの場合もある)。 カップリング・マップが左右対称の場合は、両方向を指定する必要がある。 これらのフォーマットに対応しています:- CouplingMap インスタンス
- リスト - 隣接行列として与えられなければならず、各エントリーはQPUがサポートするすべての有向2量子ビット相互作用を指定する。 例えば [[0, 1] [, 0, 3] [, 1, 2] [, 1, 5] [, 2, 5] [, 4, 1] [, 5,] 3]
inst_map( [ListInstructionScheduleMap] | None) - パルス・スケジュールへの回路操作のマッピング。Noneの場合、QPUのinstruction_schedule_map。
トランスパイラ動作に影響を与えるパラメータ
これらのパラメータは、特定のトランスピレーション段階に影響を与える。 中には複数のステージに影響を与えるものもあるが、簡単のため1つのステージにのみ記載した。 使用したい量子ビットに initial_layout のような引数を指定すると、その値は、それを変更する可能性のあるすべてのパスを上書きする。 言い換えれば、トランスパイラーは、あなたが手動で指定したものを変更することはない。 特定のステージの詳細については、 トランスパイラのステージを参照のこと。
hls_config(HLSConfig) -HighLevelSynthesis変換パスに直接渡される、オプションのコンフィギュレーション・クラスHLSConfig。 このコンフィギュレーション・クラスでは、さまざまな高レベル・オブジェクトの合成アルゴリズムとそのパラメータのリストを指定できます。init_method(str) - 初期化段階で使用するプラグイン名。 デフォルトでは、外部プラグインは使用されない。 ステージ名の引数にinitを指定してlist_stage_plugins()を実行すると、インストールされているプラグインの一覧を見ることができる。unitary_synthesis_method(str) - 使用するユニタリー合成法の名前。 デフォルトでは、default。unitary_synthesis_plugin_names()を実行すると、インストールされているプラグインの一覧を見ることができます。unitary_synthesis_plugin_config(dict) - ユニタリー合成プラグインに直接渡されるオプションの設定辞書。 デフォルトのユニタリー合成法はカスタムコンフィギュレーションを取らないため、デフォルトではこの設定は何の効果もない。 カスタムコンフィギュレーションの適用は、unitary_synthesisの引数でユニタリー合成プラグインが指定されている場合にのみ必要です。 これは各ユニタリー合成プラグインのカスタムなので、このオプションの使い方はプラグインのドキュメントを参照してください。
initial_layout(レイアウト | 辞書 | リスト) - 物理量子ビット上の仮想量子ビットの初期位置。 このレイアウトが回路を制約coupling_map条件に適合させる場合、それが採用される。 最終的なレイアウトは必ずしも同じとは限らない。トランスパイラが量子ビットをスワップやその他の方法で並べ替える可能性があるためである。 詳細については、 「初期レイアウト」セクションを参照してください。layout_method(str) - レイアウト選択パスの名前 (default,dense,sabre, andtrivial)。 また、レイアウト・ステージに使用する外部プラグイン名を指定することもできます。stage_nameの引数にlayoutを指定してlist_stage_plugins()を実行すると、インストールされているプラグインの一覧を見ることができる。 デフォルト値はsabre。
routing_method(str) - ルーティングパスの名前 (basic,lookahead,default,sabre, またはnone)。 これは、ルーティングステージで使用する外部プラグイン名にもなる。stage_nameの引数にroutingを指定してlist_stage_plugins()を実行すると、インストールされているプラグインの一覧を見ることができる。 デフォルト値はsabre。
translation_method(str) - 翻訳パスの名前 (default,synthesis,translator,ibm_backend,ibm_dynamic_circuits,ibm_fractional) これは、翻訳段階で使用する外部プラグインの名前にもなります。stage_nameの引数にtranslationを指定してlist_stage_plugins()を実行すると、インストールされているプラグインの一覧を見ることができる。 デフォルト値はtranslatorです。
approximation_degree(float, 範囲 0-1 | None) - 回路近似に使用されるヒューリスティックダイヤル( 1.0 = 近似なし, 0.0 = 最大近似)。 デフォルト値は 1.0 です。Noneを指定すると、近似度が報告されたエラー率に設定される。 詳細は近似度の項を参照。optimization_method(str) - 最適化ステージで使用するプラグイン名。 デフォルトでは、外部プラグインは使用されない。stage_nameの引数にoptimizationを指定してlist_stage_plugins()を実行すると、インストールされているプラグインの一覧を見ることができる。
scheduling_method(str) - スケジューリングパスの名前。 これは、スケジューリング段階で使用する外部プラグイン名にもなります。stage_nameの引数にschedulingを指定してlist_stage_plugins()を実行すると、インストールされているプラグインの一覧を見ることができる。- as_soon_as_possible':貪欲に、qubitリソース上でできるだけ早く命令をスケジュールする(エイリアス:
asap)。 - 'as_late_as_possible':命令を遅くスケジュールする、つまり可能な限り量子ビットを基底状態に保つ (エイリアス:
alap)。 これはデフォルトです。
- as_soon_as_possible':貪欲に、qubitリソース上でできるだけ早く命令をスケジュールする(エイリアス:
seed_transpiler(int) - トランスパイラの確率的な部分のランダムな種を設定する。
上記のパラメータを指定しなかった場合、以下のデフォルト値が使用される。 詳細については、メソッドの APIリファレンスページを参照のこと:
generate_preset_pass_manager(
optimization_level=1,
backend=None,
target=None,
basis_gates=None,
coupling_map=None,
initial_layout=None,
layout_method=None,
routing_method=None,
translation_method=None,
scheduling_method=None,
approximation_degree=1.0,
seed_transpiler=None,
unitary_synthesis_method="default",
unitary_synthesis_plugin_config=None,
hls_config=None,
init_method=None,
optimization_method=None,
)Output:
<qiskit.transpiler.passmanager.StagedPassManager at 0x7f1b3d2d0c90>
次のステップ
- 最適化レベルの設定方法
- もっと見るよく使われるパラメーター
- 最適化レベルの設定方法について学びましょう。
- 「 Transpileとパスマネージャー 」のトピックをご覧ください。
- 例については、 量子コンピュータの表現を参照のこと。
- Qiskitパターンのワークフローの一環として、 回路をトランスパイルする方法を学びましょう。
- Transpile APIのドキュメントを確認してください。