Sari la conținutul principal

Moduri de execuție folosind REST API

Package versions

Codul din această pagină a fost dezvoltat folosind următoarele cerințe. Recomandăm utilizarea acestor versiuni sau a unora mai noi.

qiskit[all]~=2.3.0

Poți rula sarcinile de lucru cu primitive IBM Quantum folosind API-uri REST în unul din cele 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 IBM Quantum Compute Service. Totuși, acest flux de lucru poate fi executat folosind orice limbaj sau framework care suportă 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 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ă

<parameter values> dintr-un PUB poate fi fie un singur parametru, fie o listă de parametri. De asemenea, suportă 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)
},
}

}

Sampler jobs in session mode​

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
  • Consultă exemple detaliate de primitive Sampler folosind REST API.
  • Consultă exemple detaliate de primitive Estimator folosind REST API.
  • Exersează cu primitivele parcurgând lecția despre funcția de cost din IBM Quantum® Learning.
  • Află cum să transpilezi local în secțiunea Transpile.