Skip to main content
IBM Quantum Platform

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

パッケージ・バージョン

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

qiskit[all]~=2.3.0

IBM Quantum のプリミティブ・ワークロードは、REST API を使用して、ニーズに応じて「ジョブ」、「セッション」、「バッチ」の3つの実行モードのいずれかで実行できます。 このトピックでは、これらのモードについて解説します。

Note

このドキュメントでは、 Pythonrequests モジュールを使用して、 IBM Quantum Compute ServiceのREST APIについて解説します。 ただし、このワークフローは、REST API の操作をサポートするあらゆる言語やフレームワークを使用して実行することができます。 詳細については、 APIリファレンスを参照してください。


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

ジョブモードでは、コンテキストマネージャーを使用せずに、Estimator または Sampler に対して単一のプリミティブリクエストが行われます。 EstimatorSampler を使用して量子回路を実行する方法については、いくつかの例をご覧ください。


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

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

Note

オープンプランのユーザーはセッションジョブを提出できません。

セッションを開始する

セッションを作成し、セッション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つまたは複数のサンプラーまたはエスティメーターのジョブを同じセッションに投入することができます。

Note

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': '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)
                },
}

}

次のステップ

推奨事項
  • REST API を使用した Sampler プリミティブの詳細な例を確認してください。
  • REST API を使用した Estimator プリミティブの詳細な例を確認してください。
  • プリミティブの練習は、 IBM Quantum® Learning の Cost function レッスンで行ってください。
  • トランスパイル 」のセクションで、ローカルでのトランスパイル方法について学びましょう。
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。