Circuit Cutting
Circuit Cutting ist eine Technik, um die Größe von Circuits zu erhöhen, die auf Quantenhardware ausgeführt werden können – auf Kosten eines zusätzlichen Sampling-Overheads. Dieses Addon implementiert diese Technik, bei der eine Handvoll Gates, Wires oder beides geschnitten werden, sodass kleinere Circuits entstehen, die besser für die Ausführung auf Hardware geeignet sind. Diese kleineren Circuits werden dann ausgeführt, und die Ergebnisse des ursprünglichen Circuits werden durch klassische Nachverarbeitung rekonstruiert. Der Trade-off besteht darin, dass die Gesamtanzahl der Shots um einen Faktor erhöht werden muss, der von der Anzahl und Art der vorgenommenen Schnitte abhängt (bekannt als Sampling-Overhead). Circuit Cutting kann außerdem verwendet werden, um Gates zwischen weit entfernten Qubits zu realisieren, die andernfalls einen großen SWAP-Overhead erfordern würden.
Wichtige Begriffe
-
Subcircuits: Die Menge der Circuits, die durch das Schneiden von Gates in einem
QuantumCircuitund das anschließende Aufteilen der nicht verbundenen Qubit-Teilmengen in kleinere Circuits entstehen. Diese Circuits enthaltenSingleQubitQPDGate-Objekte und werden verwendet, um jedes Subexperiment zu instanziieren. -
Subexperiment: Ein Begriff, der die eindeutigen Circuit-Samples beschreibt, die einem Subcircuit zugeordnet sind und zur Ausführung an eine QPU gesendet werden.
Das Circuit-Cutting-Paket installieren
Es gibt drei Möglichkeiten, das Circuit-Cutting-Paket zu installieren: über PyPI, durch das Bauen aus dem Quellcode und durch die Ausführung in einer containerisierten Umgebung. Es wird empfohlen, diese Pakete in einer virtuellen Umgebung zu installieren, um die Trennung der Paketabhängigkeiten sicherzustellen.
Von PyPI installieren
Der einfachste Weg, das Paket qiskit-addon-cutting zu installieren, ist über PyPI:
pip install qiskit-addon-cutting
Aus dem Quellcode installieren
Hier klicken, um zu erfahren, wie du dieses Paket manuell installierst.
Um zu diesem Paket beizutragen oder es manuell zu installieren, klone zunächst das Repository:
git clone git@github.com:Qiskit/qiskit-addon-cutting.git
und installiere das Paket mit pip. Um die im Paket-Repository enthaltenen Tutorials ausführen zu können, installiere auch die Notebook-Abhängigkeiten. Installiere die dev-Abhängigkeiten, wenn du vorhast, im Repository zu entwickeln.
pip install tox notebook -e '.[notebook-dependencies,dev]'
Mit Docker verwenden
Das im Addon-Repository enthaltene Dockerfile kann verwendet werden, um ein Docker-Image zu bauen. Die enthaltene Datei compose.yaml ermöglicht die Verwendung des Docker-Images mit den folgenden Befehlen.
Hier klicken, um zu erfahren, wie du dieses Paket mit Docker verwendest.
git clone git@github.com:Qiskit/qiskit-addon-cutting.git
cd qiskit-addon-cutting
docker compose build
docker compose up
Wenn du podman und podman-compose anstelle von docker verwendest, lauten die Befehle:
podman machine start
podman-compose --podman-pull-args short-name-mode="permissive" build
podman-compose up
Sobald der Container läuft, solltest du eine Meldung ähnlich der folgenden sehen:
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
Die letzte URL in dieser Meldung gibt dir Zugriff auf die Jupyter-Notebook-Oberfläche.
Darüber hinaus enthält das Home-Verzeichnis ein Unterverzeichnis namens persistent-volume. Alle Arbeiten, die du speichern möchtest, solltest du in diesem Verzeichnis ablegen, da es das einzige ist, das über verschiedene Container-Läufe hinweg erhalten bleibt.
Theoretischer Hintergrund
Beim Circuit-Cutting-Prozess gibt es zwei Arten von Schnitten: einen Gate- oder „raumartigen" Schnitt, bei dem ein Schnitt durch ein Gate verläuft, das auf zwei (oder mehr) Qubits wirkt, und einen Wire- oder „zeitartigen" Schnitt, der direkt durch eine Qubit-Wire verläuft (im Wesentlichen ein einzelnes Qubit-Identity-Gate, das in zwei Teile geschnitten wurde).
Das folgende Diagramm zeigt ein Beispiel für das Schneiden von Gates, sodass der Circuit in zwei kleinere Teile mit weniger Qubits aufgeteilt werden kann.

Bei der Vorbereitung eines Circuit-Cutting-Workflows sind drei Szenarien zu berücksichtigen, die sich um die Verfügbarkeit klassischer Kommunikation zwischen den Circuit-Ausführungen drehen. Das erste ist der Fall, in dem nur lokale Operationen (LO) verfügbar sind, während die anderen beiden klassische Kommunikation zwischen Ausführungen einführen, bekannt als lokale Operationen und klassische Kommunikation (LOCC). Die LOCC-Szenarien werden dann entweder in eine zeitnahe, unidirektionale Kommunikation zwischen Circuit-Ausführungen oder in eine Echtzeit-, bidirektionale Kommunikation eingeteilt (wie sie beispielsweise in einer Multi-QPU-Umgebung vorkommen kann).
Obwohl Circuit Cutting verwendet werden kann, um Quantum Circuits auszuführen, die größer sind als auf aktuell verfügbarer Hardware möglich, ist dies mit Kosten verbunden. Da die Technik als Quasi-Wahrscheinlichkeits-Zerlegungsproblem (QPD) formuliert werden kann, ist ein exponentieller Sampling-Overhead erforderlich, um die Ergebnisse zu rekonstruieren. Dieser Overhead ist der Faktor, um den die Gesamtanzahl der Shots erhöht werden muss, damit die Quasi-Wahrscheinlichkeits-Zerlegung denselben Fehler ergibt wie die Ausführung des ursprünglichen Circuits. Jedes geschnittene Gate trägt zu diesem Overhead bei, und die Höhe des hinzugefügten Overheads hängt vom Typ des geschnittenen Gates ab (weitere Details zum Sampling-Overhead findest du im letzten Anhang von [1]).
Zum Beispiel verursacht ein einzelner geschnittener CNOT-Gate einen Sampling-Overhead von 9 [2,6], und ein Circuit mit Wire Cuts verursacht einen Sampling-Overhead von , wenn keine klassische Kommunikation verfügbar ist (das LO-Szenario). Dies reduziert sich auf , wenn klassische Kommunikation verfügbar wird (LOCC-Szenario) [4]. Wire Cutting mit klassischer Kommunikation (LOCC) wird von diesem Paket jedoch nicht unterstützt.
Formal lässt sich das QPD-Problem des Circuit Cutting wie folgt ausdrücken:
wobei der Quantenkanal ist, der die gewünschte Operation implementiert, und jedes ein reeller Koeffizient ist, der einem Kanal entspricht, der auf Hardware ausführbar ist.
Die Ergebnisse, die dem gewünschten Kanal entsprechen, werden ermittelt, indem zunächst die Koeffizienten generiert, dann Subexperimente ausgeführt werden, um die Ergebnisse der verschiedenen Kanäle zu erhalten, und schließlich die Erwartungswerte zu rekonstruiert werden.
Ein kurzes Beispiel: Schneiden eines RZZGate
Als einfaches explizites Beispiel betrachten wir die Zerlegung eines geschnittenen RZZGate (Details sind in [2] zu finden). Ein Quantum Circuit, der einen RZZGate enthält, kann simuliert werden, indem sechs Subexperimente durchgeführt werden, bei denen der RZZGate durch reine Einzelqubit-Operationen ersetzt wurde (dies sind die 's aus der obigen Gleichung). Die Ergebnisse dieses Circuits werden rekonstruiert, indem die Ergebnisse jedes Subexperiments zusammen mit einem Satz von Koeffizienten kombiniert werden (die 's aus der obigen Gleichung), die positiv oder negativ sein können.
Für einen gewählten -Parameter des RZZGate sind die sechs Subexperimente wie folgt:
- Mit Koeffizient : nichts tun ()
- Mit Koeffizient : einen ZGate auf jedem Qubit ausführen ()
- Mit Koeffizient : eine projektive Messung in der -Basis auf dem ersten Qubit und ein auf dem zweiten ausführen (). Wenn das Ergebnis der Messung ist, das Vorzeichen des Beitrags dieses Ergebnisses bei der Rekonstruktion umkehren.
- Mit Koeffizient : eine projektive Messung in der -Basis auf dem ersten Qubit und ein auf dem zweiten ausführen (). Wenn das Ergebnis der Messung 1 ist, das Vorzeichen des Beitrags dieses Ergebnisses bei der Rekonstruktion umkehren.
- Wie 3. (), aber die Qubits tauschen ( statt).
- Wie 4. (), aber die Qubits tauschen ( statt).
Referenztabelle für den Sampling-Overhead
Die folgende Tabelle gibt den Sampling-Overhead-Faktor für eine Vielzahl von Zwei-Qubit-Anweisungen an, vorausgesetzt, dass nur eine einzelne Anweisung geschnitten wird.
| Anweisungen | KAK-Zerlegungswinkel | Sampling-Overhead-Faktor |
|---|---|---|
| CSGate, CSdgGate, CSXGate | ||
| CXGate, CYGate, CZGate, GHGate, ECRGate | ||
| iSwapGate, DCXGate | ||
| SwapGate | ||
| RXXGate, RYYGate, RZZGate, RZXGate | ||
| CRXGate, CRYGate, CRZGate, CPhaseGate | ||
| XXPlusYYGate, XXMinusYYGate | (unabhängig von ) | |
| Move (Wire Cut im LO-Szenario) | N/A |
Nächste Schritte
Referenzen
[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