Zum Hauptinhalt springen

Einführung in Optionen

Du kannst Optionen verwenden, um Qiskit Runtime Primitives an deine Bedürfnisse anzupassen.

Struktur

Wenn du die Primitives aufrufst, kannst du Optionen entweder über eine Options-Klasse oder als Dictionary übergeben. Häufig verwendete Optionen wie resilience_level befinden sich auf der obersten Ebene. Weitere Optionen sind in Kategorien gruppiert, z. B. execution. Gib die Optionen in diesem Format an: options.option.sub-option.sub-sub-option = choice. Zum Beispiel: options.dynamical_decoupling.enable = True.

Standardwerte

Wenn du für eine Option keinen Wert angibst, erhält sie den speziellen Wert Unset und der serverseitige Standardwert wird verwendet. Der Standardwert ist damit unabhängig von deiner Code-Version immer gleich.

Die Tabellen im Abschnitt „Zusammenfassung der Options-Klassen" im jeweiligen „options"-Leitfaden jedes Primitive listen die Standardwerte auf.

Optionen festlegen

Optionen können vor der Erstellung eines Primitive definiert und diesem als Instanz der Options-Klasse oder als Dictionary übergeben werden. Das Primitive erstellt eine Kopie davon, was bedeutet, dass Änderungen am ursprünglichen Dictionary oder der Options-Instanz keinen Einfluss auf die Optionen des Primitive haben.

Darüber hinaus kannst du die Optionen nach der Erstellung des Primitive ändern. Verwende den Workflow, der für deine Anwendung am besten geeignet ist.

Hinweise zur Angabe von Primitive-Optionen
  • Du kannst die verfügbaren Optionen während oder nach der Initialisierung des Primitive einsehen.
  • Wenn du für eine Option keinen Wert angibst, erhält sie den speziellen Wert Unset und die Standardwerte des Servers werden verwendet.
  • Das options-Attribut ist vom Python-Typ dataclass. Du kannst die integrierte Methode asdict verwenden, um es in ein Dictionary umzuwandeln.

options-Klasse

Beim Erstellen einer Instanz der Primitive-Klasse kannst du eine Instanz der options-Klasse übergeben. Diese Optionen werden dann angewendet, wenn du run() zur Durchführung der Berechnung verwendest. Gib die Optionen in diesem Format an: options.option.sub-option.sub-sub-option = choice. Zum Beispiel: options.dynamical_decoupling.enable = True.

Vollständige Details zur Klasse findest du unter SamplerOptions oder EstimatorOptions.

Das folgende Beispiel verwendet das Estimator Primitive, aber die Syntax für andere Primitives ist ähnlich.

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)

Dictionary

Du kannst Optionen als Dictionary bei der Initialisierung eines Primitive angeben.

Das folgende Beispiel verwendet das Estimator Primitive, aber die Syntax für andere Primitives ist ähnlich.

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

Optionen nach der Initialisierung aktualisieren

Du kannst Optionen in diesem Format angeben: _primitive_.options.option.sub-option.sub-sub-option = choice, um die Auto-Vervollständigung zu nutzen, oder die Methode update() für umfangreiche Aktualisierungen verwenden.

Die Options-Klasse des Primitive (EstimatorOptions oder SamplerOptions) muss nicht instanziiert werden, wenn du Optionen nach der Initialisierung des Primitive festlegst.

Das folgende Beispiel verwendet das Estimator Primitive, aber die Syntax für andere Primitives ist ähnlich.

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

Nächste Schritte

Empfehlungen