Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

Моніторинг або скасування завдання

Цей посібник пояснює, як стежити за статусом завдання, переглядати інформацію про використання та скасовувати завдання. Ти можеш отримати доступ до цієї інформації як через IBM Quantum® Platform, так і програмно за допомогою Qiskit.

Версії пакетів

Код на цій сторінці був розроблений з використанням наступних вимог. Ми рекомендуємо використовувати ці версії або новіші.

qiskit-ibm-runtime~=0.46.1

Моніторинг завдання​

Використовуй ці методи, щоб перевірити статус надісланих завдань, отримати результати та переглянути деталі, пов'язані із завданням та його виконанням.

Екземпляр завдання надає кілька методів для моніторингу:

МетодОпис
job.status()Перевірити поточний статус завдання
job.job_id()Отримати унікальний ідентифікатор завдання
job.result()Отримати результати завдання (блокувальний виклик до завершення)
job.wait_for_final_state()Блокувати виконання, доки завдання не досягне кінцевого стану

Чому завдання залишається у статусі "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)

Перегляд залишку використання​

Відстежуй, скільки квоти використання твого плану залишилося.

Використай метод service.usage(), щоб отримати інформацію про використання для твого поточного активного екземпляра.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

# Get usage information for the current active instance
usage = service.usage()
print(usage)

Перегляд метрик завдань​

Отримай огляд твоїх поданих завдань, включно з метриками робочих навантажень batch та session.

Використай метод service.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")

Отримання результатів завдання пізніше​

Ти можеш зберегти ідентифікатори завдань і отримати результати пізніше, навіть після закриття сесії.

Якщо ти зберіг ідентифікатор завдання під час його подання, використай service.job(<job_id>), щоб отримати його пізніше. Якщо в тебе немає ідентифікатора завдання або якщо ти хочеш отримати кілька завдань одночасно (включно із завданнями зі знятих з експлуатації QPU), натомість використай service.jobs() з необов'язковими фільтрами.

Дивись документацію API QiskitRuntimeService.jobs щодо доступних фільтрів.

Цей приклад демонструє отримання останніх результатів, виконаних на конкретному бекенді.

Отримання властивостей бекенду​

Ти можеш використати job.properties(), щоб отримати властивості бекенду, включно з частотами помилок, на момент виконання завдання.

Цей приклад демонструє, як отримати властивості бекенду, актуальні на момент виконання завдання, включно з часами T1T_1/T2T_2 та частотами помилок для конкретного кубіта (0).

Застарілі пакети провайдерів

service.jobs() також повертає завдання, запущені із застарілого пакета qiskit-ibm-provider. Завдання, подані старішим (також застарілим) пакетом qiskit-ibmq-provider, більше недоступні.

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")

Скасування завдання​

Скасуй завдання, яке перебуває в черзі або виконується. Після скасування завдання відновити його неможливо.

Використай метод job.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")

Наступні кроки​

Рекомендації