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

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

Empfehlungen