Monitorowanie lub anulowanie zadania
Ten przewodnik wyjaśnia, jak monitorować status zadania, przeglądać informacje o wykorzystaniu i anulować zadania. Możesz uzyskać dostęp do tych informacji zarówno przez IBM Quantum® Platform, jak i programowo za pomocą Qiskit.
Wersje pakietów
Kod na tej stronie został opracowany przy użyciu następujących wymagań. Zalecamy korzystanie z tych wersji lub nowszych.
qiskit-ibm-runtime~=0.46.1
Monitoruj zadanie
Użyj tych metod, aby sprawdzić status wysłanych zadań, pobrać wyniki i wyświetlić szczegóły dotyczące zadania oraz jego wykonania.
- Monitor a job with Qiskit
- Monitor a job on IBM Quantum Platform
Instancja zadania udostępnia kilka metod monitorowania:
| Method | Description |
|---|---|
job.status() | Check the current job status |
job.job_id() | Get the unique job identifier |
job.result() | Retrieve job results (blocking call until complete) |
job.wait_for_final_state() | Block until the job reaches a terminal state |
Przejdź do strony Obciążenia i sprawdź kolumnę Status. Status twojego zadania będzie jednym z poniższych:
- Pending: zadanie oczekuje na uruchomienie na QPU
- In progress: zadanie jest właśnie wykonywane
- Completed: zadanie zakończyło się pomyślnie
- Failed: podczas zadania wystąpił błąd
- Canceled: użytkownik anulował zadanie
Kliknij nazwę zadania lub wiersz, aby otworzyć widok szczegółowy, w którym możesz zobaczyć informacje takie jak wyniki i wszelkie komunikaty o błędach.
Dlaczego zadanie pozostaje w statusie „In progress”
Możesz zauważyć, że zadanie (korzystające z trybu zadania lub trybu wsadowego), które według oczekiwań powinno trwać zaledwie kilka sekund, pozostaje w statusie In progress (nazywanym RUNNING w Qiskit) znacznie dłużej. Jest to normalne i nie oznacza, że zadanie zużywa cały ten czas jako wykorzystanie. Dzieje się tak z powodu sposobu, w jaki zadania są planowane na QPU:
-
Każde zadanie wymaga klasycznego przetwarzania wstępnego, zanim będzie mogło zostać uruchomione na QPU. Zadanie przechodzi do statusu In progress (
RUNNING) w momencie rozpoczęcia tego klasycznego przetwarzania — nie wtedy, gdy zaczyna się wykonywać na QPU. -
Większość tego klasycznego przetwarzania odbywa się równolegle, więc wiele zadań może być jednocześnie w statusie In progress.
-
Jednak tylko jedno zadanie na raz może być wykonywane na QPU. Gdy kilka zadań zakończy klasyczne przetwarzanie i będzie gotowych do wykonania, muszą czekać na swoją kolej do QPU. Nazywa się to rywalizacją o QPU (QPU contention). Gdy rywalizacja jest wysoka, zadanie może pozostawać w statusie In progress zauważalnie dłużej niż kilka sekund czasu QPU, których faktycznie potrzebuje.
-
Rywalizacja może również wystąpić, gdy na QPU trwa zadanie konserwacji systemu, takie jak kalibracja. Twoje zadanie pozostaje w statusie In progress, dopóki zadanie konserwacji się nie zakończy i QPU nie stanie się dostępne.
Z tego powodu upływający czas rzeczywisty, który zadanie spędza w statusie In progress, nie jest tym samym co jego wykorzystanie. Zarówno szacowane wykorzystanie, jak i maksymalny czas wykonania opierają się wyłącznie na czasie, w którym QPU jest zablokowane do wykonania twojego zadania, a więc wykluczają opisane powyżej wielowątkowe przetwarzanie klasyczne. Długi czas w statusie In progress nie zwiększa zgłaszanego wykorzystania ani kosztu.
Tryb Session jest inny
Poprzednio opisane zachowanie dotyczy trybu zadania i trybu wsadowego. W trybie Session, w oknie aktywności sesji, użytkownik ma wyłączny dostęp do backendu i żadne inne zadania nie mogą być wykonywane, w tym zadania kalibracyjne. Dlatego jakakolwiek rywalizacja o QPU zachodzi tylko wśród twoich własnych zadań w ramach sesji. Ponadto, ponieważ pojemność QPU jest zarezerwowana na czas trwania sesji, wykorzystanie sesji jest mierzone jako czas, który upłynął, gdy sesja pozostaje aktywna, niezależnie od tego, czy zadania są aktywnie wykonywane. Zobacz Wykorzystanie obciążenia, aby dowiedzieć się więcej.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
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)
Sprawdź pozostałe wykorzystanie
Śledź, ile pozostało z limitu wykorzystania twojego planu.
- Check usage with Qiskit
- View usage on IBM Quantum Platform
Użyj metody service.usage(), aby uzyskać informacje o wykorzystaniu dla twojej aktualnie aktywnej instancji.
Przejdź do strony Instancje i wybierz kartę odpowiadającą planowi, który chcesz sprawdzić. Wyświetlany jest całkowity czas wykorzystany oraz całkowity czas pozostały w ramach planu.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Get usage information for the current active instance
usage = service.usage()
print(usage)
Sprawdź metryki zadań
Uzyskaj przegląd swoich zgłoszonych zadań, w tym metryki obciążeń wsadowych i sesyjnych.
- Get job metrics with Qiskit
- View job metrics on IBM Quantum Platform
Użyj metody service.jobs() z filtrami, aby pobrać informacje o wysłanych zadaniach, takie jak liczba wysłanych zadań, ich statusy i czas utworzenia. Poniższy przykład pobiera wszystkie zadania wysłane w ciągu ostatnich siedmiu dni i oblicza całkowite wykorzystanie tych zadań.
Przejdź do strony Analityka, aby zobaczyć i pobrać dane, takie jak:
- Całkowite wykorzystanie
- Wykorzystanie filtrowane według instancji, komputera kwantowego i użytkownika
- Liczba obciążeń typu zadanie, wsad i sesja
Uwaga: możesz uzyskać dostęp do strony Analityka tylko dla kont, które posiadasz lub którymi zarządzasz.
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")
Pobierz wyniki zadania w późniejszym czasie
Możesz zapisać identyfikatory zadań i pobrać wyniki później, nawet po zamknięciu sesji.
- Retrieve results with Qiskit
- Retrieve results on IBM Quantum Platform
Jeśli zapisałeś identyfikator zadania podczas jego wysyłania, użyj service.job(<job_id>), aby pobrać je później. Jeśli nie masz identyfikatora zadania lub chcesz pobrać wiele zadań naraz (w tym zadania z wycofanych QPU), użyj zamiast tego service.jobs() z opcjonalnymi filtrami.
Zobacz dokumentację API QiskitRuntimeService.jobs w celu poznania dostępnych filtrów.
Ten przykład pokazuje pobieranie ostatnich wyników uruchomionych na konkretnym backendzie.
- Przejdź do strony Obciążenia.
- Użyj opcji wyszukiwania lub filtrowania, aby znaleźć swoje zadanie po nazwie, dacie lub statusie.
- Kliknij zadanie, aby zobaczyć jego wyniki i szczegóły.
Pobierz właściwości backendu
- Retrieve backend properties with Qiskit
- Retrieve backend properties on IBM Quantum Platform
Możesz użyć job.properties(), aby pobrać właściwości backendu, w tym współczynniki błędów, w momencie wykonania zadania.
Ten przykład pokazuje, jak pobrać właściwości backendu aktualne w momencie wykonania zadania, w tym czasy / i współczynniki błędów dla konkretnego kubitu (0).
service.jobs() zwraca również zadania uruchomione za pomocą wycofanego pakietu qiskit-ibm-provider. Zadania wysłane za pomocą starszego (również wycofanego) pakietu qiskit-ibmq-provider nie są już dostępne.
Możesz zobaczyć dane kalibracyjne backendu z momentu wykonania zadania, a także z momentu utworzenia zadania.
- Przejdź do strony Obciążenia
- Kliknij obciążenie, aby otworzyć jego stronę szczegółów
- W sekcji Komputer kwantowy kliknij Zobacz historię kalibracji
- Użyj menu rozwijanego, aby zmienić wyświetlane dane z „W momencie wykonania zadania” na „W momencie utworzenia zadania”
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()
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")
Anuluj zadanie
Anuluj zadanie, które jest w kolejce lub jest wykonywane. Po anulowaniu zadania nie można go wznowić.
- Cancel with Qiskit
- Cancel on IBM Quantum Platform
Użyj metody job.cancel(), aby anulować zadanie programowo.
- Z tabeli obciążeń: kliknij menu przepełnienia na końcu wiersza obciążenia, które chcesz anulować, i wybierz Anuluj.
- Ze strony szczegółów zadania: kliknij obciążenie, aby otworzyć jego stronę szczegółów, użyj listy rozwijanej Akcje u góry i wybierz Anuluj.
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")
Następne kroki
- Zapoznaj się z dokumentacją API
QiskitRuntimeService, aby poznać dodatkowe metody zarządzania zadaniami. - Poznaj tryby wykonania, aby zrozumieć typy obciążeń wsadowych i sesyjnych.