Zum Hauptinhalt springen

Estimator-Optionen festlegen

Paketversionen

Der Code auf dieser Seite wurde mit den folgenden Anforderungen entwickelt. Wir empfehlen, diese oder neuere Versionen zu verwenden.

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1

Du kannst Optionen verwenden, um das Estimator-Primitiv anzupassen. Während die Schnittstelle der run()-Methode der Primitive bei allen Implementierungen gleich ist, sind die Optionen es nicht. Weitere Informationen zu den Optionen findest du in den API-Referenzen für qiskit.primitives.BaseEstimatorV2 und qiskit_aer.BaseEstimatorV2.

Hinweise :

Hinweise zur Angabe von Optionen in den Estimator-Primitiven
  • Du kannst die verfügbaren Optionen einsehen und Optionswerte während oder nach der Estimator-Initialisierung aktualisieren.
  • Verwende die update()-Methode, um Änderungen am options-Attribut anzuwenden.
  • Wenn du keinen Wert für eine Option angibst, erhält sie den speziellen Wert Unset und die Serverstandards werden verwendet.
  • Das options-Attribut ist vom Python-Typ dataclass. Du kannst die eingebaute Methode asdict verwenden, um es in ein Dictionary umzuwandeln.

Estimator-Optionen festlegen

Du kannst Optionen bei der Initialisierung des Estimators festlegen, nach der Initialisierung oder (nur für precision) in der run()-Methode.

Primitive Initialisierung

Du kannst beim Initialisieren des Estimators eine Instanz der Optionsklasse oder ein Dictionary übergeben, das dann eine Kopie dieser Optionen erstellt. Daher hat das Ändern des ursprünglichen Dictionarys oder der Optionsinstanz keinen Einfluss auf die Optionen, die dem Primitiv gehören.

Optionsklasse

Beim Erstellen einer Instanz der EstimatorV2-Klasse kannst du eine Instanz der Optionsklasse ü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

Beispiel:

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
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 beim Initialisieren des Estimators als Dictionary angeben.

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 die Optionen in diesem Format angeben: estimator.options.option.sub-option.sub-sub-option = choice, um die automatische Vervollständigung zu nutzen, oder die update()-Methode verwenden, um Massenaktualisierungen vorzunehmen.

Die EstimatorV2-Optionsklasse (EstimatorOptions) muss nicht instanziiert werden, wenn du Optionen nach der Initialisierung des Primitivs festlegst.

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

Run()-Methode

Die einzigen Werte, die du an run() übergeben kannst, sind die in der Schnittstelle definierten. Das heißt: precision für den Estimator. Dies überschreibt jeden für default_precision festgelegten Wert für den aktuellen Lauf.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

observable = SparsePauliOp("Z" * 3)

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)

estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)
<RuntimeJobV2('d7amh42k86tc73a1sa20', 'estimator')>

Sonderfall: precision

Die EstimatorV2.run-Methode akzeptiert zwei Argumente: eine Liste von PUBs, von denen jeder einen PUB-spezifischen Wert für precision angeben kann, sowie ein precision-Schlüsselwortargument. Diese precision-Werte sind Teil der Estimator-Ausführungsschnittstelle und unabhängig von den Optionen des Runtime-Estimators. Sie haben Vorrang vor allen als Optionen angegebenen Werten, um die Estimator-Abstraktion einzuhalten.

Wenn jedoch precision weder von einem PUB noch im run-Schlüsselwortargument angegeben wird (oder wenn sie alle None sind), wird der precision-Wert aus den Optionen verwendet, insbesondere default_precision.

hinweis

Diese precision-Parameter dienen nur zur Angabe der Ziel-Precision; es wird nicht garantiert, dass die Ergebnisse die angegebene Precision erreichen.

Beachte, dass die Estimator-Optionen sowohl default_shots als auch default_precision enthalten. Da Gate-Twirling standardmäßig aktiviert ist, hat jedoch das Produkt aus num_randomizations und shots_per_randomization Vorrang vor diesen beiden Optionen.

Konkret gilt für jeden Estimator-PUB:

  1. Wenn der PUB precision angibt, wird dieser Wert verwendet.
  2. Wenn das precision-Schlüsselwortargument in run angegeben ist, wird dieser Wert verwendet.
  3. Wenn twirling aktiviert ist (standardmäßig True), wird das Produkt aus num_randomizations und shots_per_randomization verwendet, wie in den twirling-Optionen angegeben.
  4. Wenn estimator.options.default_shots angegeben ist, wird dieser Wert zur Steuerung der Datenmenge verwendet.
  5. Wenn estimator.options.default_precision angegeben ist, wird dieser Wert verwendet.

Wenn precision beispielsweise an allen vier Stellen angegeben ist, wird der mit höchster Priorität verwendet (precision im PUB angegeben).

hinweis

Obwohl die im PUB und in run angegebene Precision eine höhere Priorität hat, schlägt der Job fehl, wenn twirling aktiviert ist und das Produkt aus num_randomizations und shots_per_randomization kleiner ist als die Anzahl der Shots, die zur Erreichung der Precision benötigt werden. In diesem Szenario ist EstimatorV2 nicht in der Lage, die Shots auf die angegebenen num_randomizations zu verteilen.

hinweis

Precision skaliert umgekehrt mit dem Verbrauch. Das heißt: Je geringer die Precision, desto mehr QPU-Zeit wird für die Ausführung benötigt.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

observable = SparsePauliOp("Z" * 3)

circuit = random_iqp(3)
circuit.measure_all()

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)

# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})

# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)
<RuntimeJobV2('d8286b00bvlc73d1vn50', 'estimator')>

Alle Fehlerminderung und Fehlerunterdrückung deaktivieren

Du kannst alle Fehlerminderung und -unterdrückung deaktivieren, wenn du beispielsweise eigene Minderungstechniken erforschst. Setze dazu resilience_level = 0.

Beispiel:

from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService

# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()

# Get a backend
backend = service.least_busy(operational=True, simulator=False)

# Define Estimator
estimator = Estimator(backend)

options = estimator.options

# Turn off all error mitigation and suppression
options.resilience_level = 0

Verfügbare Optionen

Die folgende Tabelle dokumentiert Optionen aus der neuesten Version von qiskit-ibm-runtime. Ältere Optionsversionen findest du in der qiskit-ibm-runtime-API-Referenz, indem du eine frühere Version auswählst.

default_shots

Die Gesamtanzahl der Shots, die pro Circuit und Konfiguration verwendet werden sollen.

Auswahlmöglichkeiten: Integer >= 0

Standard: None

default_shots-API-Dokumentation

default_precision

Die Standard-Precision, die für jeden PUB oder run()-Aufruf verwendet werden soll, der keine eigene angibt.

Auswahlmöglichkeiten: Float > 0

Standard: 0.015625 (1 / sqrt(4096))

default_precision-API-Dokumentation

dynamical_decoupling

Einstellungen zur Fehlerminderung durch dynamisches Entkoppeln steuern.

dynamical_decoupling-API-Dokumentation

dynamical_decoupling.enable

Auswahlmöglichkeiten: True, False

Standard: False

dynamical_decoupling.extra_slack_distribution

Auswahlmöglichkeiten: middle, edges

Standard: middle

dynamical_decoupling.scheduling_method

Auswahlmöglichkeiten: asap, alap Standard: alap

dynamical_decoupling.sequence_type

Auswahlmöglichkeiten: XX, XpXm, XY4 Standard: XX

dynamical_decoupling.skip_reset_qubits

Auswahlmöglichkeiten: True, False Standard: False

environment

environment-API-Dokumentation

environment.callback

Aufrufbare Funktion, die die Job ID und das Job result empfängt.

Auswahlmöglichkeiten: None

Standard: None

environment.job_tags

Liste von Tags.

Auswahlmöglichkeiten: None

Standard: None

environment.log_level

Auswahlmöglichkeiten: DEBUG, INFO, WARNING, ERROR, CRITICAL

Standard: WARNING

environment.private

Auswahlmöglichkeiten: True, False

Standard: False

execution

execution-API-Dokumentation

execution.init_qubits

Ob die Qubits für jeden Shot in den Grundzustand zurückgesetzt werden sollen.

Auswahlmöglichkeiten: True, False

Standard: True

execution.rep_delay

Die Verzögerung zwischen einer Messung und dem nachfolgenden Quantencircuit.

Auswahlmöglichkeiten: Wert im Bereich, der von backend.rep_delay_range angegeben wird

Standard: Angegeben durch backend.default_rep_delay

max_execution_time

Begrenzt die Laufzeit eines Jobs in Sekunden. Weitere Details findest du im Leitfaden zur maximalen Ausführungszeit.

Auswahlmöglichkeiten: Ganzzahl in Sekunden im Bereich [1, 10800]

Standard: 10800 (3 Stunden)

resilience

Erweiterte Resilience-Optionen zur Feinabstimmung der Resilience-Strategie.

resilience-API-Dokumentation

resilience.layer_noise_learning

Optionen zum Erlernen von Schichtrauschen.

resilience.layer_noise_learning-API-Dokumentation

resilience.layer_noise_learning.layer_pair_depths

Auswahlmöglichkeiten: list[int] mit 2–10 Werten im Bereich [0, 200]

Standard: (0, 1, 2, 4, 16, 32)

resilience.layer_noise_learning.max_layers_to_learn

Auswahlmöglichkeiten: None, Integer >= 1

Standard: 4

resilience.layer_noise_learning.num_randomizations

Auswahlmöglichkeiten: Integer >= 1

Standard: 32

resilience.layer_noise_learning.shots_per_randomization

Auswahlmöglichkeiten: Integer >= 1

Standard: 128

resilience.layer_noise_model

Auswahlmöglichkeiten: NoiseLearnerResult, Sequence[LayerError]

Standard: None

resilience.measure_mitigation

Auswahlmöglichkeiten: True, False

Standard: True

resilience.measure_noise_learning

Optionen zum Erlernen von Messrauschen.

resilience.measure_noise_learning-API-Dokumentation

resilience.measure_noise_learning.num_randomizations

Auswahlmöglichkeiten: Integer >= 1

Standard: 32

resilience.measure_noise_learning.shots_per_randomization

Auswahlmöglichkeiten: Integer, auto

Standard: auto

resilience.pec_mitigation

Auswahlmöglichkeiten: True, False

Standard: False

resilience.pec

Optionen zur probabilistischen Fehlerauslöschungsminderung.

resilience.pec-API-Dokumentation

resilience.pec.max_overhead

Auswahlmöglichkeiten: None, Integer >= 1

Standard: 100

resilience.pec.noise_gain

Auswahlmöglichkeiten: auto, Float im Bereich [0, 1]

Standard: auto

resilience.zne_mitigation

Auswahlmöglichkeiten: True, False

Standard: False

resilience.zne
resilience.zne.amplifier

Auswahlmöglichkeiten: gate_folding, gate_folding_front, gate_folding_back, pea

Standard: gate_folding

resilience.zne.extrapolated_noise_factors

Auswahlmöglichkeiten: Liste von Floats

Standard: [0, *noise_factors]

resilience.zne.extrapolator

Auswahlmöglichkeiten: Eines oder mehrere von: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

Standard: (exponential, linear)

resilience.zne.noise_factors

Auswahlmöglichkeiten: Liste von Floats; jeder Float >= 1

Standard: (1, 1.5, 2) für PEA, sonst (1, 3, 5)

resilience_level

Wie viel Resilienz gegenüber Fehlern aufgebaut werden soll. Höhere Stufen liefern genauere Ergebnisse auf Kosten längerer Verarbeitungszeiten. Weitere Informationen findest du im Abschnitt Resilience-Stufen im Thema Rauschmanagement.

Auswahlmöglichkeiten: 0, 1, 2

Standard: 1

resilience_level-API-Dokumentation

seed_estimator

Auswahlmöglichkeiten: Integer

Standard: None

seed_estimator

simulator

Optionen, die bei der Simulation eines Backends übergeben werden

simulator-API-Dokumentation

simulator.basis_gates

Auswahlmöglichkeiten: Liste der Basis-Gate-Namen, auf die entfaltet werden soll

Standard: Die Menge aller Basis-Gates, die vom Qiskit Aer-Simulator unterstützt werden

simulator.coupling_map

Auswahlmöglichkeiten: Liste gerichteter Zwei-Qubit-Interaktionen

Standard: None, was keine Konnektivitätsbeschränkungen bedeutet (volle Konnektivität).

simulator.noise_model

Auswahlmöglichkeiten: Qiskit Aer NoiseModel oder seine Darstellung

Standard: None

simulator.seed_simulator

Auswahlmöglichkeiten: Integer

Standard: None

twirling

Twirling-Optionen

twirling-API-Dokumentation

twirling.enable_gates

Auswahlmöglichkeiten: True, False

Standard: False

twirling.enable_measure

Auswahlmöglichkeiten: True, False

Standard: True

twirling.num_randomizations

Auswahlmöglichkeiten: auto, Integer >= 1

Standard: auto

twirling.shots_per_randomization

Auswahlmöglichkeiten: auto, Integer >= 1

Standard: auto

twirling.strategy

Auswahlmöglichkeiten: active, active-circuit, active-accum, all

Standard: active-accum

experimental

Experimentelle Optionen, falls verfügbar.

Funktionskompatibilität

Bestimmte Laufzeitfunktionen können nicht gemeinsam in einem einzigen Job verwendet werden. Klicke auf den entsprechenden Tab für eine Liste der Funktionen, die mit der ausgewählten Funktion nicht kompatibel sind:

Gebrochene Gates

Nicht kompatibel mit:

  • Gate-Twirling
  • PEA
  • PEC
Gate-Folding ZNE

Funktioniert möglicherweise nicht bei der Verwendung von benutzerdefinierten Gates. Nicht kompatibel mit:

  • PEA
  • PEC
Gate-Twirling

Nicht kompatibel mit:

  • Gebrochenen Gates
  • Streckungen

Weitere Hinweise:

  • Messung-Twirling kann nur auf terminale Messungen angewendet werden.
  • Funktioniert nicht mit Nicht-Clifford-Verschränkern.
PEA

Nicht kompatibel mit:

  • Gebrochenen Gates
  • Gate-Folding ZNE
  • PEC
PEC

Nicht kompatibel mit:

  • Gebrochenen Gates
  • Gate-Folding ZNE
  • PEA

Nächste Schritte

Empfehlungen