Tecniche di mitigazione e soppressione degli errori
È ora disponibile la versione beta di un nuovo modello di esecuzione. Il modello di esecuzione diretta offre una maggiore flessibilità nella personalizzazione del flusso di lavoro per la riduzione degli errori. Per ulteriori informazioni, consultare la guida al modello di esecuzione diretta.
Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.
qiskit-ibm-runtime~=0.47.0
Le tecniche di mitigazione e soppressione degli errori vengono utilizzate per migliorare la qualità dei risultati quando si passa a carichi di lavoro più consistenti. Questa pagina fornisce una panoramica generale delle tecniche di soppressione e mitigazione degli errori disponibili con IBM Quantum Compute.
La cella seguente importa la primitiva Estimator e crea un backend che verrà utilizzato per inizializzare l'Estimator nelle celle di codice successive.
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy()Disaccoppiamento dinamico
I circuiti quantistici vengono eseguiti sull'hardware IBM® come sequenze di impulsi a microonde che devono essere programmati ed eseguiti a intervalli di tempo precisi. Purtroppo, le interazioni indesiderate tra i qubit possono portare a errori di coerenza sui qubit inattivi. Il disaccoppiamento dinamico funziona inserendo sequenze di impulsi sui qubit inattivi per annullare approssimativamente l'effetto di questi errori. Ogni sequenza di impulsi inserita equivale a un'operazione di identità, ma la presenza fisica degli impulsi ha l'effetto di sopprimere gli errori. Esistono molte scelte possibili di sequenze di impulsi e quale sia la sequenza migliore per ogni caso particolare rimane un' area di ricerca attiva.
Si noti che il disaccoppiamento dinamico è utile soprattutto per i circuiti che contengono lacune in cui alcuni qubit rimangono inattivi senza che alcuna operazione agisca su di essi. Se le operazioni nel circuito sono molto dense, tanto che tutti i qubit sono occupati per la maggior parte del tempo, l'aggiunta di impulsi di disaccoppiamento dinamico potrebbe non migliorare le prestazioni. Anzi, potrebbe addirittura peggiorare le prestazioni a causa delle imperfezioni degli impulsi stessi.
Il diagramma seguente illustra il disaccoppiamento dinamico con una sequenza di impulsi XX. Il circuito astratto a sinistra è mappato su un programma di impulsi a microonde in alto a destra. In basso a destra è rappresentato lo stesso programma, ma con una sequenza di due impulsi X inseriti durante un periodo di inattività del primo qubit.
Il disaccoppiamento dinamico può essere attivato impostando enable su True nelle opzioni di disaccoppiamento dinamico. L'opzione sequence_type consente di scegliere tra diverse sequenze di impulsi. Il tipo di sequenza predefinito è "XX".
La seguente cella di codice mostra come abilitare il disaccoppiamento dinamico per Estimator e come scegliere una sequenza di disaccoppiamento dinamico.
estimator = Estimator(mode=backend)
estimator.options.dynamical_decoupling.enable = True
estimator.options.dynamical_decoupling.sequence_type = "XpXm"Pauli che volteggia
Il twirling, noto anche come compilazione randomizzata, è una tecnica ampiamente utilizzata per convertire canali di rumore arbitrari in canali di rumore con una struttura più specifica.
Il twirling Pauli è un tipo speciale di twirling che utilizza le operazioni di Pauli. Ha l'effetto di trasformare qualsiasi canale quantistico in un canale Pauli. Eseguita da sola, può attenuare il rumore coerente perché questo tende ad accumularsi quadraticamente con il numero di operazioni, mentre il rumore Pauli si accumula linearmente. Il Pauli twirling è spesso combinato con altre tecniche di attenuazione degli errori che funzionano meglio con il rumore Pauli che con il rumore arbitrario.
Il Pauli twirling viene implementato mettendo a sandwich una serie scelta di porte con porte di Pauli a singolo qubit scelte a caso, in modo tale che l'effetto ideale della porta rimanga lo stesso. Il risultato è che un singolo circuito viene sostituito da un insieme casuale di circuiti, tutti con lo stesso effetto ideale. Quando si campiona il circuito, i campioni vengono estratti da più istanze casuali, anziché da una sola.
Poiché la maggior parte degli errori nell'hardware quantistico attuale proviene da porte a due bit, questa tecnica viene spesso applicata esclusivamente a porte (native) a due bit. Il diagramma che segue illustra alcune rotazioni di Pauli per le porte CNOT ed ECR. Ogni circuito all'interno di una fila ha lo stesso effetto ideale.
Il twirling Pauli può essere abilitato impostando enable_gates su True nelle opzioni di twirling. Altre opzioni degne di nota sono:
num_randomizations: Il numero di istanze di circuito da estrarre dall'insieme dei circuiti roteati.shots_per_randomization: Il numero di scatti da campionare da ogni istanza del circuito.
La seguente cella di codice mostra come abilitare il "Pauli twirling" e impostare queste opzioni per Estimator. Non è necessario impostare esplicitamente nessuna di queste opzioni.
estimator = Estimator(mode=backend)
estimator.options.twirling.enable_gates = True
estimator.options.twirling.num_randomizations = 32
estimator.options.twirling.shots_per_randomization = 100Errore di lettura a rotazione (TREX) eXtinction
Il metodo TREX ( eXtinction ) attenua l'effetto degli errori di misurazione nella stima dei valori attesi degli osservabili di Pauli. Si basa sul concetto di misurazioni "twirled", che si ottengono sostituendo in modo casuale i gate di misurazione con una sequenza composta da (1) un gate di Pauli X, (2) una misurazione e (3) un'inversione classica di bit. Proprio come nel caso della rotazione standard del gate, questa sequenza equivale a una misurazione semplice in assenza di rumore, come illustrato nel diagramma seguente:
In presenza di un errore di lettura, la rotazione della misura ha l'effetto di diagonalizzare la matrice di trasferimento dell'errore di lettura, rendendone più facile l'inversione. Un termine di ridimensionamento proveniente dal canale di rumore diagonale viene appreso effettuando un benchmark su circuiti casuali inizializzati allo stato zero. Ciò consente al servizio di eliminare la distorsione dai valori attesi causata dal rumore di lettura. Il calcolo della matrice di trasferimento dell'errore di lettura richiede l'esecuzione di ulteriori circuiti di calibrazione, il che comporta un leggero sovraccarico.
Attiva TREX utilizzando measure_mitigation l'opzione
È possibile abilitare TREX impostando measure_mitigation su True nelle opzioni di resilienza di calcolo di IBM Quantum per Estimator. In questa sede vengono descritte le opzioni relative all'apprendimento del rumore di misura. Come nel caso del "gate twirling", è possibile impostare il numero di randomizzazioni del circuito e il numero di tentativi per ogni randomizzazione.
La seguente cella di codice mostra come abilitare TREX e impostare queste opzioni per Estimator. Non è necessario impostare esplicitamente nessuna di queste opzioni.
estimator = Estimator(mode=backend)
estimator.options.resilience.measure_mitigation = True
estimator.options.resilience.measure_noise_learning.num_randomizations = 32
estimator.options.resilience.measure_noise_learning.shots_per_randomization = 100Attiva TREX utilizzando resilience_level l'opzione
È possibile abilitare TREX impostando il livello di resilienza su 1, come mostrato nell'esempio seguente.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 1})Estrapolazione a rumore zero (ZNE)
L'estrapolazione a rumore zero (ZNE) è una tecnica per mitigare gli errori nella stima dei valori di aspettativa delle osservabili. Anche se spesso migliora i risultati, non è garantito che produca un risultato imparziale.
La ZNE si compone di due fasi:
- Amplificazione del rumore : Il circuito quantistico originale viene eseguito più volte a diverse velocità di rumore.
- Estrapolazione : Il risultato ideale viene stimato estrapolando i risultati rumorosi del valore di aspettativa al limite di rumore zero.
Sia la fase di amplificazione del rumore che quella di estrapolazione possono essere implementate in molti modi diversi. IBM Quantum Compute implementa l'amplificazione del rumore tramite il "digital gate folding", ovvero la sostituzione dei gate a due qubit con sequenze equivalenti costituite dal gate stesso e dal suo inverso. Ad esempio, sostituendo un " " unitario con " " si otterrebbe un fattore di amplificazione del rumore pari a 3. Per l'estrapolazione, è possibile scegliere tra diverse forme funzionali, tra cui un adattamento lineare o un adattamento esponenziale. L'immagine qui sotto mostra, a sinistra, la piegatura digitale a cancello e, a destra, la procedura di estrapolazione.
Il sovraccarico di questo metodo varia in funzione del numero di fattori di rumore. Le impostazioni predefinite calcolano il valore atteso a tre livelli di rumore, comportando un sovraccarico di circa l' 3x.
Abilita ZNE utilizzando zne_mitigation l'opzione
È possibile abilitare lo ZNE impostando zne_mitigation su True nelle opzioni di resilienza di calcolo di IBM Quantum per Estimator.
Qui vengono descritte le opzioni disponibili per lo ZNE. Tra le opzioni disponibili, meritano di essere segnalate le seguenti:
noise_factors: I fattori di rumore da utilizzare per l'amplificazione del rumore.extrapolator: La forma funzionale da utilizzare per l'estrapolazione.
La seguente cella di codice mostra come abilitare ZNE e impostare queste opzioni per Estimator. Non è necessario impostare esplicitamente nessuna di queste opzioni.
estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.noise_factors = (1, 3, 5)
estimator.options.resilience.zne.extrapolator = "exponential"Abilita ZNE utilizzando resilience_level l'opzione
È possibile abilitare ZNE (insieme a TREX e al gate twirling) impostando il livello di resilienza su 2, come mostrato nell'esempio seguente.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 2})Amplificazione probabilistica dell'errore (PEA)
Una delle sfide principali di ZNE è l'amplificazione accurata del rumore che colpisce il circuito di destinazione. Il gate folding offre un modo semplice per eseguire questa amplificazione, ma è potenzialmente impreciso e potrebbe portare a risultati errati. Si veda l'articolo "Scalable error mitigation for noisy quantum circuits produces competitive expectation values", e in particolare la pagina 4 delle informazioni supplementari per i dettagli. L'amplificazione probabilistica degli errori fornisce un approccio più accurato all'amplificazione degli errori attraverso l'apprendimento del rumore.
La PEA è una tecnica più sofisticata che esegue esperimenti preliminari per ricostruire il rumore e poi utilizza queste informazioni per eseguire un'amplificazione accurata. Inizia con l'apprendimento del modello di rumore roteato di ogni strato di porte entangling del circuito prima che vengano eseguite (vedi LayerNoiseLearningOptions per le opzioni di apprendimento pertinenti). Dopo la fase di apprendimento, i circuiti vengono eseguiti a ogni fattore di rumore, dove ogni strato di entangling dei circuiti viene amplificato iniettando probabilisticamente un rumore a singolo qubit proporzionale al corrispondente modello di rumore appreso. Per maggiori dettagli si veda l'articolo "Evidence for the utility of quantum computing before fault tolerance".
La PEA si articola in tre fasi:
- Apprendimento : Viene appreso il modello di rumore ritorto di ogni strato di porte entangling del circuito.
- Amplificazione del rumore : Il circuito quantistico originale viene eseguito più volte con diversi fattori di rumore.
- Estrapolazione : Il risultato ideale viene stimato estrapolando i risultati rumorosi del valore di aspettativa al limite di rumore zero.
Per gli esperimenti su scala industriale, la PEA è spesso la scelta migliore.
Poiché la PEA è una tecnica di amplificazione del rumore ZNE, è necessario abilitare ZNE impostando resilience.zne_mitigation = True. Altre resilience.zne possono essere utilizzate per impostare estrapolatori, livelli di amplificazione e così via. Il PEA richiede un modello di rumore, che viene generato automaticamente quando si utilizzano le primitive.
Il seguente snippet fornisce un esempio di utilizzo di PEA per mitigare il risultato di un lavoro di Estimator:
estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.amplifier = "pea"Cancellazione probabilistica dell'errore (PEC)
La cancellazione degli errori probabilistici (PEC) è una tecnica per mitigare gli errori nella stima dei valori di aspettativa delle osservabili. A differenza di ZNE, restituisce una stima imparziale del valore di aspettativa. Tuttavia, in genere comporta un overhead maggiore.
Nella PEC, l'effetto di un circuito target ideale è espresso come una combinazione lineare di circuiti rumorosi che sono effettivamente implementabili nella pratica:
L'uscita del circuito ideale può quindi essere riprodotta eseguendo diverse istanze circuitali rumorose tratte da un insieme casuale definito dalla combinazione lineare. Se i coefficienti formano una distribuzione di probabilità, possono essere utilizzati direttamente come probabilità dell'insieme. In pratica, alcuni dei coefficienti sono negativi, quindi formano una distribuzione di quasi-probabilità. Possono ancora essere utilizzati per definire un insieme casuale, ma c'è un sovraccarico di campionamento legato alla negatività della distribuzione di quasi-probabilità, che è caratterizzata dalla quantità
L'overhead di campionamento è un fattore moltiplicativo del numero di scatti necessari per stimare un valore di aspettativa con una determinata precisione, rispetto al numero di scatti che sarebbero necessari nel circuito ideale. Scala quadraticamente con , che a sua volta scala esponenzialmente con la profondità del circuito.
È possibile abilitare la PEC impostando pec_mitigation su True nelle opzioni di resilienza di calcolo di IBM Quantum per Estimator.
Qui vengono descritte le opzioni disponibili per PEC. È possibile impostare un limite al sovraccarico di campionamento utilizzando l'opzione max_overhead . Si noti che limitare il sovraccarico di campionamento può far sì che la precisione del risultato superi quella richiesta. Il valore predefinito di max_overhead è 100.
La seguente cella di codice mostra come abilitare il PEC e impostare max_overhead l'opzione per Estimator.
estimator = Estimator(mode=backend)
estimator.options.resilience.pec_mitigation = True
estimator.options.resilience.pec.max_overhead = 100Passi successivi
- Consultate il tutorial sulla combinazione delle opzioni di attenuazione degli errori con la primitiva Estimator.
- Configurare la gestione del rumore con Estimator.
- Configura la gestione del rumore con Sampler.
- Scopri altre opzioni per le primitive dell' IBM Quantum.
- Decidi in quale modalità di esecuzione eseguire il tuo processo.