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

回路カッティング

回路カッティングは、量子ハードウェア上で実行できる回路のサイズを増やすための手法であり、追加のサンプリングオーバーヘッドが発生します。このアドオンはこの手法を実装しており、少数のゲート、ワイヤ、またはその両方をカットすることで、ハードウェアでの実行に適したより小さな回路を生成します。これらの小さな回路が実行され、元の回路の結果は古典的な後処理によって再構成されます。ただし、トレードオフとして、全体のショット数はカットの数と種類に依存する係数(サンプリングオーバーヘッドと呼ばれる)だけ増加させる必要があります。回路カッティングは、大きなSWAPオーバーヘッドを必要とする遠距離の量子ビット間のゲートを構築するためにも使用できます。

重要な用語

  • サブ回路(Subcircuits): QuantumCircuitのゲートをカットし、接続されていない量子ビットのサブセットをより小さな回路に分割することで生成される回路のセットです。これらの回路にはSingleQubitQPDGateオブジェクトが含まれており、各サブ実験のインスタンス化に使用されます。

  • サブ実験(Subexperiment): サブ回路に関連付けられた固有の回路サンプルを表す用語で、実行のためにQPUに送信されます。

回路カッティングパッケージのインストール

回路カッティングパッケージのインストール方法は3つあります:PyPI、ソースからのビルド、コンテナ化された環境での実行です。パッケージの依存関係を分離するために、仮想環境にこれらのパッケージをインストールすることをお勧めします。

PyPIからのインストール

qiskit-addon-cuttingパッケージをインストールする最も簡単な方法はPyPIを使用することです:

pip install qiskit-addon-cutting

ソースからのインストール

このパッケージを手動でインストールする方法についてはこちらをクリックしてください。

このパッケージへの貢献、または手動インストールを行うには、まずリポジトリをクローンします:

git clone git@github.com:Qiskit/qiskit-addon-cutting.git

そしてpipでパッケージをインストールします。パッケージリポジトリ内のチュートリアルを実行するには、ノートブックの依存関係もインストールしてください。リポジトリでの開発を予定している場合は、dev依存関係もインストールしてください。

pip install tox notebook -e '.[notebook-dependencies,dev]'

Docker内での使用

アドオンリポジトリに含まれているdockerfileを使用してDockerイメージをビルドできます。含まれているcompose.yamlファイルを使用すると、次のコマンドでDockerイメージを利用できます。

Docker内でこのパッケージを使用する方法についてはこちらをクリックしてください。

git clone git@github.com:Qiskit/qiskit-addon-cutting.git
cd qiskit-addon-cutting
docker compose build
docker compose up
Note

dockerの代わりにpodmanpodman-composeを使用している場合、コマンドは次のとおりです:

podman machine start
podman-compose --podman-pull-args short-name-mode="permissive" build
podman-compose up

コンテナが起動すると、次のようなメッセージが表示されます:

notebook_1  |     To access the server, open this file in a browser:
notebook_1 | file:///home/$USERNAME/.local/share/jupyter/runtime/jpserver-7-open.html
notebook_1 | Or copy and paste one of these URLs:
notebook_1 | http://e4a04564eb39:8888/lab?token=00ed70b5342f79f0a970ee9821c271eeffaf760a7dcd36ec
notebook_1 | or http://127.0.0.1:8888/lab?token=00ed70b5342f79f0a970ee9821c271eeffaf760a7dcd36ec

このメッセージの最後のURLからJupyterノートブックインターフェースにアクセスできます。

また、ホームディレクトリにはpersistent-volumeという名前のサブディレクトリが含まれています。保存したい作業はすべてこのディレクトリに置いてください。このディレクトリだけが異なるコンテナ実行をまたいで保存されます。

理論的背景

回路カッティングのプロセスには、2種類のカットがあります:ゲートカット(「空間的」カット)は2つ(またはそれ以上)の量子ビットで動作するゲートを通るカットで、ワイヤカット(「時間的」カット)は量子ビットのワイヤを直接切断します(本質的に2つに分割された単一量子ビットの恒等ゲートです)。

以下の図は、より少ない量子ビットで回路を2つの小さな部分に分割するためにゲートをカットする例を示しています。

Diagram of gate cutting by taking one larger circuit and cutting it into two smaller ones labeled "A" and "B"

回路カッティングのワークフローを準備する際に考慮すべきシナリオが3つあり、それらは回路実行間の古典的な通信の利用可能性を中心に展開されます。1つ目は局所操作(LO)のみが利用可能な場合で、残り2つは実行間の古典的な通信(局所操作と古典的通信、LOCC)を導入します。LOCCシナリオはさらに、回路実行間のほぼリアルタイムの一方向通信、またはリアルタイムの双方向通信(マルチQPU環境で見られる場合がある)のいずれかに分類されます。

回路カッティングは現在利用可能なハードウェアよりも大きな量子回路を実行するために使用できますが、コストが伴います。この手法は準確率分解(QPD)問題として定式化できるため、結果を再構成するためには指数関数的なサンプリングオーバーヘッドが必要です。このオーバーヘッドは、元の回路を実行したときと同じ誤差量ϵ\epsilonを準確率分解が実現するために、全体のショット数を増加させる必要がある係数です。カットされた各ゲートがこのオーバーヘッドに寄与し、追加されるオーバーヘッドの量はカットされたゲートの種類によって異なります(サンプリングオーバーヘッドの詳細は[1]の最終付録にあります)。

例えば、1つのCNOTゲートをカットするとサンプリングオーバーヘッドは9になり[2,6]、古典的な通信が利用できない場合(LOシナリオ)、nn個のワイヤカットを含む回路ではO(16n)\mathcal{O}(16^n)のサンプリングオーバーヘッドが発生します。古典的な通信が利用可能になる(LOCCシナリオ)と、これはO(4n)\mathcal{O}(4^n)に削減されます[4]。ただし、古典的な通信を使用したワイヤカット(LOCC)はこのパッケージではサポートされていません。

正式には、回路カッティングのQPD問題は次のように表現できます:

U=iaiFi, \mathcal{U} = \sum_i a_i \mathcal{F}_i,

ここで、U\mathcal{U}は所望の操作を実装する量子チャネルであり、各aia_iはハードウェア上で実行可能なチャネルFi\mathcal{F}_iに対応する実数係数です。

所望のチャネルU\mathcal{U}に相当する結果は、まず係数aia_iを生成し、次にサブ実験を実行して異なるチャネルFi\mathcal{F}_iの結果を取得し、U\mathcal{U}に対応する期待値を再構成することで得られます。

簡単な例:RZZGateのカッティング

基本的な具体例として、カットされたRZZGateの分解を考えます(詳細は[2]に記載されています)。RZZGateを含む量子回路は、RZZGateが単一量子ビット操作のみに置き換えられた6つのサブ実験を実行することでシミュレートできます(これらが上記の方程式におけるFi\mathcal{F}_iです)。この回路の結果は、各サブ実験の結果を正または負になり得る係数セット(上記の方程式におけるaia_i)と組み合わせることで再構成されます。

RZZGateの選択されたパラメータθ\thetaに対して、6つのサブ実験は次のとおりです:

  1. 係数a1=cos2(θ/2)a_1 = \cos^2(\theta/2)で、何もしない(III\otimes I
  2. 係数a2=sin2(θ/2)a_2 = \sin^2(\theta/2)で、各量子ビットにZGateを適用する(ZZZ\otimes Z
  3. 係数a3=sin(θ)/2a_3 = -\sin(\theta)/2で、最初の量子ビットでZZ基底の射影測定を行い、2番目にSSを適用する(MzSM_z\otimes S)。測定結果が11の場合、再構成時にその結果の寄与の符号を反転させます。
  4. 係数a4=sin(θ)/2a_4 = \sin(\theta)/2で、最初の量子ビットでZZ基底の射影測定を行い、2番目にSS^\daggerを適用する(MzSM_z\otimes S^\dagger)。測定結果が1の場合、再構成時にその結果の寄与の符号を反転させます。
  5. 3と同じ(a5=a3a_5=a_3)ですが、量子ビットを入れ替えます(代わりにSMzS\otimes M_zを実行)。
  6. 4と同じ(a6=a4a_6=a_4)ですが、量子ビットを入れ替えます(代わりにSMzS^\dagger\otimes M_zを実行)。

サンプリングオーバーヘッド参照テーブル

次の表は、1つの命令のみがカットされた場合における、さまざまな2量子ビット命令のサンプリングオーバーヘッド係数を示しています。

命令(Instructions)KAK分解角度サンプリングオーバーヘッド係数
CSGate, CSdgGate, CSXGate(π/8,0,0)\left(\pi/8, 0, 0\right)3+2(2)2.8283+2\sqrt(2) \approx 2.828
CXGate, CYGate, CZGate, GHGate, ECRGate(π/4,0,0)\left(\pi/4, 0, 0\right)32=93^2=9
iSwapGate, DCXGate(π/4,π/4,0)\left(\pi/4, \pi/4, 0\right)72=497^2 = 49
SwapGate(π/4,π/4,π/4)\left(\pi/4, \pi/4, \pi/4\right)72=497^2 = 49
RXXGate, RYYGate, RZZGate, RZXGate(θ/2,0,0,)\left(\lvert\theta/2\rvert, 0, 0, \right)(1+2sin(θ))2\left(1 + 2\lvert\sin(\theta)\rvert\right)^2
CRXGate, CRYGate, CRZGate, CPhaseGate(θ/4,0,0)\left(\lvert\theta/4\rvert, 0, 0\right)(1+2sin(θ/2))2\left(1 + 2\lvert\sin(\theta/2)\rvert\right)^2
XXPlusYYGate, XXMinusYYGate(θ/4,θ/4,0)\left(\vert\theta/4\rvert, \lvert\theta/4\rvert, 0\right)(1+4sin(θ/2)+2sin2(θ/2))2\left(1 + 4\lvert\sin(\theta/2)\rvert + 2\sin^2(\theta/2)\right)^2β\betaに依存しない)
Move(LOシナリオでのワイヤカット)N/A42=164^2 = 16

次のステップ

参考文献

[1] Christophe Piveteau, David Sutter, Circuit knitting with classical communication, https://arxiv.org/abs/2205.00016

[2] Kosuke Mitarai, Keisuke Fujii, Constructing a virtual two-qubit gate by sampling single-qubit operations, https://arxiv.org/abs/1909.07534

[3] Kosuke Mitarai, Keisuke Fujii, Overhead for simulating a non-local channel with local channels by quasiprobability sampling, https://arxiv.org/abs/2006.11174

[4] Lukas Brenner, Christophe Piveteau, David Sutter, Optimal wire cutting with classical communication, https://arxiv.org/abs/2302.03366

[5] K. Temme, S. Bravyi, and J. M. Gambetta, Error mitigation for short-depth quantum circuits, https://arxiv.org/abs/1612.02058

[6] Lukas Schmitt, Christophe Piveteau, David Sutter, Cutting circuits with multiple two-qubit unitaries, https://arxiv.org/abs/2312.11638

[7] Jun Zhang, Jiri Vala, K. Birgitta Whaley, Shankar Sastry, A geometric theory of non-local two-qubit operations, https://arxiv.org/abs/quant-ph/0209120