トランスパイルの概要
トランスパイルとは、与えられた入力回路を特定の量子デバイスのトポロジーに合わせて書き換え、ノイズの多い量子コンピューター上での実行に向けて回路の命令を最適化するプロセスです。このドキュメントでは、すべての Qiskit ユーザーが利用できるローカルトランスパイルのツールとワークフローについて説明します。プリミティブを使用しており、IBM Quantum Compute Service が提供するデフォルトのトランスパイルオプションのみに関心がある場合は、エラー軽減と抑制技術トピックを参照してください。
トランスパイルのプロセスは、命令を含む回路を入力として受け取ります:
その後、トランスパイルは選択したバックエンドで利用可能な命令のみが使用されるように回路を変換し、ノイズの影響を最小化するようにそれらの命令を最適化します:
Qiskit SDKの中心的な構成要素であるトランスパイラーは、モジュール性と拡張性を重視して設計されています。その主な用途は、新しい回路変換(トランスパイラーパスとして知られる)を記述し、それらを他の既存のパスと組み合わせることで、量子回路の深さと複雑さを大幅に削減することです。どのパスが連結され、どの順序で実行されるかは、最終的な結果に大きな影響を与えます。このパイプラインはPassManagerオブジェクトとStagedPassManagerオブジェクトによって決定されます。StagedPassManagerは1つ以上のPassManagersの実行を統括し、それらが実行される順序を決定します。一方、PassManagerオブジェクトは単に1つ以上のパスの集合にすぎません。StagedPassManagerをオーケストラの指揮者、PassManagersを各楽器セクション、Passオブジェクトを個々の演奏者と考えるとよいでしょう。このようにして、ノイズを管理可能な範囲に保ちながら実用規模の作業を実行できる、ハードウェア効率の良い量子回路を組み立てることができます。
パスマネージャーのステージの詳細については、トランスパイラーのステージトピックを参照してください。
命令セットアーキテクチャ
量子回路の深さと複雑さを削減するほかに、トランスパイラーは特定のバックエンドの命令セットアーキテクチャ(ISA)に従うように、与えられた QuantumCircuit に含まれる命令を変換するよう設計されています。ISA に準拠した回路は、バックエンドの Target でサポートされている命令(ハードウェアで利用可能な基底ゲート、測定、リセット、制御フロー演算など)のみで構成され、ハードウェアの接続性(ターゲットの CouplingMap)によって指定された制約に準拠しています。IBM Quantum® バックエンドにジョブを送信する際には、回路がバックエンドの ISA に準拠している必要があります。
トランスパイラーのステージ
Qiskit の組み込みトランスパイラーパイプラインは、6つの基本ステージで構成されています:
-
init- このパスは、回路を埋め込む前に必要な初期パスを実行します。通常、カスタム命令の展開と、回路を単一量子ビットゲートおよび2量子ビットゲートのみに変換することが含まれます。デフォルトでは、回路の命令を検証し、多量子ビットゲートを単一量子ビットゲートおよび2量子ビットゲートに変換します。 -
layout- このパスはレイアウトを適用し、回路の仮想量子ビットをQPUの物理量子ビットにマッピングします。 -
routing- このパスはレイアウトが適用された後に実行され、元の回路にゲート(すなわちSWAP)を挿入して、QPUの接続性(カップリングマップ)に対応できるようにします。 -
translation- このパスは回路内のゲートをQPUの基底命令セットに変換します。 -
optimization- このパスは、条件(固定の深さなど)が満たされるまで、量子回路のより効率的な分解を見つけるために最適化ループを実行します。 -
scheduling- このステージは、ハードウェアを考慮したスケジューリングパスのためのものです。ユーザーがスケジューリング方法を指定した場合、このステージは回路内のすべてのアイドル時間を考慮します。
トランスパイルワークフローをカスタマイズする場合は、開発時にこれらのステージをガイドラインとして活用してください。
パスマネージャーを使ったトランスパイル
回路をトランスパイルする推奨の方法は、ステージドパスマネージャーを作成し、回路を入力としてその run メソッドを実行することです。generate_preset_pass_manager 関数を使用すると、妥当なデフォルト設定でステージドパスマネージャーを生成できます。
より高度なユーザーは、PassManager および StagedPassManager オブジェクトのセットをカスタマイズし、各ステージの実行順序を決定することができます。これにより、最終的な出力回路を大幅に変えることが可能です。実際、量子アルゴリズムのトランスパイルにカスタムアプローチを採用すると、デフォルトのアプローチよりも効率的なエラー抑制が得られることが多いです。カスタムアプローチでは、ハードウェアの制約に合わせて量子回路を書き換え、ノイズの影響を抑制します。このツールチェーンのロジックフローはカスタマイズ可能で、線形である必要はありません。トランスパイルプロセスでは、反復ループ、条件分岐、その他の複雑な動作を準備することができます。カスタムパスのセットを開発する際の良い出発点は、デフォルトの変換シーケンスを調べることです。
パスマネージャーを使ったトランスパイルの概要については、パスマネージャーを使ったトランスパイルを参照してください。
デフォルトのトランスパイル
トランスパイラーをよりシンプルに(ただしカスタマイズ性は低く)「すぐに使える」形で利用するには、qiskit.compiler.transpile 関数を使用します。この関数は、optimization_level フラグ(0、1、2、または3に設定可能)などのオプションに基づいて、プリセットの StagedPassManager オブジェクトの1つを生成して実行します。レベルが高いほど、トランスパイル時間が長くなる代わりに、より最適化された回路が生成されます。
次のステップ
generate_preset_passmanager関数の使い方を学ぶには、トランスパイルのデフォルト設定と構成オプショントピックから始めてください。- トランスパイラーのステージトピックでトランスパイルの学習を続けてください。
- トランスパイラー設定の比較ガイドを試してみてください。
- トランスパイルされた回路を使用したエンドツーエンドの例として、VQEによるハイゼンベルク鎖の基底状態エネルギー推定チュートリアルを試してみてください。
- Transpile APIドキュメントを参照してください。
- 回路のトランスパイル方法を参照してください。