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 diesem Thema beschreiben, wie du den Sampler einrichtest, welche Optionen du zur Konfiguration nutzen kannst und wie du ihn in einem Programm aufrufst.
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
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
Schritte zur Verwendung des Sampler Primitive
1. Konto initialisieren
Da Qiskit Runtime ein verwalteter Dienst ist, musst du zuerst dein Konto initialisieren. Anschließend kannst du den QPU auswählen, den du zur Berechnung des Erwartungswerts verwenden möchtest.
Folge den Schritten im Thema IBM Cloud-Konto einrichten, falls du noch kein Konto eingerichtet hast.
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.
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 den 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 muss so transformiert werden, dass er nur Anweisungen verwendet, die vom 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 Qiskit Runtime 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 Batch-, Session- und Job-Ausführungsmodus. Weitere Informationen findest du unter Einführung in die Qiskit Runtime-Ausführungsmodi. Beachte, dass Nutzer des Open Plans keine Session-Jobs einreichen können.
from qiskit_ibm_runtime import SamplerV2 as 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: d82863mgbeec73alf9sg
>>> 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: {pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1100110011001011111111111010000010001010100100011000001011001101000110011000110100100100101010111001110100100000000011111100000', '0101001001010000100111000110110001001101010110110000110111101110001100000001000001111111101110000000010011111100100110001101000', '0111111110011011000011110111010111101100110010001010010001100000000100000000001010101010111010110000001100100001010110000101000', '0000110011001100110011101100000111011001110100001100001100110111010100101010001010000011000111001010101111110110100110001010000', '0011110011100001100110111001000011011111011110111100000110001000111011101101000110011011101011001110110000010010001100100011001', '1010001000010101011100101010101001101000100010011011100110010111010001110111110010100010111010011010110011001101100110010000010', '0001110010001011001100010000000001001101001110101100110011101111100100100110110010101000011010101000101011101011010100000101010', '1110100100001100110010000010011010111000001010110010111111011010010100110011100101110011101111100001010011100110011000101001001', '1101011100110101011001010100011001110100001011110101101110111011011001100110001011000010001100100011000000110101011100111111000', '1101000110000000101010000000110000011000000000010110011001001000001110101110010111011010101100011000100100110000000000000011001']
Nächste Schritte
- Lerne, wie du lokal testest, bevor du auf Quantencomputern ausführst.
- Sieh dir detaillierte Beispiele an.
- Übe mit Primitives, indem du die Lektion zu Kostenfunktionen in IBM Quantum Learning durcharbeitest.
- Lerne, wie du lokal transpilierst, im Abschnitt Transpile.
- Probiere den Leitfaden Transpiler-Einstellungen vergleichen aus.
- Lerne, wie du die Primitive-Optionen verwendest.
- Sieh dir die API für Sampler-Optionen an.
- Lies Migration zu V2 Primitives.