Моніторинг або скасування завдання
Цей посібник пояснює, як стежити за статусом завдання, переглядати інформацію про використання та скасовувати завдання. Ти можеш отримати доступ до цієї інформації як через IBM Quantum® Platform, так і програмно за допомогою Qiskit.
Версії пакетів
Код на цій сторінці був розроблений з використанням наступних вимог. Ми рекомендуємо використовувати ці версії або новіші.
qiskit-ibm-runtime~=0.46.1
Моніторинг завдання
Використовуй ці методи, щоб перевірити статус надісланих завдань, отримати результати та переглянути деталі, пов'язані із завданням та його виконанням.
- Monitor a job with Qiskit
- Monitor a job on IBM Quantum Platform
Екземпляр завдання надає кілька методів для моніторингу:
| Метод | Опис |
|---|---|
job.status() | Перевірити поточний статус завдання |
job.job_id() | Отримати унікальний ідентифікатор завдання |
job.result() | Отримати результати завдання (блокувальний виклик до завершення) |
job.wait_for_final_state() | Блокувати виконання, доки завдання не досягне кінцевого стану |
Перейди на сторінку Workloads і перевір стовпець Status. Статус твого завдання відображається як один із наступних:
- Pending: завдання очікує на виконання на QPU
- In progress: завдання наразі виконується
- Completed: завдання успішно завершено
- Failed: під час виконання завдання виникла помилка
- Canceled: користувач скасував завдання
Натисни на назву завдання або рядок, щоб відкрити детальний перегляд, де ти можеш побачити таку інформацію, як результати та будь-які повідомлення про помилки.
Чому завдання залишається у статусі "In progress"
Ти можеш помітити, що завдання (у job mode або batch mode), яке, як ти очікуєш, займе лише кілька секунд, залишається у статусі In progress (у Qiskit це називається RUNNING) значно довше. Це нормально, і це не означає, що завдання витрачає весь цей час як використання. Це відбувається через те, як завдання плануються на QPU:
-
Кожне завдання вимагає класичної попередньої обробки, перш ніж воно зможе виконуватися на QPU. Завдання переходить у стан In progress (
RUNNING), щойно починається ця класична обробка — а не тоді, коли воно починає виконуватися на QPU. -
Більшість цієї класичної обробки виконується паралельно, тому кілька завдань можуть перебувати в статусі In progress одночасно.
-
Однак лише одне завдання одночасно може виконуватися на QPU. Коли кілька завдань завершують класичну обробку і готові до виконання, вони мають чекати своєї черги на QPU. Це називається конкуренцією за QPU. Коли конкуренція висока, завдання може залишатися у статусі In progress помітно довше, ніж кілька секунд часу QPU, які йому насправді потрібні.
-
Конкуренція також може виникати, коли на QPU виконується завдання системного обслуговування, наприклад калібрування. Твоє завдання залишається у статусі In progress, доки завдання обслуговування не завершиться і QPU не стане доступним.
Через це фактичний астрономічний час, який завдання проводить у статусі In progress, не збігається з його використанням. Як оцінка використання, так і максимальний час виконання базуються лише на часі, протягом якого QPU заблоковано для виконання твого завдання, і тому не враховують багатопотокову класичну обробку, описану вище. Тривалий час у статусі In progress не збільшує заявлене використання чи вартість.
Session mode відрізняється
Попередня поведінка стосується job mode та batch mode. У session mode протягом активного вікна сесії користувач має ексклюзивний доступ до бекенду, і жодні інші завдання не можуть виконуватися, включно з калібрувальними завданнями. Тому будь-яка конкуренція за QPU відбувається лише серед твоїх власних завдань сесії. Крім того, оскільки потужність QPU резервується на час сесії, використання сесії вимірюється як астрономічний час, поки сесія залишається активною, незалежно від того, чи виконуються завдання активно. Дивись Використання робочого навантаження для отримання додаткової інформації.
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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)
Перегляд залишку використання
Відстежуй, скільки квоти використання твого плану залишилося.
- Check usage with Qiskit
- View usage on IBM Quantum Platform
Використай метод service.usage(), щоб отримати інформацію про використання для твого поточного активного екземпляра.
Перейди на сторінку Instances і вибери вкладку, що відповідає плану, який хочеш перевірити. Відображається загальний витрачений час та загальний залишок часу за твоїм планом.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Get usage information for the current active instance
usage = service.usage()
print(usage)
Перегляд метрик завдань
Отримай огляд твоїх поданих завдань, включно з метриками робочих навантажень batch та session.
- Get job metrics with Qiskit
- View job metrics on IBM Quantum Platform
Використай метод service.jobs() з фільтрами, щоб отримати інформацію про твої подані завдання, наприклад скільки їх було подано, який їхній статус і коли вони були створені. Наступний приклад отримує всі завдання, подані за останні сім днів, і обчислює загальне використання цих завдань.
Перейди на сторінку Analytics, щоб переглянути та завантажити дані, такі як:
- загальне використання
- використання з фільтрацією за екземпляром, квантовим комп'ютером і користувачем
- кількість робочих навантажень job, batch і session
Примітка: ти можеш отримати доступ до сторінки Analytics лише для облікових записів, якими ти володієш або керуєш.
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")
Отримання результатів завдання пізніше
Ти можеш зберегти ідентифікатори завдань і отримати результати пізніше, навіть після закриття сесії.
- Retrieve results with Qiskit
- Retrieve results on IBM Quantum Platform
Якщо ти зберіг ідентифікатор завдання під час його подання, використай service.job(<job_id>), щоб отримати його пізніше. Якщо в тебе немає ідентифікатора завдання або якщо ти хочеш отримати кілька завдань одночасно (включно із завданнями зі знятих з експлуатації QPU), натомість використай service.jobs() з необов'язковими фільтрами.
Дивись документацію API QiskitRuntimeService.jobs щодо доступних фільтрів.
Цей приклад демонструє отримання останніх результатів, виконаних на конкретному бекенді.
- Перейди на сторінку Workloads.
- Скористайся опціями пошуку або фільтрації, щоб знайти своє завдання за назвою, датою або статусом.
- Натисни на завдання, щоб переглянути його результати та деталі.
Отримання властивостей бекенду
- Retrieve backend properties with Qiskit
- Retrieve backend properties on IBM Quantum Platform
Ти можеш використати job.properties(), щоб отримати властивості бекенду, включно з частотами помилок, на момент виконання завдання.
Цей приклад демонструє, як отримати властивості бекенду, актуальні на момент виконання завдання, включно з часами / та частотами помилок для конкретного кубіта (0).
service.jobs() також повертає завдання, запущені із застарілого пакета qiskit-ibm-provider. Завдання, подані старішим (також застарілим) пакетом qiskit-ibmq-provider, більше недоступні.
Ти можеш переглянути дані калібрування бекенду на момент виконання завдання, а також на момент його створення.
- Перейди на сторінку Workloads
- Натисни на робоче навантаження, щоб відкрити його сторінку деталей
- У розділі Quantum computer натисни View calibration history
- Скористайся спадним меню, щоб змінити перегляд даних із "At job execution start" на "At job creation"
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")
Скасування завдання
Скасуй завдання, яке перебуває в черзі або виконується. Після скасування завдання відновити його неможливо.
- Cancel with Qiskit
- Cancel on IBM Quantum Platform
Використай метод job.cancel(), щоб скасувати завдання програмно.
- З таблиці робочих навантажень: натисни меню переповнення в кінці рядка робочого навантаження, яке хочеш скасувати, і вибери Cancel.
- Зі сторінки деталей завдання: натисни на робоче навантаження, щоб відкрити його сторінку деталей, скористайся спадним меню Actions угорі та вибери Cancel.
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")
Наступні кроки
- Перегляньте довідник API
QiskitRuntimeServiceщодо додаткових методів керування завданнями. - Дослідіть режими виконання, щоб зрозуміти типи робочих навантажень batch і session.