Zum Hauptinhalt springen

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:

  1. Wenn der PUB Shots angibt, wird dieser Wert verwendet.
  2. Wenn das shots-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 sampler.options.default_shots angegeben 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).

hinweis

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

default_shots-API-Dokumentation

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-API-Dokumentation

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

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)

max_execution_time-API-Dokumentation

simulator

Optionen, die bei der Simulation eines Backends übergeben werden

simulator-API-Dokumentation

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-API-Dokumentation

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-runtime v0.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

Empfehlungen