Sampler-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 Sampler-Primitiv anzupassen. Dieser Abschnitt konzentriert sich darauf, wie du Qiskit Runtime Primitiv-Optionen festlegst. Obwohl die Schnittstelle der run()-Methode der Primitive über alle Implementierungen hinweg gleich ist, gilt das für die Optionen nicht. Weitere Informationen zu den Optionen von qiskit.primitives.BackendSamplerV2 und qiskit_aer.primitives.SamplerV2 findest du in den entsprechenden API-Referenzen.
Sampler-Optionen festlegen
Du kannst Optionen bei der Initialisierung des Sampler festlegen, nach der Initialisierung oder die Optionen nach der Initialisierung aktualisieren. Anleitungen zur Verwendung dieser Techniken findest du im Thema Einführung in Optionen.
Außerdem kannst du den shots-Wert in der run()-Methode festlegen, wie im folgenden Abschnitt beschrieben.
Run()-Methode
Die einzigen Werte, die du an run() übergeben kannst, sind die in der Schnittstelle definierten, also shots. Dies überschreibt für den aktuellen Lauf jeden Wert, der für default_shots festgelegt wurde.
# 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 SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d8286680bvlc73d1vmu0', 'sampler')>
Sonderfälle
Shots
Die Methode SamplerV2.run akzeptiert zwei Argumente: eine Liste von PUBs, von denen jeder einen PUB-spezifischen Wert für Shots angeben kann, sowie ein shots-Schlüsselwortargument. Diese Shot-Werte sind Teil der Sampler-Ausführungsschnittstelle und unabhängig von den Optionen des Runtime Sampler. Sie haben Vorrang vor allen als Optionen angegebenen Werten, um die Sampler-Abstraktion zu erfüllen.
Wenn shots jedoch weder durch einen PUB noch im Run-Schlüsselwortargument angegeben wird (oder wenn alle None sind), wird der Shot-Wert aus den Optionen verwendet, insbesondere default_shots.
Zusammengefasst gilt für einen bestimmten PUB folgende Prioritätsreihenfolge für die Angabe von Shots im Sampler:
- Wenn der PUB Shots angibt, wird dieser Wert verwendet.
- Wenn das
shots-Schlüsselwortargument inrunangegeben ist, wird dieser Wert verwendet. - Wenn
twirlingaktiviert ist (standardmäßig True), wird das Produkt ausnum_randomizationsundshots_per_randomizationverwendet, wie in dentwirling-Optionen angegeben. - Wenn
sampler.options.default_shotsangegeben ist, wird dieser Wert verwendet.
Wenn Shots also an allen möglichen Stellen angegeben werden, wird derjenige mit dem höchsten Vorrang verwendet (Shots, die im PUB angegeben sind).
Obwohl im PUB und in run angegebene Shots höhere Priorität haben, schlägt der Job fehl, wenn twirling aktiviert ist und das Produkt aus num_randomizations und shots_per_randomization kleiner als der shots-Wert ist. In diesem Szenario ist SamplerV2 nicht in der Lage, die Shots auf die angegebenen num_randomizations aufzuteilen.
Beispiel:
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})
# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000
# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d82868ugbeec73alfa80', 'sampler')>
Verfügbare Optionen
Die folgende Tabelle dokumentiert Optionen aus der aktuellen 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 pro Konfiguration verwendet werden.
Auswahlmöglichkeiten: Ganzzahl >= 0
Standard: None
dynamical_decoupling
Einstellungen zur Fehlerminderung durch dynamisches Entkoppeln (Dynamical Decoupling) 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.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
Gibt an, 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 durch backend.rep_delay_range angegeben wird
Standard: Angegeben durch backend.default_rep_delay
execution.meas_type
Auswahlmöglichkeiten: classified, kerneled, avg_kerneled
Standard: classified
max_execution_time
Begrenzt die maximale 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)
simulator
Optionen, die bei der Simulation eines Backends übergeben werden
simulator.basis_gates
Auswahlmöglichkeiten: Liste der Namen der Basis-Gates, auf die entfaltet werden soll
Standard: Der Satz aller Basis-Gates, die vom Qiskit Aer Simulator unterstützt werden
simulator.coupling_map
Auswahlmöglichkeiten: Liste gerichteter Zwei-Qubit-Interaktionen
Standard: None, d. h. keine Konnektivitätsbeschränkungen (vollständige Konnektivität).
simulator.noise_model
Auswahlmöglichkeiten: Qiskit Aer NoiseModel oder seine Darstellung
Standard: None
simulator.seed_simulator
Auswahlmöglichkeiten: Ganzzahl
Standard: None
twirling
Twirling-Optionen
twirling.enable_gates
Auswahlmöglichkeiten: True, False
Standard: False
twirling.enable_measure
Auswahlmöglichkeiten: True, False
Standard: False
twirling.num_randomizations
Auswahlmöglichkeiten: auto, Ganzzahl >= 1
Standard: auto
twirling.shots_per_randomization
Auswahlmöglichkeiten: auto, Ganzzahl >= 1
Standard: auto
twirling.strategy
Auswahlmöglichkeiten: active, active-circuit, active-accum, all
Standard: active-accum
experimental
Experimentelle Optionen, sofern verfügbar.
Feature-Kompatibilität
Bestimmte Runtime-Features können nicht zusammen in einem einzigen Job verwendet werden. Klicke auf den entsprechenden Tab, um eine Liste der Features zu sehen, die mit dem ausgewählten Feature inkompatibel sind:
Dynamische Circuits
Inkompatibel mit:
- Dynamical Decoupling
Weitere Hinweise:
- Gate-Twirling kann auf dynamische Circuits angewendet werden, jedoch nur auf Gates, die sich nicht in bedingten Blöcken befinden. Measurement-Twirling kann nur auf abschließende Messungen angewendet werden.
- Kompatibel mit fraktionalen Gates bei Verwendung von
qiskit-ibm-runtimev0.42.0 oder neuer.
Dynamical Decoupling
Inkompatibel mit:
- Dynamischen Circuits
Fraktionale Gates
Inkompatibel mit:
- Gate-Twirling
Kompatibel mit dynamischen Circuits bei Verwendung von qiskit-ibm-runtime v0.42.0 oder neuer.
Gate-Twirling
Inkompatibel mit:
- Fraktionalen Gates
- Stretches
Weitere Hinweise:
- Gate-Twirling kann auf dynamische Circuits angewendet werden, jedoch nur auf Gates, die sich nicht in bedingten Blöcken befinden.
- Measurement-Twirling kann nur auf abschließende Messungen angewendet werden.
- Measurement-Twirling ist nicht kompatibel mit der
store-Anweisung. - Funktioniert nicht mit Nicht-Clifford-Entanglern.
Nächste Schritte
- Lies den Leitfaden Einführung in Optionen.
- Weitere Details zu den
SamplerV2-Methoden findest du in der Sampler-API-Referenz. - Entscheide, in welchem Ausführungsmodus du deinen Job ausführen möchtest.
- Informiere dich über das Rauschmanagement mit Sampler.