Aller au contenu principal
Ce projet est en phase bêta. Tu as trouvé un bug ? Ouvrir un ticket GitHub. Une question ou une idée ? Pose ta question dans Discussions — tes retours sont les bienvenus !
Quelle est la qualité de la traduction sur cette page ?

Introduction aux options

Tu peux utiliser des options pour personnaliser les primitives IBM Quantum selon tes besoins.

Structure​

Lors de l'appel des primitives, tu peux transmettre des options en utilisant une classe d'options ou un dictionnaire. Les options couramment utilisées, comme resilience_level, se trouvent au premier niveau. D'autres options sont regroupées en catégories, comme execution. Spécifie les options dans ce format : options.option.sub-option.sub-sub-option = choice. 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 », dans 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.sub-option.sub-sub-option = choice. 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

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

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

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

Mettre à jour les options après l'initialisation​

Tu peux spécifier les options dans ce format : _primitive_.options.option.sub-option.sub-sub-option = choice 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

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

Étapes suivantes​

Recommandations