Vai al contenuto principale

circuito cutting

Il circuit cutting è una tecnica per aumentare la dimensione dei circuiti eseguibili sull'hardware quantistico, al costo di un overhead di campionamento aggiuntivo. Questo addon implementa tale tecnica, in cui un numero limitato di gate, wire, o entrambi vengono tagliati, producendo circuiti più piccoli più adatti all'esecuzione sull'hardware. Questi circuiti più piccoli vengono poi eseguiti, e i risultati del circuito originale vengono ricostruiti tramite post-elaborazione classica. Il compromesso, tuttavia, è che il numero complessivo di shot deve aumentare di un fattore che dipende dal numero e dal tipo di tagli effettuati (noto come overhead di campionamento). Il circuit cutting può essere utilizzato anche per realizzare gate tra qubit distanti che altrimenti richiederebbero un elevato overhead di SWAP.

Termini importanti

  • Subcircuiti: L'insieme dei circuiti ottenuti tagliando i gate in un QuantumCircuit e separando poi i sottoinsiemi di qubit disconnessi in circuiti più piccoli. Questi circuiti contengono oggetti SingleQubitQPDGate e vengono utilizzati per istanziare ogni subexperiment.

  • Subexperiment: Un termine usato per descrivere i campioni di circuiti unici associati a un subcircuito, che vengono inviati a un QPU per l'esecuzione.

Installa il pacchetto per il circuit cutting

Esistono tre modi per installare il pacchetto per il circuit cutting: PyPI, compilazione dal sorgente e utilizzo in un ambiente containerizzato. Si raccomanda di installare questi pacchetti in un ambiente virtuale per garantire la separazione tra le dipendenze dei pacchetti.

Installa da PyPI

Il modo più diretto per installare il pacchetto qiskit-addon-cutting è tramite PyPI:

pip install qiskit-addon-cutting

Installa dal sorgente

Clicca qui per leggere come installare questo pacchetto manualmente.

Per contribuire a questo pacchetto o installarlo manualmente, clona prima il repository:

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

e installa il pacchetto con pip. Per eseguire i tutorial presenti nel repository del pacchetto, installa anche le dipendenze per i notebook. Installa le dipendenze dev se hai intenzione di sviluppare nel repository.

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

Utilizzo con Docker

Il dockerfile incluso nel repository dell'addon può essere utilizzato per creare un'immagine Docker. Il file compose.yaml incluso ti consente di usare l'immagine Docker con i seguenti comandi.

Clicca qui per leggere come usare questo pacchetto con Docker.

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

Se stai usando podman e podman-compose al posto di docker, i comandi sono:

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

Una volta che il container è in esecuzione, dovresti vedere un messaggio simile a:

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

L'ultimo URL in questo messaggio ti darà accesso all'interfaccia del notebook Jupyter.

Inoltre, la home directory include una sottodirectory chiamata persistent-volume. Tutto il lavoro che desideri salvare deve essere collocato in questa directory, poiché è l'unica che verrà conservata tra le diverse esecuzioni del container.

Sfondo teorico

Nel processo di circuit cutting, esistono due tipi di tagli: un taglio di gate o "space-like", in cui il taglio attraversa un gate che opera su due (o più) qubit, e un taglio di wire o "time-like", che taglia direttamente attraverso un wire di qubit (essenzialmente un gate identità a qubit singolo tagliato in due parti).

Il diagramma seguente mostra un esempio di taglio dei gate in modo da dividere il circuito in due parti più piccole con un numero inferiore di qubit.

Diagramma del gate cutting che prende un circuito più grande e lo divide in due più piccoli etichettati "A" e "B"

Esistono tre scenari da considerare quando si prepara un workflow di circuit cutting, che ruotano attorno alla disponibilità di comunicazione classica tra le esecuzioni del circuito. Il primo è quello in cui sono disponibili solo operazioni locali (LO), mentre gli altri due introducono la comunicazione classica tra le esecuzioni, nota come operazioni locali e comunicazione classica (LOCC). Gli scenari LOCC vengono poi raggruppati in comunicazione near-time unidirezionale tra le esecuzioni del circuito, oppure comunicazione real-time bidirezionale (che potresti trovare in un ambiente multi-QPU).

Sebbene il circuit cutting possa essere utilizzato per eseguire circuiti quantistici più grandi di quanto sia possibile sull'hardware attualmente disponibile, ha un costo. Poiché la tecnica può essere formulata come un problema di decomposizione quasi-probabilistica (QPD), è richiesto un overhead di campionamento esponenziale per ricostruire i risultati. Questo overhead è il fattore per cui il numero complessivo di shot deve aumentare affinché la decomposizione quasi-probabilistica produca la stessa quantità di errore, ϵ\epsilon, che si otterrebbe eseguendo il circuito originale. Ogni gate tagliato contribuisce a questo overhead, e la quantità aggiunta dipende dal tipo di gate tagliato (maggiori dettagli sull'overhead di campionamento si trovano nell'appendice finale di [1]).

Ad esempio, un singolo gate CNOT tagliato comporta un overhead di campionamento pari a 9 [2,6] e un circuito con nn tagli di wire comporta un overhead di campionamento di O(16n)\mathcal{O}(16^n) quando la comunicazione classica non è disponibile (scenario LO). Questo si riduce a O(4n)\mathcal{O}(4^n) quando la comunicazione classica diventa disponibile (scenario LOCC) [4]. Tuttavia, il wire cutting con comunicazione classica (LOCC) non è supportato da questo pacchetto.

Formalmente, il problema QPD del circuit cutting può essere espresso come segue:

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

dove U\mathcal{U} è il canale quantistico che implementa l'operazione desiderata, e ogni aia_i è un coefficiente reale corrispondente a un canale, Fi\mathcal{F}_i, eseguibile sull'hardware.

I risultati equivalenti al canale desiderato U\mathcal{U} si ottengono generando prima i coefficienti aia_i, poi eseguendo i subexperiment per ottenere gli esiti dei diversi canali Fi\mathcal{F}_i, al fine di ricostruire i valori di aspettazione corrispondenti a U\mathcal{U}.

Un breve esempio: taglio di un RZZGate

Come esempio esplicito di base, considera la decomposizione di un RZZGate tagliato (i dettagli si trovano in [2]). Un circuito quantistico che contiene un RZZGate può essere simulato eseguendo sei subexperiment in cui il RZZGate è stato sostituito solo da operazioni a qubit singolo (questi sono gli Fi\mathcal{F}_i dell'equazione sopra). I risultati di questo circuito vengono ricostruiti combinando i risultati di ogni subexperiment con un insieme di coefficienti (gli aia_i dell'equazione sopra), che possono essere positivi o negativi.

Per un certo parametro θ\theta scelto per il RZZGate, i sei subexperiment sono i seguenti:

  1. Con coefficiente a1=cos2(θ/2)a_1 = \cos^2(\theta/2), non fare nulla (III\otimes I)
  2. Con coefficiente a2=sin2(θ/2)a_2 = \sin^2(\theta/2), applica un ZGate su ciascun qubit (ZZZ\otimes Z)
  3. Con coefficiente a3=sin(θ)/2a_3 = -\sin(\theta)/2, esegui una misurazione proiettiva nella base ZZ sul primo qubit e un SS sul secondo (MzSM_z\otimes S). Se il risultato della misurazione è 11, inverti il segno del contributo di quell'esito durante la ricostruzione.
  4. Con coefficiente a4=sin(θ)/2a_4 = \sin(\theta)/2, esegui una misurazione proiettiva nella base ZZ sul primo qubit e un SS^\dagger sul secondo (MzSM_z\otimes S^\dagger). Se il risultato della misurazione è 1, inverti il segno del contributo di quell'esito durante la ricostruzione.
  5. Come il punto 3. (a5=a3a_5=a_3), ma scambia i qubit (esegui SMzS\otimes M_z invece).
  6. Come il punto 4. (a6=a4a_6=a_4), ma scambia i qubit (esegui SMzS^\dagger\otimes M_z invece).

Tabella di riferimento dell'overhead di campionamento

La tabella seguente fornisce il fattore di overhead di campionamento per una varietà di istruzioni a due qubit, a condizione che venga tagliata una sola istruzione.

IstruzioniAngoli di decomposizione KAKFattore di overhead di campionamento
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 (indipendente da β\beta)
Move (taglio del wire nello scenario LO)N/A42=164^2 = 16

Passi successivi

Riferimenti

[1] Christophe Piveteau, David Sutter, circuito 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