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.2 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 classe Estimator , è possibile passare come parametro un'istanza della classe delle opzioni. Tali opzioni verranno quindi applicate quando utilizzerai per run() eseguire il calcolo. Specificare le opzioni in questo formato:. options.option.sub-option.sub-sub-option = choice Ad esempio: options.dynamical_decoupling.enable = True
Esempio:
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# from qiskit_ibm_runtime.options import EstimatorOptions
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.options_models 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
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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 opzioni Estimator (EstimatorOptions) se si impostano le opzioni dopo aver inizializzato il tipo primitivo.
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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('dab7lhjvpcac73ddekcg', 'estimator')>
Caso particolare: precisione
Il metodo Estimator.run accetta due argomenti: un elenco di PUB, ciascuno dei quali può specificare un valore di precisione specifico per il " 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 in fase di esecuzione. 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 nelle opzionitwirling. - 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, l'operazione fallisce se twirling è abilitato e il prodotto di e num_randomizations shots_per_randomization è inferiore al numero di shot necessari per raggiungere la precisione. In questo scenario, non Estimator è in grado di distribuire i tiri tra i specificati num_randomizations.
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
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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('dab7ljjvpcac73ddekgg', '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 QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
# 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
Le seguenti informazioni illustrano le opzioni disponibili nell'ultima versione di qiskit-ibm-runtime. Per visualizzare le versioni precedenti delle opzioni, visita il sito e qiskit-ibm-runtime Riferimento API 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 APIElenco 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 :
Sequence[LayerNoiseModel]Impostazione predefinita : Nessuna
Opzioni :
True,FalseImpostazione predefinita :
TrueOpzioni per l'apprendimento del rumore di misurazione.
Opzioni : numero intero >= 1
Impostazione predefinita :
32Opzioni :
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
Estimatormetodi, 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.