Przejdź do głównej treści

Tryby wykonania przy użyciu REST API

Package versions

The code on this page was developed using the following requirements. We recommend using these versions or newer.

qiskit[all]~=2.3.0

Obciążenia prymitywne Qiskit możesz uruchamiać za pomocą REST API w jednym z trzech trybów wykonania, zależnie od potrzeb: job, session i batch. Ten temat wyjaśnia te tryby.

uwaga

Niniejsza dokumentacja używa modułu Python requests do zademonstrowania REST API Qiskit Runtime. Jednak ten przepływ pracy można wykonać w dowolnym języku lub frameworku obsługującym REST API. Szczegóły znajdziesz w dokumentacji referencyjnej API.

Tryb job z REST API

W trybie job pojedyncze żądanie prymitywne Estimator lub Sampler jest wykonywane bez menedżera kontekstu. Przykłady uruchamiania obwodów kwantowych znajdziesz w opisach Estimator i Sampler.

Tryb session z REST API

Session to funkcja Qiskit Runtime umożliwiająca efektywne uruchamianie iteracyjnych obciążeń wielozadaniowych na komputerach kwantowych. Korzystanie z sesji pomaga unikać opóźnień wynikających z osobnego kolejkowania każdego zadania, co może być szczególnie przydatne w zadaniach iteracyjnych wymagających częstej komunikacji między zasobami klasycznymi i kwantowymi. Więcej informacji o Session znajdziesz w dokumentacji.

uwaga

Użytkownicy planu Open Plan nie mogą przesyłać zadań w trybie session.

Uruchom sesję

Zacznij od utworzenia sesji i uzyskania identyfikatora sesji.

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

Zamknij sesję

Dobrą praktyką jest zamknięcie Session po zakończeniu wszystkich zadań. Skróci to czas oczekiwania dla kolejnych użytkowników.

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

Tryb batch z REST API

Alternatywnie możesz przesłać zadanie w trybie batch, określając mode w ładunku żądania. Tryb batch może skrócić czas przetwarzania, jeśli wszystkie zadania można dostarczyć na początku. Dowiedz się więcej o trybie batch w przewodniku wprowadzenia do trybów wykonania.

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

Przykłady zadań przesyłanych w sesji

Po skonfigurowaniu sesji można przesłać jedno lub więcej zadań Sampler lub Estimator do tej samej sesji, podając identyfikator sesji.

uwaga

<parameter values> w PUB może być pojedynczym parametrem lub listą parametrów. Obsługuje też broadcasting numpy.

Zadania Estimator w trybie session

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

}

Zadania Sampler w trybie session

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

}

Następne kroki

Rekomendacje