Specificare le opzioni di Estimator
Il codice presente in questa pagina è stato sviluppato sulla base dei seguenti requisiti. Si consiglia di utilizzare queste versioni o quelle più recenti.
qiskit[all]~=2.5.1 qiskit-ibm-runtime~=0.47.0
È possibile utilizzare le opzioni per personalizzare la primitiva Estimator. Sebbene l'interfaccia del metodo run() delle primitive sia comune a tutte le implementazioni, le relative opzioni non lo sono. Per informazioni sulle opzioni qiskit.primitives.BaseEstimatorV2 qiskit_aer.BaseEstimatorV2 e, consultare la documentazione dell'API.
Note:
- È possibile visualizzare le opzioni disponibili e aggiornare i valori delle opzioni durante o dopo l'inizializzazione di Estimator.
- Utilizza il
update()metodo per applicare le modifiche all'attributooptions. - Se non si specifica un valore per un'opzione, le viene assegnato il valore speciale e vengono utilizzati i valori predefiniti del
Unsetserver. optionsL'attributo è didataclasstipo Python. È possibile utilizzare il metodo integratoasdictper convertirlo in un dizionario.
Imposta le opzioni di Estimator
È possibile impostare le opzioni al momento dell'inizializzazione di Estimator, dopo l'inizializzazione di Estimator oppure (solo in precision questo caso) nel run() metodo.
Inizializzazione primitiva
Durante l'inizializzazione di Estimator è possibile passare un'istanza della classe delle opzioni o un dizionario; Estimator provvederà quindi a crearne una copia. Pertanto, la modifica del dizionario originale o dell'istanza delle opzioni non influisce sulle opzioni associate alla primitiva.
Corso sulle opzioni
Quando si crea un'istanza della EstimatorV2 classe, è possibile passare un'istanza della classe delle opzioni. Queste opzioni verranno quindi applicate quando utilizzerai run() per eseguire il calcolo. Specificare le opzioni nel seguente formato: options.option.sub-option.sub-sub-option = choice. Ad esempio: options.dynamical_decoupling.enable = True
Esempio:
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
options = EstimatorOptions(
resilience_level=2,
resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)
# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]
estimator = Estimator(mode=backend, options=options)Dizionario
È possibile specificare le opzioni sotto forma di dizionario al momento dell'inizializzazione di Estimator.
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 initialization
estimator = Estimator(
backend,
options={
"resilience_level": 2,
"resilience": {
"zne_mitigation": True,
"zne": {"noise_factors": [1, 3, 5]},
},
},
)Opzioni di aggiornamento dopo l'inizializzazione
È possibile specificare le opzioni in questo formato: estimator.options.option.sub-option.sub-sub-option = choice per usufruire del completamento automatico, oppure utilizzare il update() metodo per effettuare aggiornamenti in blocco.
Non è necessario istanziare la classe delle EstimatorV2 opzioni (EstimatorOptions) se si impostano le opzioni dopo aver inizializzato il tipo primitivo.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
estimator = Estimator(mode=backend)
# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
default_precision=0.02, resilience={"zne_mitigation": True}
)Metodo Run()
Gli unici valori che è possibile passare run() sono quelli definiti nell'interfaccia. Cioè, precision per Estimator. Questo sovrascrive qualsiasi valore impostato per default_precision nell'esecuzione corrente.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
observable = SparsePauliOp("Z" * 3)
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)
estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)Output:
<RuntimeJobV2('d9mqa0g8csec73fagtl0', 'estimator')>
Caso particolare: precisione
Il EstimatorV2.run metodo accetta due argomenti: un elenco di PUB, ciascuno dei quali può specificare un valore di precisione specifico per l' PUB, e un argomento chiave denominato "precision". Questi valori di precisione fanno parte dell'interfaccia di esecuzione dell'Estimator e sono indipendenti dalle opzioni dell'Estimator di runtime. Hanno la precedenza su qualsiasi valore specificato come opzione, al fine di rispettare l'astrazione dell'Estimator.
Tuttavia, se non precision è specificato né tramite l'opzione PUB né nell'argomento della parola chiave run (o se entrambi sono impostati su None), viene utilizzato il valore di precisione specificato nelle opzioni, in particolare default_precision.
Questi parametri di precisione servono esclusivamente a specificare la precisione desiderata; non è garantito che i risultati raggiungano effettivamente la precisione specificata.
Si noti che le opzioni di Estimator includono sia default_shots che default_precision. Tuttavia, poiché la funzione "gate-twirling" è abilitata per impostazione predefinita, il prodotto di num_randomizations e shots_per_randomization ha la precedenza su queste due opzioni.
In particolare, per qualsiasi file di configurazione dell'Estimator ( PUB ):
- Se il parametro
PUBspecifica la precisione, utilizzare quel valore. - Se nell'argomento è specificato il valore
rundi precisione, utilizzare quel valore. - Se
twirlingè abilitato (impostazione predefinita: True), viene utilizzato il prodotto dinum_randomizationseshots_per_randomization, come specificato nelletwirlingopzioni. - Se
estimator.options.default_shotsviene specificato, utilizzare quel valore per regolare la quantità di dati. - Se
estimator.options.default_precisionviene specificato, utilizzare quel valore.
Ad esempio, se la precisione è specificata in tutte e quattro le posizioni, viene utilizzata quella con la precedenza più alta (la precisione specificata nell' PUB ).
Sebbene la precisione specificata nell' PUB e e in run abbia una precedenza maggiore, il processo fallisce se twirling è abilitato e il prodotto di num_randomizations e shots_per_randomization è inferiore al numero di shot necessari per raggiungere la precisione richiesta. num_randomizationsIn questo scenario, EstimatorV2 non è in grado di distribuire i colpi tra i specificati.
La precisione è inversamente proporzionale all'uso. In altre parole, minore è la precisione, maggiore è il tempo di elaborazione richiesto dalla QPU.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
observable = SparsePauliOp("Z" * 3)
circuit = random_iqp(3)
circuit.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})
# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)Output:
<RuntimeJobV2('d9mqa2o8csec73fagtpg', 'estimator')>
Disattiva tutte le funzioni di mitigazione e soppressione degli errori
È possibile disattivare tutte le funzioni di mitigazione e soppressione degli errori se, ad esempio, si sta conducendo una ricerca sulle proprie tecniche di mitigazione. Per farlo, imposta resilience_level = 0.
Esempio:
from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService
# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()
# Get a backend
backend = service.least_busy(operational=True, simulator=False)
# Define Estimator
estimator = Estimator(backend)
options = estimator.options
# Turn off all error mitigation and suppression
options.resilience_level = 0Opzioni disponibili
La tabella seguente illustra le opzioni disponibili nell'ultima versione di qiskit-ibm-runtime. Per visualizzare le versioni precedenti delle opzioni, visita la qiskit-ibm-runtime documentazione dell'API e seleziona una versione precedente.
Il numero totale di impulsi da utilizzare per circuito per configurazione.
Opzioni : numero intero >= 0
Impostazione predefinita : Nessuna
La precisione predefinita da utilizzare per qualsiasi chiamata a
PUBrun()che non ne specifichi una.Opzioni : Float > 0
Impostazione predefinita : 0.015625 (1 / √4096)
Gestire le impostazioni di mitigazione degli errori di disaccoppiamento dinamico.
dynamical_decouplingDocumentazione APIOpzioni :
True,FalseImpostazione predefinita :
FalseOpzioni :
middle,edgesImpostazione predefinita :
middleOpzioni:
asap,alapImpostazione predefinita:alapOpzioni:
XX,XpXm,XY4Impostazione predefinita:XXOpzioni:
True,FalseImpostazione predefinita:False
environmentDocumentazione APIFunzione richiamabile che riceve
Job IDeJob result.Opzioni : Nessuna
Impostazione predefinita : Nessuna
Elenco dei tag.
Opzioni : Nessuna
Impostazione predefinita : Nessuna
Opzioni : DEBUG, INFO, AVVISO, ERRORE, CRITICO
Impostazione predefinita : AVVISO
Opzioni :
True,FalseImpostazione predefinita :
False
Se riportare i qubit allo stato fondamentale ad ogni esecuzione.
Opzioni :
True,FalseImpostazione predefinita :
TrueIl ritardo tra una misurazione e il successivo circuito quantistico.
Opzioni : Valore compreso nell'intervallo specificato da
backend.rep_delay_rangeImpostazione predefinita : specificata da
backend.default_rep_delay
Limita la durata di esecuzione di un processo, in secondi. Per ulteriori dettagli, consulta la guida sul tempo massimo di esecuzione.
Opzioni : numero intero di secondi compreso tra [1 e 10800]
Impostazione predefinita : 10800 (3 ore)
Opzioni avanzate di resilienza per ottimizzare la strategia di resilienza.
Opzioni per l'apprendimento del rumore del livello.
Opzioni : [elenco] di 2-10 valori compresi tra [0 e 200]
Impostazione predefinita :
(0, 1, 2, 4, 16, 32)Opzioni : Nessuna, numero intero >= 1
Impostazione predefinita :
4Opzioni : numero intero >= 1
Impostazione predefinita :
32Opzioni : numero intero >= 1
Impostazione predefinita :
128Opzioni :
NoiseLearnerResult,Sequence[LayerError]Impostazione predefinita : Nessuna
Opzioni :
True,FalseImpostazione predefinita :
TrueOpzioni per l'apprendimento del rumore di misurazione.
Opzioni : numero intero >= 1
Impostazione predefinita :
32Opzioni : Intero,
autoImpostazione predefinita :
autoOpzioni :
True,FalseImpostazione predefinita :
FalseOpzioni di mitigazione della cancellazione probabilistica degli errori.
Opzioni :
None, numero intero ≥ 1Impostazione predefinita :
100Opzioni :
auto, numero decimale compreso tra [0 e 1]Impostazione predefinita :
autoOpzioni :
True,FalseImpostazione predefinita :
FalseOpzioni :
gate_folding,gate_folding_front,gate_folding_back,peaImpostazione predefinita :
gate_foldingOpzioni : Elenco dei galleggianti
Impostazione predefinita :
[0, *noise_factors]Opzioni : Una o più delle seguenti:
exponential,linear,double_exponential,polynomial_degree_(1 <= k <= 7),fallbackImpostazione predefinita :
(exponential, linear)Opzioni : elenco di galleggianti; ogni galleggiante deve essere ≥ 1
Impostazione predefinita :
(1, 1.5, 2)perPEA, e(1, 3, 5)altrimenti
Quanto livello di resilienza occorre garantire in caso di errori? Livelli più elevati producono risultati più accurati, ma comportano tempi di elaborazione più lunghi. Per ulteriori informazioni, consulta la sezione sui livelli di resilienza nell'argomento "Gestione del rumore".
Opzioni :
0,1,2Impostazione predefinita :
1Opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzi
Opzioni : Elenco dei nomi dei gate di base su cui eseguire l'unrolling
Impostazione predefinita : l'insieme di tutte le porte di base supportate dal simulatore Qiskit Aer
Opzioni : Elenco delle interazioni dirette tra due qubit
Impostazione predefinita : Nessuna, il che implica l'assenza di vincoli di connettività (connettività completa).
Opzioni : Qiskit Aer NoiseModel o la sua rappresentazione
Impostazione predefinita : Nessuna
Valori consentiti : numero intero
Impostazione predefinita : Nessuna
Opzioni di rotazione
Opzioni : Vero, Falso
Impostazione predefinita : False
Opzioni : Vero, Falso
Impostazione predefinita : True
Opzioni :
auto, numero intero ≥ 1Impostazione predefinita :
autoOpzioni :
auto, numero intero ≥ 1Impostazione predefinita :
autoOpzioni :
active,active-circuit,active-accum,allImpostazione predefinita :
active-accum
Opzioni sperimentali, se disponibili.
Compatibilità delle funzioni
Alcune funzionalità di runtime non possono essere utilizzate contemporaneamente in un unico processo. Fai clic sulla scheda corrispondente per visualizzare un elenco delle funzionalità incompatibili con quella selezionata:
Incompatibile con:
- Giro della porta
- PEA
- Pec
Potrebbe non funzionare se si utilizzano gate personalizzati. Incompatibile con:
- PEA
- Pec
Incompatibile con:
- Portali frazionati
- Allungamenti
Altre note:
- La rotazione delle misure può essere applicata solo alle misure terminali.
- Non funziona con intrecciatori non Clifford.
Incompatibile con:
- Portali frazionati
- ZNE con copertina a libro
- Pec
Incompatibile con:
- Portali frazionati
- ZNE con copertina a libro
- PEA
Passi successivi
- Per ulteriori dettagli sui metodi
EstimatorV2, consultare la documentazione di riferimento dell'API di Estimator. - Decidi in quale modalità di esecuzione eseguire il tuo processo.
- Scopri come gestire il rumore con Estimator.