Přeskočit na hlavní obsah

Režimy spouštění pomocí REST API

Své Qiskit primitivní workloady můžeš spouštět pomocí REST API v jednom ze tří režimů spouštění, podle svých potřeb: job, session a batch. Toto téma tyto režimy vysvětluje.

poznámka

Tato dokumentace využívá Python modul requests k demonstraci Qiskit Runtime REST API. Tento postup však lze provést v libovolném jazyce nebo frameworku, který podporuje práci s REST API. Podrobnosti najdeš v referenční dokumentaci API.

Režim job s REST API

V režimu job se provede jediný primitivní požadavek Estimatoru nebo Sampleru bez správce kontextu. Příklady spuštění kvantového Circuit najdeš v části Estimator a Sampler.

Režim session s REST API

Session je funkce Qiskit Runtime, která ti umožňuje efektivně spouštět iterativní workloady s více úlohami na kvantových počítačích. Používání sessions pomáhá předcházet zpožděním způsobeným samostatným zařazováním každé úlohy do fronty, což může být zvláště užitečné pro iterativní úlohy vyžadující časté přepínání mezi klasickými a kvantovými zdroji. Další podrobnosti o Sessions najdeš v dokumentaci.

poznámka

Uživatelé plánu Open nemohou odesílat úlohy v session.

Spuštění session

Začni vytvořením session a získáním ID session.

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

Ukončení session

Je dobrým zvykem Session uzavřít po dokončení všech úloh. Tím zkrátíš čekací dobu pro ostatní uživatele.

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

Režim batch s REST API

Alternativně můžeš odeslat dávkovou úlohu (batch job) zadáním mode v těle požadavku. Režim batch může pomoci zkrátit dobu zpracování, pokud jsou všechny úlohy dostupné předem. Více informací o batch režimu najdeš v průvodci úvodem do režimů spouštění.

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

Příklady úloh odeslaných v session

Jakmile je session nastavena, lze do ní odeslat jednu nebo více úloh Sampleru nebo Estimatoru zadáním ID session.

poznámka

<parameter values> v PUB může být buď jeden parametr, nebo seznam parametrů. Podporuje také broadcasting z numpy.

Úlohy Estimatoru v režimu 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)
},
}

}

Úlohy Sampleru v režimu 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)
},
}

}

Další kroky

Doporučení