最初のQiskit Serverlessワークロードをリモートで実行する
Package versions
このページのコードは、以下の要件を使用して開発されました。 これらのバージョン以降を使用することをお勧めします。
qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
Qiskit Serverlessはアップグレード中で、機能が急速に変化しています。 この開発フェーズでは、リリースノートと最新ドキュメントを Qiskit Serverless GitHub ページでご確認ください。
このセクションでは、qiskit-ibm-catalog を使用してQiskit Serverlessで利用可能なプログラムの一覧を取得し、それらのプログラムに入力を渡し、リモートで実行し、ステータスを確認し、結果とログを取得する方法を説明します。
始める前に、最初のQiskit Serverlessプログラムを作成する のワークフローを完了していることを確認してください。
利用可能なプログラムを一覧表示する
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 の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)
次に、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")
次に、入力を渡し、以下のように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>]
次のステップ
- プログラムで利用可能なコンピュートおよびデータ管理ツール(並列化を含む)を確認してください。