Auftrag überwachen oder abbrechen
In dieser Anleitung wird erläutert, wie Sie den Status von Aufträgen überwachen, Nutzungsinformationen einsehen und Aufträge abbrechen können. Sie können auf diese Informationen sowohl über IBM Quantum® Platform als auch programmgesteuert mithilfe von Qiskit zugreifen.
Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt. Wir empfehlen, diese Versionen oder neuere zu verwenden.
qiskit-ibm-runtime~=0.46.1
Einen Auftrag überwachen
Mit diesen Methoden können Sie den Status Ihrer übermittelten Aufträge überprüfen, Ergebnisse abrufen und Details zum Auftrag und dessen Ausführung einsehen.
Die Job-Instanz bietet verschiedene Methoden zur Überwachung:
Methode | Beschreibung |
|---|---|
job.status() | Aktuellen Auftragsstatus prüfen |
job.job_id() | Die eindeutige Auftrags-ID abrufen |
job.result() | Auftragsergebnisse abrufen (blockierender Aufruf bis zum Abschluss) |
job.wait_for_final_state() | Blockieren, bis der Auftrag einen Endzustand erreicht hat |
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Retrieve a job by ID
job = service.job("<job_id>")
# Get job ID (useful for saving for later retrieval)
print(f"Job ID: {job.job_id()}")
# Check current status
print(f"Status: {job.status()}")
# Wait for job to complete (blocking call)
job.wait_for_final_state()
print("Job completed")
# Get results
results = job.result()
print(results)Wechseln Sie zur Seite „Workloads“ und sehen Sie in der Spalte „Status“ nach. Ihr Beschäftigungsstatus wird wie folgt angezeigt:
- Ausstehend : Der Job wartet darauf, auf einer QPU ausgeführt zu werden
- Wird ausgeführt : Der Auftrag wird derzeit ausgeführt
- Abgeschlossen : Auftrag erfolgreich abgeschlossen
- Fehlgeschlagen : Bei dem Auftrag ist ein Fehler aufgetreten
- Abgebrochen : Der Benutzer hat den Auftrag abgebrochen
Klicken Sie auf den Namen des Auftrags oder auf die entsprechende Zeile, um die Detailansicht zu öffnen, in der Sie Informationen wie die Ergebnisse und etwaige Fehlermeldungen einsehen können.
Warum ein Auftrag den Status „In Bearbeitung“ behält
Möglicherweise stellen Sie fest, dass ein Job (entweder im Job-Modus oder im Batch-Modus), von dem Sie erwarten, dass er nur wenige Sekunden dauert, viel länger im Status „In Bearbeitung “ (in RUNNING Qiskit als bezeichnet) verbleibt. Das ist normal und bedeutet nicht, dass der Job die gesamte Zeit in Anspruch nimmt. Das liegt daran, wie Jobs auf einer QPU eingeplant werden:
- Jeder Auftrag erfordert eine klassische Vorverarbeitung, bevor er auf der QPU ausgeführt werden kann. Ein Auftrag wechselt in den Status „In Bearbeitung (
RUNNING)“, sobald diese klassische Verarbeitung beginnt – nicht erst, wenn die Ausführung auf der QPU startet. - Der Großteil dieser klassischen Verarbeitung läuft parallel ab, sodass mehrere Aufträge gleichzeitig in Bearbeitung sein können.
- Auf der QPU kann jedoch jeweils nur ein Job ausgeführt werden. Wenn mehrere Jobs ihre klassische Verarbeitung abgeschlossen haben und zur Ausführung bereit sind, müssen sie warten, bis sie an der Reihe sind, die QPU zu nutzen. Dies wird als QPU-Konflikt bezeichnet. Bei hoher Auslastung kann ein Job deutlich länger im Status „In Bearbeitung“ verbleiben als die wenigen Sekunden an QPU-Zeit, die er tatsächlich benötigt.
- Zu Konflikten kann es auch kommen, wenn auf der QPU eine Systemwartungsaufgabe, wie beispielsweise eine Kalibrierung, ausgeführt wird. Ihr Auftrag bleibt im Status „In Bearbeitung“, bis die Wartungsaufgabe abgeschlossen ist und die QPU wieder verfügbar ist.
Aus diesem Grund entspricht die tatsächlich verstrichene Zeit, die ein Auftrag im Status „In Bearbeitung“ verbringt, nicht seiner Auslastung. Sowohl die geschätzte Nutzungsdauer als auch die maximale Ausführungszeit basieren ausschließlich auf der Zeit, in der die QPU für die Ausführung Ihres Auftrags reserviert ist, und berücksichtigen daher nicht die oben beschriebene klassische Multithread-Verarbeitung. Eine lange Bearbeitungsdauer führt nicht zu einer Erhöhung Ihrer ausgewiesenen Nutzung oder Ihrer Kosten.
Der Sitzungsmodus ist anders
Das oben beschriebene Verhalten gilt sowohl für den Job-Modus als auch für den Batch-Modus. Im Sitzungsmodus hat der Benutzer während der aktiven Sitzungsdauer exklusiven Zugriff auf das Backend, und es können keine anderen Aufträge ausgeführt werden, einschließlich Kalibrierungsaufträge. Daher treten etwaige QPU-Konflikte ausschließlich zwischen den Jobs Ihrer eigenen Sitzung auf. Da die QPU-Kapazität zudem für die Dauer der Sitzung reserviert ist, wird die Sitzungsnutzung als die verstrichene Zeit gemessen, während die Sitzung aktiv ist – unabhängig davon, ob Jobs gerade aktiv ausgeführt werden. Weitere Informationen finden Sie unter „Workload-Nutzung “.
Verbleibende Nutzung anzeigen
Verfolgen Sie nach, wie viel von Ihrem Nutzungskontingent noch übrig ist.
Verwenden Sie die Methode service.usage() , um Nutzungsinformationen für Ihre derzeit aktive Instanz abzurufen.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Get usage information for the current active instance
usage = service.usage()
print(usage)Rufen Sie die Seite „Instanzen“ auf und wählen Sie die Registerkarte aus, die dem Tarif zugeordnet ist, den Sie überprüfen möchten. Die insgesamt verbrauchte Zeit und die verbleibende Gesamtzeit Ihres Tarifs werden angezeigt.
Stellenkennzahlen anzeigen
Verschaffen Sie sich einen Überblick über Ihre Job-Einreichungen, einschließlich der Kennzahlen zur Auslastung von Batches und Sitzungen.
Verwenden Sie die Methode service.jobs() mit Filtern, um Informationen zu Ihren übermittelten Aufträgen abzurufen, z. B. wie viele Aufträge übermittelt wurden, welchen Status sie haben und wann sie erstellt wurden. Das folgende Beispiel ruft alle in den letzten sieben Tagen übermittelten Jobs ab und berechnet die Gesamtauslastung dieser Jobs.
from datetime import datetime, timedelta
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Retrieve all jobs in the last 7 days
seven_days_ago = datetime.now() - timedelta(days=7)
jobs = service.jobs(limit=None, created_after=seven_days_ago)
# To retrieve all jobs in a Session or Batch, use the session_id filter
# jobs = service.jobs(session_id="<session id>")
total_usage = 0
for job in jobs:
total_usage += job.usage()
print(f"{len(jobs)} jobs were submitted in the last 7 days.")
print(f"Total usage was {total_usage} seconds")Rufen Sie die Seite „Analytics“ auf, um Daten wie die folgenden anzuzeigen und herunterzuladen:
- Gesamtnutzung
- Nutzung, gefiltert nach Instanz, Quantencomputer und Benutzer
- Zählung der Arbeitslasten nach Jobs, Batches und Sitzungen
Hinweis : Sie können nur auf die Analytics-Seite für Konten zugreifen, deren Inhaber Sie sind oder die Sie verwalten.
Job-Ergebnisse zu einem späteren Zeitpunkt abrufen
Sie können Job-IDs speichern und die Ergebnisse später abrufen, auch nachdem Sie Ihre Sitzung beendet haben.
Wenn Sie die Auftrags-ID beim Absenden des Auftrags gespeichert haben, service.job(<job_id>) können Sie sie später über abrufen. Wenn Sie die Job-ID nicht haben oder mehrere Jobs gleichzeitig abrufen möchten (einschließlich Jobs von stillgelegten QPUs), verwenden Sie stattdessen service.jobs() mit optionalen Filtern.
Informationen zu den verfügbaren Filtern finden Sie in der QiskitRuntimeService.jobs API-Dokumentation.
Dieses Beispiel veranschaulicht, wie man die zuletzt auf einem bestimmten Backend ausgeführten Ergebnisse abruft.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Uncomment the next line to retrieve a specific job by ID
# job = service.job("<job_id>")
# Optionally retrieve multiple jobs with filters
# Use `limit` to retrieve a specific number of jobs. The default `limit` is 10.
my_backend = "<your-backend>"
recent_jobs = service.jobs(backend_name=my_backend, limit=10)
print(f"Retrieved {len(recent_jobs)} recent jobs from {my_backend}\n")
# Get results from all jobs
for job in recent_jobs:
print(f"Job ID: {job.job_id()}")
print(f"Status: {job.status()}")
# Retrieve results if the job is complete
if str(job.status()) == "DONE":
try:
results = job.result()
print(f"Results: {results}")
except Exception as e:
print(f"Error retrieving results: {e}")
else:
print("Results: Not available (job still running or failed)")
print()- Rufen Sie die Seite „Workloads“ auf.
- Nutzen Sie die Such- oder Filteroptionen, um Ihren Auftrag nach Name, Datum oder Status zu finden.
- Klicken Sie auf den Auftrag, um dessen Ergebnisse und Details anzuzeigen.
Backend-Eigenschaften abrufen
Mit können Sie Backend-Eigenschaften, einschließlich Fehlerquoten, zum Zeitpunkt der Auftragsausführung job.properties() abrufen.
Dieses Beispiel veranschaulicht, wie man Backend-Eigenschaften abruft, die zum Zeitpunkt der Ausführung eines Jobs aktuell waren, darunter die Zeiten für „ “ und „ “ sowie die Fehlerraten für ein bestimmtes Qubit (0).
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Retrieve a specific job by ID
job = service.job("<job_id>")
print(f"Job ID: {job.job_id()}")
print(f"Backend: {job.backend}\n")
# Fetch backend properties at the time of job execution
properties = job.properties()
if properties:
print("Backend Properties at Job Execution Time:")
print("=" * 60)
# Get T1 (relaxation time) for qubit 0
t1 = properties.t1(0)
print(f"Qubit 0 T1 (relaxation time): {t1}")
# Get T2 (dephasing time) for qubit 0
t2 = properties.t2(0)
print(f"Qubit 0 T2 (dephasing time): {t2}")
# Get readout error for qubit 0
readout_error = properties.readout_error(0)
print(f"Qubit 0 readout error: {readout_error}")
# Get all properties for a specific qubit
print("All properties for qubit 0:")
qubit_props = properties.qubit_property(0)
for prop_name, prop_value in qubit_props.items():
print(f" {prop_name}: {prop_value}")
else:
print("No properties available for this job")service.jobs() gibt auch Aufträge zurück, die mit dem veralteten Paket qiskit-ibm-provider ausgeführt wurden. Aufträge, die mit dem älteren (ebenfalls veralteten) Paket qiskit-ibmq-provider eingereicht wurden, sind nicht mehr verfügbar.
Sie können die Kalibrierungsdaten für das Backend sowohl zum Zeitpunkt der Auftragsausführung als auch bei der Auftragserstellung einsehen.
- Zur Seite „Workloads“ wechseln
- Klicken Sie auf eine Arbeitslast, um deren Detailseite zu öffnen
- Klicken Sie unter „Quantencomputer“ auf „Kalibrierungsverlauf anzeigen“
- Verwenden Sie das Dropdown-Menü, um die Anzeige der Daten von „Zu Beginn der Jobausführung“ auf „Bei der Joberstellung“ umzustellen
Job abbrechen
Einen Auftrag abbrechen, der in der Warteschlange steht oder gerade ausgeführt wird. Sobald ein Auftrag abgebrochen wurde, kann er nicht mehr fortgesetzt werden.
Verwenden Sie die Methode job.cancel() , um einen Auftrag programmgesteuert abzubrechen.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Retrieve the job
job = service.job("<job_id>")
# Cancel the job
job.cancel()
print(f"Job {job.job_id()} has been canceled")- Aus der Tabelle „Workloads “: Klicken Sie auf das Überlaufmenü am Ende der Zeile des Workloads, den Sie abbrechen möchten, und wählen Sie „Abbrechen“ aus.
- Auf der Seite mit den Auftragsdetails : Klicken Sie auf den Auftrag, um dessen Detailseite zu öffnen, nutzen Sie das Dropdown-Menü „Aktionen“ oben auf der Seite und wählen Sie „Abbrechen“ aus.
Nächste Schritte
- Weitere Methoden zur Auftragsverwaltung finden Sie in der
QiskitRuntimeServiceAPI-Referenz. - Machen Sie sich mit den Ausführungsmodi vertraut, um die verschiedenen Arten von Batch- und Session-Workloads zu verstehen.