Aller au contenu principal

Modes d'exécution via l'API REST

Tu peux exécuter tes charges de travail primitives Qiskit via des API REST dans l'un des trois modes d'exécution disponibles, selon tes besoins : job, session et batch. Ce sujet explique ces différents modes.

remarque

Cette documentation utilise le module Python requests pour illustrer l'API REST Qiskit Runtime. Ce flux de travail peut toutefois être exécuté avec n'importe quel langage ou framework prenant en charge les API REST. Consulte la documentation de référence de l'API pour plus de détails.

Mode job avec l'API REST

En mode job, une seule requête primitive de l'Estimator ou du Sampler est effectuée sans gestionnaire de contexte. Consulte les exemples d'exécution d'un circuit quantique avec Estimator et Sampler.

Mode session avec l'API REST

Une session est une fonctionnalité de Qiskit Runtime qui te permet d'exécuter efficacement des charges de travail itératives multi-jobs sur des ordinateurs quantiques. L'utilisation de sessions permet d'éviter les délais causés par la mise en file d'attente de chaque job séparément, ce qui peut être particulièrement utile pour les tâches itératives nécessitant des échanges fréquents entre ressources classiques et quantiques. Plus de détails sur les sessions sont disponibles dans la documentation.

remarque

Les utilisateurs du plan Open ne peuvent pas soumettre de jobs en session.

Démarrer une session

Commence par créer une session et obtenir un identifiant de 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'}

Fermer une session

Il est recommandé de fermer une Session une fois tous les jobs terminés. Cela réduira le temps d'attente pour les utilisateurs suivants.

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

Mode batch avec l'API REST

Tu peux également soumettre un job en batch en spécifiant le mode dans la charge utile de la requête. Le mode batch peut aider à réduire le temps de traitement si tous les jobs peuvent être fournis dès le départ. Découvre le mode batch dans le guide introduction aux modes d'exécution.

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

Exemples de jobs soumis dans une session

Une fois la session configurée, un ou plusieurs jobs Sampler ou Estimator peuvent être soumis à la même session en spécifiant l'identifiant de session.

remarque

Les <valeurs de paramètres> dans un PUB peuvent être soit un seul paramètre, soit une liste de paramètres. Le broadcasting numpy est également pris en charge.

Jobs Estimator en mode 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)
},
}

}

Jobs Sampler en mode 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)
},
}

}

Prochaines étapes

Recommandations