Sari la conținutul principal
Acest proiect este în versiune beta. Ai găsit o eroare? Deschide un issue pe GitHub. Ai o întrebare sau o idee? Întreabă în Discussions — ne-ar plăcea să aflăm părerea ta!
Cum este calitatea traducerii pe această pagină?

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. Această pagină 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.

Job mode cu REST API​

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

Session mode 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 sesiune​

Î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

Batch mode cu REST API​

Alternativ, poți trimite un job batch specificând mode în payload-ul cererii. Batch mode poate ajuta la scurtarea timpului de procesare dacă toate joburile pot fi furnizate de la început. Află despre batch mode î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 sesiune 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 session mode​

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.