Einen Job überwachen oder abbrechen
Sieh dir eine Liste deiner Workloads auf der Workloads-Seite an.
Job-Status anzeigen
Gehe zu deiner Workloads-Tabelle und prüfe in der Spalte „Status", ob ein Job abgeschlossen wurde oder fehlgeschlagen ist.
Verbleibendes Kontingent anzeigen
Gehe zu deiner Instanzen-Tabelle und wähle den Tab aus, der dem Plan entspricht, für den du das verbleibende Kontingent anzeigen möchtest. Die insgesamt genutzte Zeit und die verbleibende Zeit in deinem Plan werden angezeigt.
Metriken zur Anzahl der eingereichten Jobs und Workloads anzeigen
Gehe zur Analytics-Seite, um die Gesamtzahl der eingereichten Jobs sowie die Anzahl der Batch-Workloads und Session-Workloads zu sehen. Beachte, dass du die Analytics-Seite nur für Konten anzeigen kannst, die du besitzt oder verwaltest.
Einen Job überwachen
Verwende die Job-Instanz, um den Job-Status zu prüfen oder die Ergebnisse abzurufen, indem du den passenden Befehl aufrufst:
| job.result() | Sieh dir die Job-Ergebnisse unmittelbar nach Abschluss des Jobs an. Job-Ergebnisse sind verfügbar, sobald der Job abgeschlossen ist. Daher ist job.result() ein blockierender Aufruf, bis der Job abgeschlossen ist. |
| job.job_id() | Gibt die ID zurück, die diesen Job eindeutig identifiziert. Um Job-Ergebnisse zu einem späteren Zeitpunkt abzurufen, wird die Job-ID benötigt. Es wird daher empfohlen, die IDs von Jobs zu speichern, die du später abrufen möchtest. |
| job.status() | Prüfe den Job-Status. |
| job = service.job(<job_id>) | Rufe einen zuvor eingereichten Job ab. Dieser Aufruf erfordert die Job-ID. |
Job-Ergebnisse zu einem späteren Zeitpunkt abrufen
Rufe service.job(\<job\_id>) auf, um einen zuvor eingereichten Job abzurufen. Wenn du die Job-ID nicht hast oder mehrere Jobs auf einmal abrufen möchtest – einschließlich Jobs von außer Betrieb genommenen QPUs (Quantenprozessoren) –, rufe stattdessen service.jobs() mit optionalen Filtern auf. Siehe QiskitRuntimeService.jobs.
service.jobs() gibt auch Jobs zurück, die mit dem veralteten Paket qiskit-ibm-provider ausgeführt wurden. Jobs, die mit dem noch älteren (ebenfalls veralteten) Paket qiskit-ibmq-provider eingereicht wurden, sind nicht mehr verfügbar.
Beispiel
Dieses Beispiel gibt die 10 neuesten Runtime-Jobs zurück, die auf my_backend ausgeführt wurden:
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
# This cell is hidden from users
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2
import numpy as np
my_backend = "ibm_torino"
service = QiskitRuntimeService()
# backend = service.backend(my_backend)
backend = service.least_busy()
# Define two circuits, each with one parameter with two parameters.
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.ry(Parameter("a"), 0)
circuit.cx(0, 1)
circuit.h(0)
circuit.measure_all()
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
transpiled_circuit = pm.run(circuit)
params = np.random.uniform(size=(2, 3)).T
sampler_pub = (transpiled_circuit, params)
# Instantiate the new estimator object, then run the transpiled circuit
# using the set of parameters and observables.
sampler = SamplerV2(mode=backend)
job = sampler.run([sampler_pub], shots=4)
print(job.job_id())
d305ck0ocacs73ajagvg
result = job.result()
spans = job.result().metadata["execution"]["execution_spans"]
print(spans)
ExecutionSpans([DoubleSliceSpan(<start='2025-09-09 16:31:16', stop='2025-09-09 16:31:16', size=24>)])
params = np.random.uniform(size=(2, 3))
params
array([[0.2260416 , 0.8747859 , 0.44361995],
[0.94700856, 0.96826017, 0.98426562]])
mask = spans[0].mask(0)
mask
array([[[ True, True, True, True],
[ True, True, True, True]],
[[ True, True, True, True],
[ True, True, True, True]],
[[ True, True, True, True],
[ True, True, True, True]]])
from qiskit_ibm_runtime import QiskitRuntimeService
# Initialize the account first.
service = QiskitRuntimeService()
# Use `limit` to retrieve a specific number of jobs. The default `limit` is 10.
service.jobs(backend_name=my_backend)
Einen Job abbrechen
Du kannst einen Job über das IBM Quantum Platform-Dashboard abbrechen, entweder auf der Workloads-Seite oder auf der Detailseite eines bestimmten Workloads. Klicke auf der Workloads-Seite auf das Überlaufmenü am Ende der Zeile des Workloads und wähle „Abbrechen" aus. Wenn du dich auf der Detailseite eines bestimmten Workloads befindest, verwende das Dropdown-Menü „Aktionen" oben auf der Seite und wähle „Abbrechen" aus.
In Qiskit verwendest du job.cancel(), um einen Job abzubrechen.
Sampler-Ausführungsspannen anzeigen
Die Ergebnisse von SamplerV2-Jobs, die in Qiskit Runtime ausgeführt werden, enthalten Informationen zur Ausführungszeit in ihren Metadaten.
Diese Zeitinformationen können verwendet werden, um obere und untere Zeitstempelgrenzen festzulegen, wann bestimmte Shots auf dem QPU ausgeführt wurden.
Shots werden in ExecutionSpan-Objekten gruppiert, die jeweils eine Startzeit, eine Endzeit und eine Angabe darüber enthalten, welche Shots in der Spanne gesammelt wurden.
Eine Ausführungsspanne legt fest, welche Daten während ihres Zeitfensters ausgeführt wurden, indem sie eine ExecutionSpan.mask-Methode bereitstellt. Diese Methode gibt für einen beliebigen Primitive Unified Block (PUB)-Index eine boolesche Maske zurück, die für alle Shots, die während ihres Zeitfensters ausgeführt wurden, True ist. PUBs werden nach der Reihenfolge indiziert, in der sie dem Sampler-Aufruf übergeben wurden. Wenn ein PUB beispielsweise die Form (2, 3) hat und mit vier Shots ausgeführt wurde, hat die Maske die Form (2, 3, 4). Vollständige Details findest du auf der API-Seite execution_span.
Beispiel:
Um Informationen zu Ausführungsspannen anzuzeigen, sieh dir die Metadaten des von SamplerV2 zurückgegebenen Ergebnisses an, das in Form eines ExecutionSpans-Objekts vorliegt. Dieses Objekt ist ein listenähnlicher Container, der Instanzen von Unterklassen von ExecutionSpan enthält, wie z. B. SliceSpan:
from qiskit.primitives import BitArray
# Get the mask of the 1st PUB for the 0th span.
mask = spans[0].mask(0)
# Decide whether the 0th shot of parameter set (1, 2) occurred in this span.
in_this_span = mask[2, 1, 0]
# Create a new bit array containing only the PUB-1 data collected during this span.
bits = result[0].data.meas
filtered_data = BitArray(bits.array[mask], bits.num_bits)
Ausführungsspannen können gefiltert werden, um Informationen zu bestimmten PUBs anzuzeigen, die anhand ihrer Indizes ausgewählt werden:
# take the subset of spans that reference data in PUBs 0 or 2
spans.filter_by_pub([0, 2])
ExecutionSpans([DoubleSliceSpan(<start='2025-09-09 16:31:16', stop='2025-09-09 16:31:16', size=24>)])
Globale Informationen zur Sammlung von Ausführungsspannen anzeigen:
print("Number of execution spans:", len(spans))
print(" Start of the first span:", spans.start)
print(" End of the last span:", spans.stop)
print(" Total duration (s):", spans.duration)
Number of execution spans: 1
Start of the first span: 2025-09-09 16:31:16.320568
End of the last span: 2025-09-09 16:31:16.865858
Total duration (s): 0.54529
Eine bestimmte Spanne extrahieren und untersuchen:
spans.sort()
print(" Start of first span:", spans[0].start)
print(" End of first span:", spans[0].stop)
print("#shots in first span:", spans[0].size)
Start of first span: 2025-09-09 16:31:16.320568
End of first span: 2025-09-09 16:31:16.865858
#shots in first span: 24
Es ist möglich, dass sich die Zeitfenster verschiedener Ausführungsspannen überschneiden. Das liegt nicht daran, dass ein QPU mehrere Ausführungen gleichzeitig durchgeführt hat, sondern ist ein Artefakt bestimmter klassischer Verarbeitung, die möglicherweise gleichzeitig mit der Quantenausführung stattfindet. Die Garantie besteht darin, dass die referenzierten Daten definitiv in der gemeldeten Ausführungsspanne aufgetreten sind, aber nicht unbedingt, dass die Grenzen des Zeitfensters so eng wie möglich sind.
Nächste Schritte
- Probiere das Tutorial zum Grover-Algorithmus aus.