Aller au contenu principal

Introduction aux options

Tu peux utiliser des options pour personnaliser les primitives Qiskit Runtime selon tes besoins.

Structure

Lorsque tu appelles les primitives, tu peux transmettre des options en utilisant une classe d'options ou un dictionnaire. Les options couramment utilisées, telles que resilience_level, se trouvent au premier niveau. Les autres options sont regroupées par catégories, par exemple execution. Spécifie les options dans ce format : options.option.sous-option.sous-sous-option = choix. Par exemple : options.dynamical_decoupling.enable = True.

Valeurs par défaut

Si tu ne spécifies pas de valeur pour une option, elle reçoit la valeur spéciale Unset et la valeur par défaut du serveur est utilisée. Ainsi, la valeur par défaut sera la même quelle que soit la version de ton code.

Les tableaux de la section « Résumé des classes d'options » sur le guide « options » de chaque primitive répertorient les valeurs par défaut.

Définir des options

Les options peuvent être définies avant la construction d'une primitive et transmises à celle-ci sous forme d'instance de la classe d'options ou de dictionnaire. La primitive en fait une copie, ce qui signifie que modifier le dictionnaire ou l'instance d'options d'origine n'affecte pas les options dont la primitive est propriétaire.

De plus, tu peux modifier les options après la construction de la primitive. Utilise le flux de travail qui convient le mieux à ton application.

Remarques sur la spécification des options de primitive
  • Tu peux consulter les options disponibles pendant ou après l'initialisation de la primitive.
  • Si tu ne spécifies pas de valeur pour une option, elle reçoit la valeur spéciale Unset et les valeurs par défaut du serveur sont utilisées.
  • L'attribut options est de type Python dataclass. Tu peux utiliser la méthode intégrée asdict pour le convertir en dictionnaire.

Classe options

Lors de la création d'une instance de la classe primitive, tu peux transmettre une instance de la classe options. Ces options sont ensuite appliquées lorsque tu utilises run() pour effectuer le calcul. Spécifie les options dans ce format : options.option.sous-option.sous-sous-option = choix. Par exemple : options.dynamical_decoupling.enable = True.

Consulte SamplerOptions ou EstimatorOptions pour tous les détails sur la classe.

L'exemple suivant utilise la primitive Estimator, mais la syntaxe pour les autres primitives est similaire.

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)

Dictionnaire

Tu peux spécifier les options sous forme de dictionnaire lors de l'initialisation d'une primitive.

L'exemple suivant utilise la primitive Estimator, mais la syntaxe pour les autres primitives est similaire.

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]},
},
},
)

Mettre à jour les options après l'initialisation

Tu peux spécifier les options dans ce format : _primitive_.options.option.sous-option.sous-sous-option = choix pour profiter de l'auto-complétion, ou utiliser la méthode update() pour effectuer des mises à jour groupées.

La classe d'options de la primitive (EstimatorOptions ou SamplerOptions) n'a pas besoin d'être instanciée si tu définis les options après l'initialisation de la primitive.

L'exemple suivant utilise la primitive Estimator, mais la syntaxe pour les autres primitives est similaire.

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}
)

Étapes suivantes

Recommandations