Vai al contenuto principale

Modalità di esecuzione tramite REST API

Puoi eseguire i carichi di lavoro primitivi di Qiskit tramite REST API in una delle tre modalità di esecuzione disponibili, a seconda delle tue esigenze: job, session e batch. Questo argomento illustra queste modalità.

nota

Questa documentazione utilizza il modulo Python requests per dimostrare l'uso della REST API di Qiskit Runtime. Tuttavia, questo flusso di lavoro può essere eseguito con qualsiasi linguaggio o framework che supporti le REST API. Consulta la documentazione di riferimento delle API per i dettagli.

Modalità job tramite REST API

In modalità job, viene effettuata una singola richiesta primitiva all'Estimator o al Sampler senza un context manager. Consulta come eseguire un circuito quantistico usando Estimator e Sampler per alcuni esempi.

Modalità session tramite REST API

Una session è una funzionalità di Qiskit Runtime che ti consente di eseguire in modo efficiente carichi di lavoro iterativi multi-job sui computer quantistici. L'utilizzo delle session aiuta a evitare i ritardi causati dall'accodamento separato di ogni job, il che può essere particolarmente utile per le attività iterative che richiedono una comunicazione frequente tra risorse classiche e quantistiche. Ulteriori dettagli sulle Session sono disponibili nella documentazione.

nota

Gli utenti del piano Open non possono inviare job in session.

Avviare una session

Inizia creando una session e ottenendo un ID di 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'}

Chiudere una session

È buona pratica chiudere una Session quando tutti i job sono completati. Questo ridurrà i tempi di attesa per gli utenti successivi.

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

Modalità batch tramite REST API

In alternativa, puoi inviare un job in batch specificando la mode nel payload della richiesta. La modalità batch può contribuire a ridurre i tempi di elaborazione se tutti i job possono essere forniti fin dall'inizio. Scopri di più sulla modalità batch nella guida all'introduzione alle modalità di esecuzione.

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

Esempi di job inviati in una session

Una volta configurata una session, uno o più job Sampler o Estimator possono essere inviati alla stessa session specificando l'ID di session.

nota

I <valori dei parametri> in un PUB possono essere un singolo parametro o un elenco di parametri. Supporta anche il broadcasting con numpy.

Job Estimator in modalità 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)
},
}

}

Job Sampler in modalità 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)
},
}

}

Passi successivi

Raccomandazioni