Skip to main content
IBM Quantum Platform

Modos de ejecución utilizando la API REST

Versiones del paquete

El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o posteriores.

qiskit[all]~=2.3.0

Puede ejecutar sus cargas de trabajo primitivas Qiskit utilizando las API REST en uno de los tres modos de ejecución, en función de sus necesidades: trabajo, sesión y lote. En este tema se explican estos modos.

Note

Esta documentación utiliza el módulo Python requests para demostrar la API REST Qiskit Runtime. Sin embargo, este flujo de trabajo puede ejecutarse utilizando cualquier lenguaje o framework que soporte el trabajo con APIs REST. Consulte la documentación de referencia de la API para obtener más información.


Modo de trabajo con API REST

En el modo de trabajo, se realiza una única solicitud básica a Estimator o Sampler sin un gestor de contexto. Consulte cómo ejecutar un circuito cuántico utilizando Estimator y Sampler para ver algunos ejemplos.


Modo de sesión con API REST

Una sesión es una función de « Qiskit Runtime » que permite ejecutar de forma eficiente cargas de trabajo iterativas con múltiples tareas en ordenadores cuánticos. El uso de sesiones ayuda a evitar los retrasos provocados por la puesta en cola de cada trabajo por separado, lo que puede resultar especialmente útil para tareas iterativas que requieren una comunicación frecuente entre los recursos clásicos y cuánticos. Encontrarás más detalles sobre las sesiones en la documentación.

Note

Los usuarios de Open Plan no pueden enviar trabajos de sesión.

Iniciar una sesión

Comience por crear una sesión y obtener un ID de sesión.

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

Resultado

{'id': 'crw9s7cdbt40008jxesg'}

Cerrar sesión

Es una buena práctica cerrar Session cuando todos los trabajos estén terminados. Esto reducirá el tiempo de espera para los usuarios posteriores.

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)

Resultado

Session closure response ok?: True

Modo por lotes con API REST

También puedes enviar un trabajo por lotes especificando el mode en la carga útil de la solicitud. El modo por lotes puede ayudar a reducir el tiempo de procesamiento si todos los trabajos se pueden proporcionar desde el principio. Obtén más información sobre el modo por lotes en la guía de introducción a los modos de ejecución.

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

Ejemplos de trabajos enviados en una sesión

Una vez configurada una sesión, pueden enviarse a la misma uno o varios trabajos del Muestreador o del Estimador especificando el ID de sesión.

Note

<parameter values> en PUB puede ser un único parámetro o una lista de parámetros. También admite la emisión numpy .

Trabajos de estimación en modo sesión

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

}

Trabajos de muestreo en modo sesión

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

}

Próximos pasos

Recomendaciones
  • Consulte ejemplos detallados de primitivas de Sampler mediante la API REST.
  • Consulte ejemplos detallados de primitivas de Estimator mediante la API REST.
  • Practique con las primitivas trabajando en la lección sobre la función de coste en IBM Quantum® Learning.
  • Descubre cómo realizar la transpilación de forma local en la sección «Transpilación ».
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.