Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

Modalità di esecuzione tramite REST API

Package versions

Il codice in questa pagina è stato sviluppato utilizzando i seguenti requisiti. Consigliamo di utilizzare queste versioni o versioni più recenti.

qiskit[all]~=2.3.0

Puoi eseguire i carichi di lavoro primitivi di IBM Quantum 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 IBM Quantum Compute Service. 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.

Job mode tramite REST API​

In job mode, 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.

Session mode tramite REST API​

Una session è una funzionalità 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

Batch mode tramite REST API​

In alternativa, puoi inviare un job in batch specificando la mode nel payload della richiesta. Batch mode può contribuire a ridurre i tempi di elaborazione se tutti i job possono essere forniti fin dall'inizio. Scopri di più su batch mode 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 <parameter values> in un PUB possono essere un singolo parametro o un elenco di parametri. Supporta anche il broadcasting di numpy.

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

}

Passi successivi​

Raccomandazioni
  • Consulta esempi dettagliati delle primitive Sampler tramite REST API.
  • Consulta esempi dettagliati delle primitive Estimator tramite REST API.
  • Esercitati con le primitive seguendo la lezione sulle funzioni di costo in IBM Quantum® Learning.
  • Scopri come eseguire la transpilazione in locale nella sezione Transpile.