Introduzione alle opzioni
Puoi usare le opzioni per personalizzare le primitive di Qiskit Runtime in base alle tue esigenze.
Struttura​
Quando chiami le primitive, puoi passare le opzioni usando una classe di opzioni o un dizionario. Le opzioni più comuni, come resilience_level, si trovano al primo livello. Le altre opzioni sono raggruppate in categorie, come execution. Specifica le opzioni nel seguente formato: options.opzione.sotto-opzione.sotto-sotto-opzione = scelta. Ad esempio: options.dynamical_decoupling.enable = True.
Valori predefiniti​
Se non specifichi un valore per un'opzione, le viene assegnato il valore speciale Unset e vengono utilizzati i valori predefiniti del server. Pertanto, il valore predefinito sarà lo stesso indipendentemente dalla versione del codice.
Le tabelle nella sezione "Riepilogo delle classi di opzioni" nella guida delle "opzioni" di ogni primitiva elencano i valori predefiniti.
Impostare le opzioni​
Le opzioni possono essere definite prima che una primitiva venga costruita e passate alla primitiva come istanza della classe di opzioni o come dizionario. La primitiva ne crea una copia, il che significa che modificare il dizionario o l'istanza di opzioni originale non influisce sulle opzioni di cui la primitiva è proprietaria.
Inoltre, puoi modificare le opzioni dopo che la primitiva è stata costruita. Usa il flusso di lavoro più adatto alla tua applicazione.
- Puoi vedere le opzioni disponibili durante o dopo l'inizializzazione della primitiva.
- Se non specifichi un valore per un'opzione, le viene assegnato il valore speciale
Unsete vengono utilizzati i valori predefiniti del server. - L'attributo
optionsè il tipo Pythondataclass. Puoi usare il metodo integratoasdictper convertirlo in un dizionario.
Classe options​
Quando crei un'istanza della classe primitiva, puoi passare un'istanza della classe options. Tali opzioni vengono poi applicate quando usi run() per eseguire il calcolo. Specifica le opzioni nel seguente formato: options.opzione.sotto-opzione.sotto-sotto-opzione = scelta. Ad esempio: options.dynamical_decoupling.enable = True.
Consulta SamplerOptions o EstimatorOptions per tutti i dettagli sulla classe.
Il seguente esempio usa la primitiva Estimator, ma la sintassi per le altre primitive è simile.
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​
Puoi specificare le opzioni come dizionario quando inizializzi una primitiva.
Il seguente esempio usa la primitiva Estimator, ma la sintassi per le altre primitive è simile.
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]},
},
},
)
Aggiornare le opzioni dopo l'inizializzazione​
Puoi specificare le opzioni nel formato _primitiva_.options.opzione.sotto-opzione.sotto-sotto-opzione = scelta per sfruttare il completamento automatico, oppure usare il metodo update() per aggiornamenti in blocco.
La classe di opzioni della primitiva (EstimatorOptions o SamplerOptions) non deve essere istanziata se imposti le opzioni dopo aver inizializzato la primitiva.
Il seguente esempio usa la primitiva Estimator, ma la sintassi per le altre primitive è simile.
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}
)
Passi successivi​
- Trova dettagli su come configurare la soppressione degli errori e la mitigazione degli errori.
- Scopri di più sulle opzioni di Estimator.
- Scopri di più sulle opzioni di Sampler.
- Scopri di più sulle opzioni di Executor.