IBM Quantum Compute (ehemals „ Qiskit Runtime “) Kunde
qiskit_ibm_runtime
Module im Zusammenhang mit dem „ IBM Quantum Compute “-Client (früher „ Qiskit Runtime “).
IBM Quantum Compute (früher „ Qiskit Runtime “) ist eine neue Architektur, die Berechnungen mit vielen Iterationen optimiert. Diese Experimente werden im Rahmen des verbesserten hybriden Quanten-Klassik-Prozesses deutlich schneller ablaufen.
Primitive und Sitzungen
IBM Quantum Compute verfügt über zwei vordefinierte Primitive: Sampler und Estimator. Diese Primitive bieten eine vereinfachte Schnittstelle zur Durchführung grundlegender Aufgaben im Bereich des Quantencomputings und tragen gleichzeitig den neuesten Entwicklungen bei der Quantenhardware und -software Rechnung.
IBM Quantum Compute verfügt außerdem über das Konzept einer Sitzung. Jobs, die innerhalb einer Sitzung übermittelt werden, werden vom Scheduler priorisiert. Eine Sitzung ermöglicht es Ihnen, iterative Abfragen an den Quantencomputer effizienter durchzuführen.
Im Folgenden finden Sie ein Beispiel für die Verwendung von Primitiven innerhalb einer Sitzung:
from qiskit_ibm_runtime import QiskitRuntimeService, Session
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import real_amplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
# Initialize account.
service = QiskitRuntimeService()
# Prepare inputs.
psi = real_amplitudes(num_qubits=2, reps=2)
H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
theta = [0, 1, 1, 2, 3, 5]
# Bell Circuit
qr = QuantumRegister(2, name="qr")
cr = ClassicalRegister(2, name="cr")
qc = QuantumCircuit(qr, cr, name="bell")
qc.h(qr[0])
qc.cx(qr[0], qr[1])
qc.measure(qr, cr)
backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(target=backend.target, optimization_level=1)
bell_isa_circuit = pm.run(qc)
psi_isa_circuit = pm.run(psi)
isa_observables = H1.apply_layout(psi_isa_circuit.layout)
with Session(backend=backend) as session:
# Submit a request to the Sampler primitive within the session.
sampler = Sampler(mode=session)
job = sampler.run([bell_isa_circuit])
pub_result = job.result()[0]
print(f"Counts: {pub_result.data.cr.get_counts()}")
# Submit a request to the Estimator primitive within the session.
estimator = Estimator(mode=session)
estimator.options.resilience_level = 1 # Set options.
job = estimator.run(
[(psi_isa_circuit, isa_observables, theta)]
)
pub_result = job.result()[0]
print(f"Expectation values: {pub_result.data.evs}")Lokaler Testmodus
Mit dem lokalen Testmodus können Sie Ihre Quantenprogramme validieren, bevor Sie sie an ein physisches System senden. Der lokale Testmodus wird aktiviert, wenn bei der Instanziierung eines Primitivs oder einer Sitzung eines der Fake-Backends in qiskit_ibm_runtime.fake_provider oder eine Qiskit Aer-Backend-Instanz verwendet wird. Zum Beispiel:
from qiskit_aer import AerSimulator
from qiskit.circuit.library import real_amplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Session
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the sampler job locally using FakeManilaV2
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(backend=fake_manila)
result = sampler.run([isa_qc]).result()
# Run the sampler job locally using AerSimulator.
# Session syntax is supported but ignored.
aer_sim = AerSimulator()
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
with Session(backend=aer_sim) as session:
sampler = Sampler(mode=session)
result = sampler.run([isa_qc]).result()Backend-Daten
QiskitRuntimeService verfügt außerdem über Methoden wie backend(), backends(), und least_busy(), mit denen Sie nach einem zu verwendenden Ziel-Backend suchen können. Diese Methoden geben eine oder mehrere IBMBackend Instanzen zurück, die Methoden und Attribute enthalten, die das Backend beschreiben.
Zusätzliche Informationen
Kontoeinrichtung
Sie müssen Ihr Konto zunächst einrichten, bevor Sie den Dienst „ IBM Quantum Compute “ nutzen können. Dazu initialisieren Sie eine Instanz QiskitRuntimeService mit Ihren Anmeldedaten. Wenn Sie die Anmeldedaten nicht jedes Mal neu eingeben möchten, können Sie die Methode QiskitRuntimeService.save_account() verwenden, um die Anmeldedaten auf der Festplatte zu speichern.
IBM Quantum Compute ist unter IBM Cloud verfügbar, und Sie können den Kanal mit oder channel="ibm_cloud" angeben channel="ibm_quantum_platform".
IBM Quantum Compute Stellenangebote
Wenn Sie die Methode run() des oder Sampler des verwenden, Estimator um die Primitive aufzurufen, wird eine -Instanz RuntimeJobV2 zurückgegeben. Diese Klasse verfügt über alle grundlegenden Job-Methoden, wie z. B. RuntimeJobV2.status(), RuntimeJobV2.result(), und RuntimeJobV2.cancel().
Protokollierung
qiskit-ibm-runtime verwendet den Logger qiskit_ibm_runtime .
Zwei Umgebungsvariablen können verwendet werden, um die Protokollierung zu steuern:
QISKIT_IBM_RUNTIME_LOG_LEVEL: Gibt die zu verwendende Protokollstufe an.Wenn eine ungültige Stufe eingestellt ist, wird die Protokollstufe auf
WARNINGzurückgesetzt. Die gültigen Protokollebenen sindDEBUG,INFO,WARNING,ERRORundCRITICAL(Groß- und Kleinschreibung wird nicht berücksichtigt). Wenn die Umgebungsvariable nicht gesetzt ist, wird der Level des übergeordneten Loggers verwendet, der ebenfalls standardmäßig aufWARNINGsteht.
QISKIT_IBM_RUNTIME_LOG_FILE: Gibt den Namen der zu verwendenden Protokolldatei an. Falls angegeben,meldungen werden nur in der Datei protokolliert. Andernfalls werden die Meldungen im Standardfehler protokolliert (normalerweise auf dem Bildschirm).
Für fortgeschrittene Anwendungen können Sie den Logger selbst ändern. Zum Beispiel, um den Pegel manuell auf WARNING einzustellen:
import logging
logging.getLogger('qiskit_ibm_runtime').setLevel(logging.WARNING)Klassen
Kolumne „ 1 “ | Kolumne „ 2 “ |
|---|---|
QiskitRuntimeService | Klasse zur Interaktion mit dem Dienst „ IBM Quantum Compute “ (früher „ Qiskit Runtime “). |
Estimator | Alias von EstimatorV2 |
EstimatorV2 | EstimatorV2 Primitive für IBM Quantum Compute (ehemals Qiskit Runtime ). |
Sampler | Alias von SamplerV2 |
SamplerV2 | SamplerV2 Primitive für IBM Quantum Compute (ehemals Qiskit Runtime ). |
Executor | Klasse für das Ausführen von QuantumProgram\s. |
Session | Klasse zum Erstellen einer „ IBM Quantum Compute “-Sitzung (früher „ Qiskit Runtime “). |
Batch | Klasse für die Ausführung von Aufträgen im Stapelverarbeitungsmodus. |
IBMBackend | Backend-Klasse, die eine Schnittstelle zu einem „ IBM Quantum Compute “-Backend (früher „ Qiskit Runtime “) bildet. |
RuntimeJobV2 | Darstellung der Ausführung einer „ IBM Quantum Compute “-Primitive (früher „ Qiskit Runtime “) V2. |
RuntimeEncoder | JSON-Encoder, der vom Dienst „ IBM Quantum Compute “ verwendet wird. |
RuntimeDecoder | JSON-Decoder, der vom Dienst „ IBM Quantum Compute “ verwendet wird. |