Skip to main content
IBM Quantum Platform

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.

Note

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.

Note

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?: True

Mode 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.

Note

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

}

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

}

Etapes suivantes

Recommandations
  • 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 ».
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.