Skip to main content
IBM Quantum Platform

トランスピレーション入門

トランスパイラリングの概要と、ローカルまたはクラウド環境で使用する関連ツールについて。

トランスパイレーションとは、与えられた入力回路を、特定の量子デバイスのトポロジーに合わせて書き換え、ノイズの多い量子コンピュータ上での実行に向けて回路命令を最適化するプロセスである。 このドキュメントでは、すべてのQiskitユーザーが利用できるローカルトランスパイル用のツールおよびワークフローについて解説します。 プリミティブを使用しており、 IBM Quantum Compute Service が提供するデフォルトのトランスパイルオプションのみに関心がある場合は、「 エラーの軽減および抑制手法 」のトピックを参照してください。

移調のプロセスでは、あなたの指示を含む回路が使われる:

ハダマードゲートと2つのCNOTゲートを含む2量子ビット量子回路
量子回路

そして、選択されたバックエンドで使用可能な命令のみが使用されるように変換し、ノイズの影響を最小限に抑えるためにそれらの命令を最適化する:

移項後の同じ2量子ビット量子回路。  RZ、X、SX、ECRゲートを含む。
転置後の量子回路

Qiskit SDKの中心的なコンポーネントであるトランスパイラーは、モジュール性と拡張性を考慮して設計されています。 その主な用途は、新しい回路変換( トランスパイラ・パスと呼ばれる)を記述し、他の既存のパスと組み合わせることで、量子回路の深さと複雑さを大幅に削減することである。 どのパスをどの順番で連鎖させるかは、最終的な結果に大きく影響する。 このパイプラインは PassManagerStagedPassManager オブジェクトによって決定される。 StagedPassManager は、1つ以上の PassManagers の実行をオーケストレーションし、それらの実行順序を決定する。一方、 PassManager オブジェクトは、単に1つ以上のパスのコレクションである。 StagedPassManager をオーケストラの指揮者、 PassManagers をさまざまな楽器のセクション、 Pass のオブジェクトを個々の音楽家と考えてほしい。 こうすることで、ノイズを抑えながら実用規模の作業を実行できる、ハードウェア効率の高い量子回路を構成することができる。

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


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

量子回路の深さと複雑さを減らすことに加えて、トランスパイラーは、与えられた QuantumCircuit に含まれる命令を、特定のバックエンドの命令セット・アーキテクチャ(ISA)に従うように変換するように設計されている。 ISAに従う回路は、バックエンドがサポートする命令のみで構成される。 TargetISAに従う回路は、ハードウェアの利用可能な基底ゲート、測定、リセット、制御フロー操作などのバックエンドでサポートされ、ハードウェアの接続性によって指定された制約に準拠する命令のみで構成されます。 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 関数を使用して、合理的なデフォルト値を持つステージド・パスマネージャーを生成することができます。

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

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


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

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


次のステップ

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