Introduzione alle opzioni
Puoi usare le opzioni per personalizzare le primitive di IBM Quantum in base alle tue esigenze.
Struttura
Quando chiami le primitive, puoi passare le opzioni usando una classe di opzioni o un dizionario. Le opzioni usate più comunemente, come resilience_level, sono al primo livello. Altre opzioni sono raggruppate in categorie, come execution. Specifica le opzioni in questo formato: options.option.sub-option.sub-sub-option = choice. 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 della primitiva.
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. Queste opzioni vengono poi applicate quando usi run() per eseguire il calcolo. Specifica le opzioni in questo formato: options.option.sub-option.sub-sub-option = choice. 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
# 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
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
# 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]},
},
},
)
Aggiornare le opzioni dopo l'inizializzazione
Puoi specificare le opzioni in questo formato: _primitive_.options.option.sub-option.sub-sub-option = choice per sfruttare il completamento automatico, oppure usare il metodo update() per eseguire aggiornamenti in blocco.
Non è necessario istanziare la classe di opzioni della primitiva (EstimatorOptions o SamplerOptions) 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
# 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}
)
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.