Skip to main content
IBM Quantum Platform

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

  • このページのコードは、以下の要件に基づいて開発された。 これらのバージョンまたは新しいバージョンの使用をお勧めします。

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

Qiskit Serverless アップグレードが行われており、その機能は急速に変化しています。 この開発フェーズでは、リリースノートと最新のドキュメントは Qiskit Serverless GitHub ページでご覧いただけます。

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

始める前に、「 最初の Qiskit Serverless プログラムを作成する 」の手順を確実に完了していることを確認してください。


利用可能なプログラムの一覧

Qiskit Serverless で実行可能なプログラムの一覧を取得するには QiskitServerless.list() 、を使用できます。 これには、以前にアップロードされた transpile_remote_serverlessものも含まれます。

from qiskit_ibm_catalog import QiskitServerless

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

Output:

QiskitFunction(transpile_remote_serverless)

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

まず、入力を設定する。 あなたのプログラムには3つの入力がある: circuits backendoptimization_levelrandom_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)

Output:

Output of the previous code cell

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

次に、入力を渡し、以下のようにpythonicな方法で実行する:

job = transpile_remote_serverless.run(
    circuits=qc_random,
    backend=backend.name,
    optimization_level=optimization_level,
)
job.job_id

Output:

'118256c5-bbb0-4ea8-9e9f-51aac2220aef'

ジョブのステータスの確認

Qiskit Serverless job_id で、実行中のジョブのステータスを確認できます。 これには以下のステータスが含まれる:

  • QUEUED:リモートプログラムはQiskit Serverlessキューにある。 キューの優先順位は現在、Qiskit Serverlessの使用量に基づいています
  • INITIALIZING:リモート環境のセットアップと依存関係のインストールを含む
  • RUNNING:プログラムは実行中です。 この段階で、プログラム内に print() の出力がある場合は、次のようにしてログを取得できます。 job.logs()
  • DONE: save_result()job.results()

Manage Qiskit Serverless compute and data resourcesでは、より詳細なジョブステータスを設定することもできます。

job.status()

Output:

'QUEUED'
Tip

現在、「 IBM Quantum 」のワークロード一覧には、 IBM Quantum Compute Service のワークロードのみが表示されています。 Qiskit Serverless ワークロードの現在のステータスを確認するには job.status() 、[ ] を使用してください。

最初のQiskitサーバーレスプログラムの実行に成功しました!


ログと結果を取得する

前述したように、いったんプログラムが RUNNINGjob.logs() を使って、 print() 出力から作成されたログをフェッチすることができる:

logs = job.logs()
print(logs)

Output:

No logs yet.

いつでもジョブをキャンセルすることもできます:

job.stop()

Output:

'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()

Output:

{'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

Output:

[<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>]

次のステップ

推奨事項
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。