トランスパイルの概要
トランスパイルとは、与えられた入力回路を特定の量子デバイスのトポロジーに合わせて書き換え、ノイズの多い量子コンピューター上での実行に向けて回路の命令を最適化するプロセスです。このドキュメントでは、すべての Qiskit ユーザーが利用できるローカルトランスパイルのツールとワークフロー、および Premium Plan・Flex Plan・On-Prem(IBM Quantum Platform API 経由)Planのユーザーが利用できるクラウドベースの Qiskit Transpiler Service について説明します。プリミティブを使用しており、Qiskit Runtime サービスが提供するデフォルトのトランスパイルオプションのみに関心がある場合は、Qiskit Runtime のランタイムコンパイルの設定トピックをご参照ください。
トランスパイルのプロセスは、命令を含む回路を入力として受け取ります:
その後、トランスパイルは選択したバックエンドで利用可能な命令のみが使用されるように回路を変換し、ノイズの影響を最小化するようにそれらの命令を最適化します:
Qiskit SDK の中心的なコンポーネントであるトランスパイラーは、モジュール性と拡張性を重視して設計されています。その主な用途は、新しい回路変換(トランスパイラーのパスと呼ばれます)を記述し、それらを既存の他のパスと組み合わせることで、量子回路の深さと複雑さを大幅に削減することです。どのパスをどの順序で連結するかが、最終的な結果に大きな影響を与えます。このパイプラインは、PassManager および StagedPassManager オブジェクトによって決定されます。StagedPassManager は1つ以上の PassManager の実行を調整し、それらの実行順序を決定します。一方、PassManager オブジェクトは1つ以上のパスの集合にすぎません。StagedPassManager をオーケストラの指揮者、PassManager を各楽器のセクション、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ドキュメントをご覧ください。
- 回路のトランスパイル方法をご覧ください。