REST APIを使用した実行モード
パッケージ・バージョン
このページのコードは、以下の要件に基づいて開発されました。 これらのバージョン以降のご利用をお勧めします。
qiskit[all]~=2.3.0
IBM Quantum のプリミティブ・ワークロードは、REST API を使用して、ニーズに応じて「ジョブ」、「セッション」、「バッチ」の3つの実行モードのいずれかで実行できます。 このトピックでは、これらのモードについて解説します。
このドキュメントでは、 Pythonrequests モジュールを使用して、 IBM Quantum Compute ServiceのREST APIについて解説します。 ただし、このワークフローは、REST API の操作をサポートするあらゆる言語やフレームワークを使用して実行することができます。 詳細については、 APIリファレンスを参照してください。
REST APIを使用したジョブモード
ジョブモードでは、コンテキストマネージャーを使用せずに、Estimator または Sampler に対して単一のプリミティブリクエストが行われます。 Estimator と Sampler を使用して量子回路を実行する方法については、いくつかの例をご覧ください。
REST APIを使用したセッションモード
セッションとは、量子コンピュータ上で複数のジョブからなる反復的なワークロードを効率的に実行できる機能です。 セッションを使用することで、各ジョブを個別にキューに入れることによって生じる遅延を回避できます。これは、古典リソースと量子リソースの間で頻繁な通信を必要とする反復的なタスクにおいて、特に有用です。 Sessionsに関する詳細については、 ドキュメントをご覧ください。
オープンプランのユーザーはセッションジョブを提出できません。
セッションを開始する
セッションを作成し、セッション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())出力
{'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)出力
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つまたは複数のサンプラーまたはエスティメーターのジョブを同じセッションに投入することができます。
PUB の <parameter values> は、単一のパラメーターか、パラメーターのリストである。 また、 numpy 。
セッションモードにおける推定器ジョブ
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)
},
}
}job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [[obs1], [obs2], [obs3], [obs4]], [[vals1], [vals2]]]], #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)
},
}
} job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, obs1],[resulting_qasm, obs2]], #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)
},
}
}セッションモードのサンプラージョブ
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)
},
}
}job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [vals1, vals2, vals3]]], #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)
},
}
} job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [val1]],[resulting_qasm,None,100]], #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)
},
}
}次のステップ
- REST API を使用した Sampler プリミティブの詳細な例を確認してください。
- REST API を使用した Estimator プリミティブの詳細な例を確認してください。
- プリミティブの練習は、 IBM Quantum® Learning の Cost function レッスンで行ってください。
- 「トランスパイル 」のセクションで、ローカルでのトランスパイル方法について学びましょう。