Vai al contenuto principale

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.

Note sulla specifica delle opzioni delle primitive
  • 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 Unset e vengono utilizzati i valori predefiniti del server.
  • L'attributo options è il tipo Python dataclass. Puoi usare il metodo integrato asdict per 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​

Raccomandazioni