Zum Hauptinhalt springen
Dieses Projekt befindet sich in der Beta-Phase. Einen Fehler gefunden? GitHub Issue erstellen. Frage oder Idee? In Discussions fragen — wir freuen uns über dein Feedback!
Wie ist die Übersetzungsqualität auf dieser Seite?

Sampler-Schnellstart

Die Kernaufgabe des Samplers ist das Sampling des Ausgangsregisters aus der Ausführung eines oder mehrerer Quantum Circuits. Dynamische Circuits und parametrisierte Circuits werden als Eingabe akzeptiert (wenn parametrisierte Circuits übergeben werden, müssen auch die Parameterwerte angegeben werden). Sampler unterstützt außerdem integriertes Dynamical Decoupling und Twirling zur Fehlerunterdrückung.

Die Schritte in dieser Anleitung beschreiben, wie du den Sampler einrichtest, welche Optionen du zur Konfiguration nutzen kannst und wie du ihn in einem Programm aufrufst.

Neue Sampler-Implementierung

Neue Implementierungen der Qiskit SamplerV2- und EstimatorV2-Schnittstellen wurden in qiskit-ibm-runtime v0.50.0 eingeführt. Diese clientseitigen Primitives führen den Großteil der Vor- und Nachverarbeitung auf der Client-Seite aus und delegieren die Ausführung an das Executor-Primitive. Die Ausführung auf der Client-Seite bietet mehr Transparenz, schnelleres Debugging-Feedback und feinere Kontrolle.

Da sie dieselbe API implementieren, sind diese clientseitigen Primitives weitgehend ein Drop-in-Ersatz für die bisherigen serverseitigen Primitives, wobei sich nur die Import-Anweisung ändert. Weitere Informationen findest du unter Migration von serverseitigen zu clientseitigen Sampler- und Estimator-Primitives.

Paketversionen

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

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0

Schritte zur Verwendung des Sampler-Primitives​

1. Konto initialisieren​

Du musst zuerst dein Konto initialisieren. Anschließend kannst du die QPU auswählen, die du verwenden möchtest.

Folge den Schritten im Thema IBM Cloud-Konto einrichten, falls du noch kein Konto eingerichtet hast.

Fraktionale Gates

Um die neu unterstützten fraktionalen Gates zu verwenden, setze use_fractional_gates=True beim Anfordern eines Backends von einer QiskitRuntimeService-Instanz. Zum Beispiel:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

Dies ist ein experimentelles Feature und kann sich in Zukunft ändern.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_runtime import QiskitRuntimeService

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

2. Einen Circuit erstellen​

Du benötigst mindestens einen Circuit als Eingabe für das Sampler-Primitive.

import numpy as np
from qiskit.circuit.library import efficient_su2

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

Der Circuit und das Observable müssen so transformiert werden, dass sie nur Anweisungen verwenden, die von der QPU unterstützt werden (als Instruction Set Architecture (ISA) Circuits bezeichnet). Verwende den Transpiler dafür.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. Den IBM Quantum Sampler initialisieren​

Wenn du den Sampler initialisierst, verwende den Parameter mode, um den gewünschten Ausführungsmodus anzugeben. Mögliche Werte sind batch, session oder backend-Objekte für den Batch-, Session- bzw. Job-Ausführungsmodus. Weitere Informationen findest du unter Einführung in die IBM Quantum Compute Service-Ausführungsmodi. Beachte, dass Nutzer des Open Plans keine Session-Jobs einreichen können.

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler

sampler = Sampler(mode=backend)

4. Sampler aufrufen und Ergebnisse abrufen​

Rufe anschließend die Methode run() auf, um die Ausgabe zu erzeugen. Der Circuit und optionale Parameterwertemengen werden als Primitive Unified Bloc (PUB)-Tupel übergeben.

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: dab7lb6rrl7c7386gjgg
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1110001000100100100111011000001001000101010000001100010010110011001100110111100000000110001000011001101000110100101110101010011', '1110101100010101010001010111111011000110011010100101001100110101010010101010101110001010100100000000011110101101011000100000100', '1100110011101000110000000100110111101010110001100010111100001101100001010100111001101010101110000101010001001101010101001000100', '1011001001011000000101010111111010011101001111010100001011110011000101110101011001100110011011110011101010000111001111110110011', '1110111011011111101011110101110101010110011001100110101111100100011101100011011100101100101001001111110101111010101110111111011', '0101001110001110010001010100010111011001000000011110000000000001110000010010101101011001000100000001011011101111010010110111110', '1101101001000100010000110001000101010010101011000011000011001010000111100110010101010110100110011010101100001011100110001111011', '1000110011111111100010101010101111001001100001110111101001100111010101010111110110011000110011010010010000100000100010010010101', '0101010100110011110011010000000100011001111100101100101100101111101110100001101101111010100011011000010011111010001100110000010', '0010000111011100000000110000001110001100010011000100101110111111100011001100011001101010011111111100000000011100101101111010100']

Nächste Schritte​

Empfehlungen