Sari la conținutul principal

Moduri de execuție folosind REST API

Poți rula sarcinile de lucru Qiskit primitive folosind REST API în unul din trei moduri de execuție, în funcție de nevoile tale: job, session și batch. Acest subiect explică aceste moduri.

notă

Această documentație utilizează modulul Python requests pentru a demonstra REST API-ul Qiskit Runtime. Totuși, acest flux de lucru poate fi executat folosind orice limbaj sau framework care acceptă lucrul cu REST API-uri. Consultă documentația de referință API pentru detalii.

Modul job cu REST API

În modul job, o singură cerere primitivă către Estimator sau Sampler este efectuată fără un manager de context. Vezi cum să rulezi un Circuit cuantic folosind Estimator și Sampler pentru câteva exemple.

Modul Session cu REST API

O Session este o funcționalitate Qiskit Runtime care îți permite să rulezi eficient sarcini de lucru iterative cu mai multe joburi pe calculatoare cuantice. Utilizarea sesiunilor ajută la evitarea întârzierilor cauzate de adăugarea în coadă a fiecărui job separat, ceea ce poate fi deosebit de util pentru sarcinile iterative care necesită comunicare frecventă între resursele clasice și cele cuantice. Mai multe detalii despre Sessions pot fi găsite în documentație.

notă

Utilizatorii planului Open nu pot trimite joburi de Session.

Pornește o Session

Începe prin crearea unei sesiuni și obținerea unui ID de sesiune.

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

Închide o Session

Este o bună practică să închizi o Session când toate joburile sunt finalizate. Acest lucru va reduce timpul de așteptare pentru utilizatorii următori.

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

Modul batch cu REST API

Alternativ, poți trimite un job batch specificând mode în payload-ul cererii. Modul batch poate ajuta la scurtarea timpului de procesare dacă toate joburile pot fi furnizate de la început. Află despre modul batch în ghidul introducere în modurile de execuție.

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

Exemple de joburi trimise într-o Session

Odată ce o Session este configurată, unul sau mai multe joburi Sampler sau Estimator pot fi trimise în aceeași sesiune specificând ID-ul sesiunii.

notă

<valorile parametrilor> dintr-un PUB pot fi fie un singur parametru, fie o listă de parametri. De asemenea, acceptă broadcasting numpy.

Joburi Estimator în modul 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)
},
}

}

Joburi Sampler în modul 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)
},
}

}

Pași următori

Recomandări