Skip to main content
IBM Quantum Platform

トランスパイラ設定のデフォルト値と構成オプション

  • このページのコードは、以下の要件に基づいて開発された。 これらのバージョンまたは新しいバージョンの使用をお勧めします。

    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:

Output of the previous code cell

回路をトランスパイルし、結果を見る:

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:

Output of the previous code cell

利用可能なすべてのパラメータ

以下は 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_constraintsNone 、調整は行われない。 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) - 使用するユニタリー合成法の名前。 デフォルトでは、 defaultunitary_synthesis_plugin_names() を実行すると、インストールされているプラグインの一覧を見ることができます。
    • unitary_synthesis_plugin_config (dict) - ユニタリー合成プラグインに直接渡されるオプションの設定辞書。 デフォルトのユニタリー合成法はカスタムコンフィギュレーションを取らないため、デフォルトではこの設定は何の効果もない。 カスタムコンフィギュレーションの適用は、 unitary_synthesis の引数でユニタリー合成プラグインが指定されている場合にのみ必要です。 これは各ユニタリー合成プラグインのカスタムなので、このオプションの使い方はプラグインのドキュメントを参照してください。
    • initial_layout (レイアウト | 辞書 | リスト) - 物理量子ビット上の仮想量子ビットの初期位置。 このレイアウトが回路を制約 coupling_map 条件に適合させる場合、それが採用される。 最終的なレイアウトは必ずしも同じとは限らない。トランスパイラが量子ビットをスワップやその他の方法で並べ替える可能性があるためである。 詳細については、 「初期レイアウト」セクションを参照してください。
    • layout_method (str) - レイアウト選択パスの名前 (default, dense, sabre, and trivial)。 また、レイアウト・ステージに使用する外部プラグイン名を指定することもできます。 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)。 これはデフォルトです。
    • 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>

次のステップ

推奨事項
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。