Перейти до основного вмісту

Запусти свій перший робочий процес Qiskit Serverless віддалено

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

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

qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4

У цьому розділі розглядається, як використовувати qiskit-ibm-catalog для перегляду програм, доступних у Qiskit Serverless, передачі вхідних даних до цих програм, їхнього віддаленого запуску, перевірки статусу та отримання результатів і журналів.

Переконайся, що ти пройшов автентифікацію в Qiskit Serverless за допомогою свого API-ключа (інструкції дивись у розділі Розгортання на IBM Quantum Platform).

Перегляд доступних програм

Ти можеш використовувати QiskitServerless.list(), щоб отримати список доступних програм для запуску через Qiskit Serverless. Це включає раніше завантажену програму transpile_remote_serverless.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitServerless

serverless = QiskitServerless()
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)
QiskitFunction(transpile_remote_serverless)

Запуск завантаженої програми та передача вхідних даних

Спочатку налаштуй вхідні дані. Твоя програма приймає три вхідні параметри: circuits, backend та optimization_level. Можна використати random_circuit для створення 30 випадкових схем:

from qiskit.circuit.random import random_circuit

qc_random = [(random_circuit(4, 4, measure=True, seed=i)) for i in range(10)]
qc_random[0].draw(output="mpl", idle_wires=False)

Вивід попередньої комірки коду

Далі використай QiskitRuntimeService та least_busy, щоб вибрати backend:

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)

Встанови рівень оптимізації:

optimization_level = 3

Вибери свою програму за допомогою serverless.load('PROGRAM_NAME'):

transpile_remote_serverless = serverless.load("transpile_remote_serverless")

Далі передай вхідні дані та запусти програму у пітонічному стилі:

job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'

Перевірка статусу завдання

Маючи job_id від Qiskit Serverless, ти можеш перевіряти статус запущених завдань. Можливі статуси:

  • QUEUED: Віддалена програма перебуває в черзі Qiskit Serverless. Пріоритет черги наразі визначається обсягом використання Qiskit Serverless
  • INITIALIZING: Віддалена програма запускається; це включає налаштування віддаленого середовища та встановлення залежностей
  • RUNNING: Програма виконується. На цьому етапі, якщо у твоїй програмі є виклики print(), ти можеш отримати журнали за допомогою job.logs()
  • DONE: Програму завершено, і ти можеш отримати дані, збережені в save_result(), за допомогою job.results()

Детальніші статуси завдань можна налаштувати в розділі Керування обчислювальними ресурсами та даними Qiskit Serverless.

job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821
порада

Наразі таблиця робочих процесів IBM Quantum відображає лише робочі процеси Qiskit Runtime. Використовуй job.status(), щоб побачити поточний статус свого робочого процесу Qiskit Serverless.

Ти успішно запустив свою першу програму Qiskit Serverless!

Отримання журналів і результатів

Як уже згадувалося, як тільки програма перейде в стан RUNNING, ти можеш використовувати job.logs() для отримання журналів, створених виводом print():

logs = job.logs()
print(logs)
No logs yet.

Будь-коли ти також можеш скасувати завдання:

job.stop()
'Job has been stopped.'

Як тільки програма перейде в стан DONE, ти можеш використовувати job.results() для отримання результату, збереженого в save_result():

# We can't get results from a cancelled job, so we'll fetch a completed one instead
completed_job = next(
job for job in serverless.jobs() if job.status() == "DONE"
)
completed_job.result()
{'transpiled_circuits': [<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93eca64810>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5e5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5d5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec58b490>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec57d310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec535950>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec523c90>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec60a990>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5527d0>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec4152d0>]}

Перегляд раніше запущених завдань у Qiskit Serverless

Ти можеш використовувати jobs(), щоб переглянути всі завдання, відправлені до Qiskit Serverless:

old_jobs = serverless.jobs()
old_jobs
[<Job | 118256c5-bbb0-4ea8-9e9f-51aac2220aef>,
<Job | e9a36469-7d6b-4f00-bf91-78709ebdbbff>,
<Job | 4efd601b-8f61-4c8e-b14a-0b8a9c649dc0>,
<Job | 87cd22c7-8eb9-4606-bdb4-befe946e9e9b>,
<Job | be9a6dfd-0830-4250-aa60-acdd05bb8818>,
<Job | 479513dd-6a76-4c3e-ba49-bb21351b9a05>,
<Job | f9c20c31-be46-41b3-97ac-99f7be61f89e>,
<Job | 37fa2489-4449-4bfb-974e-9d9a9ec3cc21>,
<Job | b754c4e8-6817-48db-9bb9-74c151d6349a>,
<Job | 78bc6744-b417-48cb-8e01-59bb63bcc2be>]

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

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