주 콘텐츠로 건너뛰기

REST API를 사용한 실행 모드

필요에 따라 job, session, batch의 세 가지 실행 모드 중 하나를 사용하여 REST API로 Qiskit 프리미티브 워크로드를 실행할 수 있습니다. 이 주제에서는 이러한 모드들을 설명합니다.

참고

이 문서는 Qiskit Runtime REST API를 시연하기 위해 Python requests 모듈을 활용합니다. 그러나 이 워크플로는 REST API 작업을 지원하는 모든 언어나 프레임워크를 사용하여 실행할 수 있습니다. 자세한 내용은 API 참조 문서를 참고하세요.

REST API를 사용한 Job 모드

Job 모드에서는 컨텍스트 매니저 없이 Estimator 또는 Sampler의 단일 프리미티브 요청이 이루어집니다. 몇 가지 예시를 보려면 EstimatorSampler를 사용하여 양자 Circuit을 실행하는 방법을 참고하세요.

REST API를 사용한 Session 모드

Session은 양자 컴퓨터에서 다중 작업 반복 워크로드를 효율적으로 실행할 수 있도록 하는 Qiskit Runtime 기능입니다. Session을 사용하면 각 작업을 별도로 큐에 넣어 발생하는 지연을 방지할 수 있으며, 이는 클래식 리소스와 양자 리소스 간의 빈번한 통신이 필요한 반복 작업에 특히 유용합니다. Session에 대한 자세한 내용은 문서에서 확인할 수 있습니다.

참고

Open Plan 사용자는 session 작업을 제출할 수 없습니다.

Session 시작

Session을 생성하고 session 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 종료

모든 작업이 완료되면 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를 사용한 Batch 모드

또는 요청 페이로드에서 mode를 지정하여 batch 작업을 제출할 수 있습니다. Batch 모드는 모든 작업을 처음부터 제공할 수 있는 경우 처리 시간을 단축하는 데 도움이 될 수 있습니다. 실행 모드 소개 가이드에서 batch 모드에 대해 자세히 알아보세요.

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

Session에서 제출된 작업 예시

Session이 설정되면 session ID를 지정하여 하나 이상의 Sampler 또는 Estimator 작업을 동일한 session에 제출할 수 있습니다.

참고

PUB<parameter values>는 단일 매개변수 또는 매개변수 목록일 수 있습니다. 또한 numpy 브로드캐스팅도 지원합니다.

Session 모드에서의 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)
},
}

}

Session 모드에서의 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)
},
}

}

다음 단계

권장 사항