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
QuantumCircuite separando poi i sottoinsiemi di qubit disconnessi in circuiti più piccoli. Questi circuiti contengono oggettiSingleQubitQPDGatee 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
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.

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, , 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 tagli di wire comporta un overhead di campionamento di quando la comunicazione classica non è disponibile (scenario LO). Questo si riduce a 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:
dove è il canale quantistico che implementa l'operazione desiderata, e ogni è un coefficiente reale corrispondente a un canale, , eseguibile sull'hardware.
I risultati equivalenti al canale desiderato si ottengono generando prima i coefficienti , poi eseguendo i subexperiment per ottenere gli esiti dei diversi canali , al fine di ricostruire i valori di aspettazione corrispondenti a .
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 dell'equazione sopra). I risultati di questo circuito vengono ricostruiti combinando i risultati di ogni subexperiment con un insieme di coefficienti (gli dell'equazione sopra), che possono essere positivi o negativi.
Per un certo parametro scelto per il RZZGate, i sei subexperiment sono i seguenti:
- Con coefficiente , non fare nulla ()
- Con coefficiente , applica un ZGate su ciascun qubit ()
- Con coefficiente , esegui una misurazione proiettiva nella base sul primo qubit e un sul secondo (). Se il risultato della misurazione è , inverti il segno del contributo di quell'esito durante la ricostruzione.
- Con coefficiente , esegui una misurazione proiettiva nella base sul primo qubit e un sul secondo (). Se il risultato della misurazione è 1, inverti il segno del contributo di quell'esito durante la ricostruzione.
- Come il punto 3. (), ma scambia i qubit (esegui invece).
- Come il punto 4. (), ma scambia i qubit (esegui 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.
| Istruzioni | Angoli di decomposizione KAK | Fattore di overhead di campionamento |
|---|---|---|
| CSGate, CSdgGate, CSXGate | ||
| CXGate, CYGate, CZGate, GHGate, ECRGate | ||
| iSwapGate, DCXGate | ||
| SwapGate | ||
| RXXGate, RYYGate, RZZGate, RZXGate | ||
| CRXGate, CRYGate, CRZGate, CPhaseGate | ||
| XXPlusYYGate, XXMinusYYGate | (indipendente da ) | |
| Move (taglio del wire nello scenario LO) | N/A |
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