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

REST APIを使用した実行モード

Qiskit primitiveのワークロードは、REST APIを使用して3つの実行モードのいずれかで実行できます。ニーズに応じて、ジョブ、セッション、バッチから選択してください。このトピックではこれらのモードについて説明します。

備考

このドキュメントでは、Qiskit Runtime REST APIのデモンストレーションにPythonのrequestsモジュールを使用しています。ただし、このワークフローはREST APIをサポートする任意の言語やフレームワークを使用して実行できます。詳細については、APIリファレンスドキュメントを参照してください。

REST APIを使用したジョブモード

ジョブモードでは、コンテキストマネージャーなしでEstimatorまたはSamplerの単一のprimitive requestが行われます。いくつかの例については、EstimatorおよびSamplerを使用した量子回路の実行方法を参照してください。

REST APIを使用したセッションモード

セッションは、量子コンピューターで複数ジョブの反復ワークロードを効率的に実行できるQiskit Runtimeの機能です。セッションを使用すると、各ジョブを個別にキューに入れることによる遅延を回避できます。これは、古典リソースと量子リソース間の頻繁な通信を必要とする反復タスクで特に便利です。セッションの詳細については、ドキュメントを参照してください。

備考

Open Planのユーザーはセッションジョブを送信できません。

セッションを開始する

まず、セッションを作成してセッションIDを取得します。

import json
import requests

sessionsUrl = "https://quantum.cloud.ibm.com/api/v1/sessions"
auth_id = "Bearer <YOUR_BEARER_TOKEN>"
backend = "<BACKEND_NAME>"
crn = "<SERVICE-CRN>"

headersList = {
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": auth_id,
"Service-CRN": crn
}

payload = json.dumps({
"backend": backend,
"mode": 'dedicated',
})

response = requests.request("POST", sessionsUrl, data=payload, headers=headersList)

sessionId = response.json()['id']

print(response.json())

Output

{'id': 'crw9s7cdbt40008jxesg'}

セッションを閉じる

すべてのジョブが完了したら、Sessionを閉じることをお勧めします。これにより、後続のユーザーの待ち時間が短縮されます。

closureURL="https://quantum.cloud.ibm.com/api/v1/sessions/"+sessionId+"/close"

headersList = {
"Accept": "application/json",
"Authorization": auth_id,
"Service-CRN": crn
}

closure_response = requests.request(
"DELETE",
closureURL,
headers=headersList
)

print("Session closure response ok?:",closure_response.ok,closure_response.text)

Output

Session closure response ok?: True

REST APIを使用したバッチモード

または、リクエストペイロードでmodeを指定することでバッチジョブを送信できます。すべてのジョブを最初から提供できる場合、バッチモードは処理時間の短縮に役立ちます。バッチモードについては、実行モードの概要ガイドで詳しく説明しています。

import json
import requests

sessionsUrl = "https://quantum.cloud.ibm.com/api/v1/sessions"

headersList = {
"Accept": "application/json",
"Authorization": auth_id,
"Service-CRN": crn,
'Content-Type': 'application/json'
}

payload = json.dumps({
"backend": backend,
"instance": "hub1/group1/project1",
"mode": "batch"
})

response = requests.request("POST", sessionsUrl, data=payload, headers=headersList)

sessionId = response.json()['id']

セッションで送信されるジョブの例

セッションが設定されると、セッションIDを指定することで、1つ以上のSamplerまたはEstimatorジョブを同じセッションに送信できます。

備考

PUB内の<parameter values>は、単一のパラメーターまたはパラメーターのリストのいずれかを指定できます。また、numpyのブロードキャストもサポートしています。

セッションモードでのEstimatorジョブ

job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [obs1, obs2, obs3, obs4]]], #primitive unified blocs (PUBs) containing one circuit each.
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}

}

セッションモードでのSamplerジョブ

job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}

}

次のステップ

推奨事項