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 :
- Du kannst die verfügbaren Optionen einsehen und Optionswerte während oder nach der Estimator-Initialisierung aktualisieren.
- Verwende die
update()-Methode, um Änderungen amoptions-Attribut anzuwenden. - Wenn du keinen Wert für eine Option angibst, erhält sie den speziellen Wert
Unsetund die Serverstandards werden verwendet. - Das
options-Attribut ist vom Python-Typdataclass. Du kannst die eingebaute Methodeasdictverwenden, 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.
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:
- Wenn der PUB precision angibt, wird dieser Wert verwendet.
- Wenn das precision-Schlüsselwortargument in
runangegeben ist, wird dieser Wert verwendet. - Wenn
twirlingaktiviert ist (standardmäßig True), wird das Produkt ausnum_randomizationsundshots_per_randomizationverwendet, wie in dentwirling-Optionen angegeben. - Wenn
estimator.options.default_shotsangegeben ist, wird dieser Wert zur Steuerung der Datenmenge verwendet. - Wenn
estimator.options.default_precisionangegeben 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).
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.
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_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))
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.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.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.layer_noise_learning
Optionen zum Erlernen von Schichtrauschen.
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.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.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
seed_estimator
simulator
Optionen, die bei der Simulation eines Backends übergeben werden
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.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
- Weitere Details zu den
EstimatorV2-Methoden findest du in der Estimator API-Referenz. - Entscheide, in welchem Ausführungsmodus du deinen Job ausführen möchtest.
- Erfahre mehr über das Rauschmanagement mit Estimator.