メインコンテンツへスキップ

最初のQiskit Serverlessワークロードをリモートで実行する

パッケージバージョン

このページのコードは、以下の要件を使用して開発されました。 これらのバージョン以降を使用することをお勧めします。

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

このセクションでは、qiskit-ibm-catalog を使用してQiskit Serverlessで利用可能なプログラムの一覧を取得し、それらのプログラムに入力を渡し、リモートで実行し、ステータスを確認し、結果とログを取得する方法を説明します。

APIキー を使用してQiskit Serverlessへの認証が完了していることを確認してください(手順は 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)

アップロードしたプログラムを実行し、入力を渡す

まず、入力を設定します。このプログラムには circuitsbackendoptimization_level の3つの入力があります。random_circuit を使用して30個のランダムなCircuitを作成できます。

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)

前のコードセルの出力

次に、QiskitRuntimeServiceleast_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")

次に、入力を渡し、以下のようにPythonらしい方法で実行します。

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

ジョブのステータスを確認する

Qiskit Serverlessの job_id を使用して、実行中のジョブのステータスを確認できます。ステータスには以下のものがあります。

  • 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のワークロードのみが反映されています。Qiskit Serverlessワークロードの現在のステータスを確認するには job.status() を使用してください。

最初の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>]

次のステップ

推奨事項