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

トランスパイルの概要

トランスパイルの概要と、ローカルまたはクラウドで使用する関連ツールの説明。

トランスパイルとは、与えられた入力回路を特定の量子デバイスのトポロジーに合わせて書き換え、ノイズの多い量子コンピューター上での実行に向けて回路の命令を最適化するプロセスです。このドキュメントでは、すべての Qiskit ユーザーが利用できるローカルトランスパイルのツールとワークフロー、および Premium Plan・Flex Plan・On-Prem(IBM Quantum Platform API 経由)Planのユーザーが利用できるクラウドベースの Qiskit Transpiler Service について説明します。プリミティブを使用しており、Qiskit Runtime サービスが提供するデフォルトのトランスパイルオプションのみに関心がある場合は、Qiskit Runtime のランタイムコンパイルの設定トピックをご参照ください。

トランスパイルのプロセスは、命令を含む回路を入力として受け取ります:

HadamardゲートとCNOTゲート2つを含む2量子ビット量子回路。

その後、トランスパイルは選択したバックエンドで利用可能な命令のみが使用されるように回路を変換し、ノイズの影響を最小化するようにそれらの命令を最適化します:

トランスパイル後の同じ2量子ビット量子回路。RZ、X、SX、ECRゲートが含まれています。


Qiskit SDK の中心的なコンポーネントであるトランスパイラーは、モジュール性と拡張性を重視して設計されています。その主な用途は、新しい回路変換(トランスパイラーのパスと呼ばれます)を記述し、それらを既存の他のパスと組み合わせることで、量子回路の深さと複雑さを大幅に削減することです。どのパスをどの順序で連結するかが、最終的な結果に大きな影響を与えます。このパイプラインは、PassManager および StagedPassManager オブジェクトによって決定されます。StagedPassManager は1つ以上の PassManager の実行を調整し、それらの実行順序を決定します。一方、PassManager オブジェクトは1つ以上のパスの集合にすぎません。StagedPassManager をオーケストラの指揮者、PassManager を各楽器のセクション、Pass オブジェクトを個々の演奏者として捉えると理解しやすいでしょう。このようにして、ノイズを管理しながらユーティリティスケールの作業を実行できる、ハードウェア効率の高い量子回路を構成することができます。

パスマネージャーのステージの詳細については、トランスパイラーのステージトピックをご参照ください。

命令セットアーキテクチャ

量子回路の深さと複雑さを削減するほかに、トランスパイラーは特定のバックエンドの命令セットアーキテクチャ(ISA)に従うように、与えられた QuantumCircuit に含まれる命令を変換するよう設計されています。ISA に準拠した回路は、バックエンドの Target でサポートされている命令(ハードウェアで利用可能な基底ゲート、測定、リセット、制御フロー演算など)のみで構成され、ハードウェアの接続性(ターゲットの CouplingMap)によって指定された制約に準拠しています。IBM Quantum® バックエンドにジョブを送信する際には、回路がバックエンドの ISA に準拠している必要があります。

トランスパイラーのステージ

Qiskit の組み込みトランスパイラーパイプラインは、6つの基本ステージで構成されています:

  1. init - このパスは、回路を埋め込む前に必要な初期パスを実行します。通常、カスタム命令の展開と、回路を単一量子ビットゲートおよび2量子ビットゲートのみに変換することが含まれます。デフォルトでは、回路の命令を検証し、多量子ビットゲートを単一量子ビットゲートおよび2量子ビットゲートに変換します。
  2. layout - このパスはレイアウトを適用し、回路の仮想量子ビットをQPUの物理量子ビットにマッピングします。
  3. routing - このパスはレイアウトが適用された後に実行され、元の回路にゲート(すなわちSWAP)を挿入して、QPUの接続性(カップリングマップ)に対応できるようにします。
  4. translation - このパスは回路内のゲートをQPUの基底命令セットに変換します。
  5. optimization - このパスは、条件(固定の深さなど)が満たされるまで、量子回路のより効率的な分解を見つけるために最適化ループを実行します。
  6. scheduling - このステージは、ハードウェアを考慮したスケジューリングパスのためのものです。ユーザーがスケジューリング方法を指定した場合、このステージは回路内のすべてのアイドル時間を考慮します。

トランスパイルワークフローをカスタマイズする場合は、開発時にこれらのステージをガイドラインとして活用してください。

パスマネージャーを使ったトランスパイル

回路をトランスパイルする推奨の方法は、ステージドパスマネージャーを作成し、回路を入力としてその run メソッドを実行することです。generate_preset_pass_manager 関数を使用すると、合理的なデフォルト設定でステージドパスマネージャーを生成できます。

より高度なユーザーは、PassManager および StagedPassManager オブジェクトのセットをカスタマイズし、各ステージの実行順序を決定することができます。これにより、最終的な出力回路を大幅に変えることが可能です。実際、量子アルゴリズムのトランスパイルにカスタムアプローチを採用すると、デフォルトのアプローチよりも効率的なエラー抑制が得られることが多いです。カスタムアプローチでは、ハードウェアの制約に合わせて量子回路を書き換え、ノイズの影響を抑制します。このツールチェーンのロジックフローはカスタマイズ可能で、線形である必要はありません。トランスパイルプロセスでは、反復ループ、条件分岐、その他の複雑な動作を準備することができます。カスタムパスのセットを開発する際の良い出発点は、デフォルトの変換シーケンスを調べることです。

パスマネージャーを使ったトランスパイルの概要については、パスマネージャーを使ったトランスパイルをご参照ください。

デフォルトのトランスパイル

トランスパイラーをよりシンプルに(ただしカスタマイズ性は低く)「すぐに使える」形で利用するには、qiskit.compiler.transpile 関数を使用します。この関数は、optimization_level フラグ(0、1、2、または3に設定可能)などのオプションに基づいて、プリセットの StagedPassManager オブジェクトの1つを生成して実行します。レベルが高いほど、トランスパイル時間が長くなる代わりに、より最適化された回路が生成されます。

次のステップ

推奨事項