Modes d'exécution utilisant l'API REST
Versions de package
Le code présenté sur cette page a été développé en tenant compte des exigences suivantes. Nous vous recommandons d'utiliser ces versions ou des versions plus récentes.
qiskit[all]~=2.3.0
Vous pouvez exécuter vos charges de travail de base d' IBM Quantum à l'aide des API REST selon l'un des trois modes d'exécution suivants, en fonction de vos besoins : « job », « session » et « batch ». Cette rubrique présente ces modes.
Cette documentation utilise le requests module Python pour présenter l'API REST du service IBM Quantum Compute. Toutefois, ce workflow peut être exécuté à l'aide de n'importe quel langage ou framework prenant en charge l'utilisation des API REST. Pour plus de détails, consultez la documentation de référence de l'API.
Mode de travail avec API REST
En mode « job », une seule requête de base est envoyée à Estimator ou Sampler, sans gestionnaire de contexte. Découvrez comment exécuter un circuit quantique à l'aide d 'Estimator et de Sampler à travers quelques exemples.
Mode session avec API REST
Une session est une fonctionnalité qui permet d'exécuter efficacement des charges de travail itératives comportant plusieurs tâches sur des ordinateurs quantiques. L'utilisation de sessions permet d'éviter les retards liés à la mise en file d'attente séparée de chaque tâche, ce qui peut s'avérer particulièrement utile pour les tâches itératives nécessitant des échanges fréquents entre les ressources classiques et quantiques. Vous trouverez plus de détails sur les sessions dans la documentation.
Les utilisateurs du plan ouvert ne peuvent pas soumettre de travaux de session.
Commencer une session
Commencez par créer une session et obtenez 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())Sortie
{'id': 'crw9s7cdbt40008jxesg'}Fermer une session
Il est bon de fermer un site Session lorsque tous les travaux sont 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)Sortie
Session closure response ok?: TrueMode batch avec API REST
Vous pouvez également soumettre un travail par lots en spécifiant le mode dans le corps de la requête. Le mode batch peut permettre de réduire le temps de traitement si toutes les tâches peuvent être fournies dès le départ. Pour en savoir plus sur le mode batch, consultez le guide d'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 tâches soumises lors d'une session
Une fois qu'une session est créée, un ou plusieurs travaux d'échantillonneur ou d'estimateur peuvent être soumis à la même session en spécifiant l'identifiant de la session.
L'adresse <parameter values> dans une adresse PUB peut être un paramètre unique ou une liste de paramètres. Il prend également en charge la diffusion sur numpy .
Tâches de l'estimateur 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)
},
}
}job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [[obs1], [obs2], [obs3], [obs4]], [[vals1], [vals2]]]], #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_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, obs1],[resulting_qasm, obs2]], #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)
},
}
}Tâches d'échantillonnage 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)
},
}
}job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [vals1, vals2, vals3]]], #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_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [val1]],[resulting_qasm,None,100]], #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)
},
}
}Etapes suivantes
- Consultez les exemples détaillés de primitives Sampler à l'aide de l'API REST.
- Consultez les exemples détaillés de primitives Estimator à l'aide de l'API REST.
- Entraînez-vous à utiliser les primitives en suivant la leçon sur la fonction de coût sur le site IBM Quantum® Learning.
- Découvrez comment effectuer une transpilation en local dans la section « Transpilation ».