Zum Hauptinhalt springen

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 Paketversionen entwickelt. Wir empfehlen, diese oder neuere Versionen zu verwenden.

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime

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 zur Berechnung des Erwartungswerts 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.

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.

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: 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