Skip to main content
IBM Quantum Platform

Modalità di esecuzione tramite API REST

Versioni del pacchetto

Il codice presente in questa pagina è stato sviluppato sulla base dei seguenti requisiti. Si consiglia di utilizzare queste versioni o quelle più recenti.

qiskit[all]~=2.3.0

È possibile eseguire i carichi di lavoro primitivi di IBM Quantum utilizzando le API REST in una delle tre modalità di esecuzione disponibili, a seconda delle proprie esigenze: job, sessione e batch. In questa sezione vengono illustrate tali modalità.

Note

La presente documentazione utilizza il modulo requests Python per illustrare l'API REST del servizio IBM Quantum Compute. Tuttavia, questo flusso di lavoro può essere eseguito utilizzando qualsiasi linguaggio o framework che supporti l'utilizzo delle API REST. Per ulteriori dettagli, consultare la documentazione di riferimento dell'API.


Modalità di lavoro con API REST

In modalità job, viene inviata una singola richiesta primitiva a Estimator o Sampler senza un gestore di contesto. Per alcuni esempi, scopri come eseguire un circuito quantistico utilizzando Estimator e Sampler.


Modalità sessione con API REST

Una sessione è una funzionalità che consente di eseguire in modo efficiente carichi di lavoro iterativi con più processi sui computer quantistici. L'uso delle sessioni consente di evitare i ritardi causati dall'accodamento separato di ogni singolo processo, il che può rivelarsi particolarmente utile per le attività iterative che richiedono una comunicazione frequente tra risorse classiche e quantistiche. Maggiori dettagli sulle sessioni sono disponibili nella documentazione.

Note

Gli utenti di Open Plan non possono inviare lavori di sessione.

Avvia una sessione

Si inizia creando una sessione e ottenendo un ID di sessione.

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())

Emissione

{'id': 'crw9s7cdbt40008jxesg'}

Chiudi una sessione

È buona norma chiudere il sito Session quando tutti i lavori sono stati 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)

Emissione

Session closure response ok?: True

Modalità batch con API REST

In alternativa, è possibile inviare un processo batch specificando il mode nel payload della richiesta. La modalità batch può contribuire a ridurre i tempi di elaborazione se tutti i lavori vengono forniti all'inizio. Scopri la modalità batch nella guida introduttiva 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 lavori inviati in una sessione

Una volta impostata una sessione, è possibile inviare uno o più lavori di Sampler o Estimator alla stessa sessione specificando l'ID della sessione.

Note

<parameter values> in un PUB può essere un singolo parametro o un elenco di parametri. Supporta anche la trasmissione su numpy .

Lavori di stima in modalità sessione

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)
                },
}

}

Lavori di campionamento in modalità sessione

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

Suggerimenti
  • Esamina gli esempi dettagliati delle primitive Sampler utilizzando l'API REST.
  • Esamina gli esempi dettagliati delle primitive di Estimator utilizzando l'API REST.
  • Esercitatevi con le primitive lavorando alla lezione sulla funzione Costo in IBM Quantum® Learning.
  • Scopri come eseguire la transpilazione in locale nella sezione " Transpilazione ".
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.