Skip to main content
IBM Quantum Platform

Introducción a los modos de ejecución de Qiskit Runtime

Cuando se introdujo Qiskit Runtime, los usuarios sólo podían ejecutar circuitos como trabajos individuales. A medida que surgían distintos tipos de cargas de trabajo cuánticas, se hacía evidente la necesidad de diferentes estrategias de programación. Los modos de ejecución determinan cómo se programan sus trabajos, y elegir el modo de ejecución adecuado permite que su carga de trabajo se ejecute de forma eficiente dentro de su presupuesto. Existen tres modos de ejecución: trabajo, sesión y lote.


Modalidad de trabajo

Una única solicitud primitiva realizada sin un gestor de contexto. Los circuitos y las entradas se agrupan en bloques primitivos unificados (PUB) y se envían al ordenador cuántico como una tarea de ejecución. Para ejecutar en modo de trabajo, especifícalo mode=backend al instanciar una primitiva. Consulte los ejemplos de Estimator y los ejemplos de Sampler para ver cómo se utilizan.


Modalidad de proceso por lotes

Un gestor de múltiples tareas para ejecutar de forma eficiente experimentos que comprenden cargas de trabajo de múltiples tareas. Estas cargas de trabajo están compuestas por trabajos ejecutables de forma independiente que no tienen ninguna relación condicional entre sí. Con el modo por lotes, los usuarios envían todos sus trabajos a la vez.

El sistema paraleliza o divide en subprocesos la etapa de preprocesamiento (computación clásica) de cada tarea primitiva para agrupar más estrechamente la ejecución cuántica entre tareas, y luego ejecuta la ejecución cuántica de cada tarea en rápida sucesión para ofrecer los resultados más eficientes. Para obtener más información sobre el subprocesamiento, consulte la página de preguntas frecuentes sobre el modo de ejecución.

Un conjunto de trabajos que se ejecutan por lotes.  La parte de cálculo clásico de cada trabajo se realiza simultáneamente y, a continuación, todos los trabajos se envían a la QPU.  La QPU está bloqueada para su uso desde el momento en que el primer trabajo llega a la QPU hasta que el último trabajo termina de procesarse en la QPU.  No hay intervalos entre trabajos en los que la QPU esté inactiva.
Cómo funciona un lote
Notas
  • Cuando se procesan por lotes, no se garantiza que los trabajos se ejecuten en el orden en que se envían. Además, aunque tus trabajos por lotes se ejecutarán lo más juntos posible, no tienen acceso exclusivo al backend. Por lo tanto, sus trabajos por lotes podrían ejecutarse en paralelo con los trabajos de otros usuarios si hay suficiente capacidad de procesamiento en la QPU. Además, los trabajos de calibración QPU podrían ejecutarse entre los trabajos por lotes.
  • El tiempo de espera no disminuye para el primer trabajo enviado dentro de un lote. Por lo tanto, los lotes no aportan ninguna ventaja cuando se ejecuta un único trabajo.

Para ejecutar en modo por lotes, especifique mode=batch al instanciar una primitiva o ejecute el trabajo en un gestor de contexto por lotes. Consulte Ejecutar trabajos por lotes para ver ejemplos.


Modo de sesión

Una ventana específica para ejecutar una carga de trabajo multitarea. Durante esta ventana, el usuario tiene acceso exclusivo al sistema y no pueden ejecutarse otros trabajos, incluidos los de calibración. Esto permite a los usuarios experimentar con algoritmos variacionales de forma más predecible e incluso ejecutar múltiples experimentos simultáneamente, aprovechando el paralelismo de la pila. El uso de sesiones ayuda a evitar los retrasos causados por la puesta en cola de cada trabajo por separado, lo que puede ser particularmente útil para tareas iterativas que requieren una comunicación frecuente entre los recursos clásicos y cuánticos.

Un conjunto de trabajos se está ejecutando en modo sesión y el otro se está ejecutando en modo batch.  Entre cada trabajo se encuentra el TTL interactivo (interactive time to live).  La ventana activa comienza cuando se inicia el primer trabajo y termina cuando finaliza el último. Una vez finalizado el último trabajo del primer conjunto de trabajos, la ventana activa finaliza y la sesión se pausa (pero no se cierra).  A continuación, se inicia otra serie de trabajos y éstos continúan de forma similar. La QPU está reservada para su uso durante toda la sesión.
Cómo funciona una sesión

Para ejecutar en modo sesión, especifique mode=session al instanciar una primitiva, o ejecute el trabajo en un gestor de contexto de sesión. Consulte Ejecutar trabajos en una sesión para ver ejemplos.

Notas
  • El tiempo de espera no disminuye para el primer trabajo enviado dentro de una sesión. Por lo tanto, las sesiones no aportan ninguna ventaja cuando se ejecuta un único trabajo.
  • Los usuarios de Open Plan no pueden enviar trabajos de sesión.

Flujo de trabajo básico

El flujo de trabajo básico para lotes y sesiones es similar:

  1. El primer trabajo de un lote o sesión entra en la cola normal. En el caso de los lotes, se programa todo el lote de trabajos a la vez.
  2. Cuando el primer trabajo comienza a ejecutarse, se inicia el temporizador de tiempo máximo de vida (TTL), que no se detiene ni se pausa hasta que se alcanza el final.
  3. El temporizador TTL interactivo se inicia una vez finalizado cada trabajo. Si no hay trabajos de carga de trabajo listos dentro de la ventana TTL interactiva, la carga de trabajo se desactiva temporalmente y se reanuda la selección normal de trabajos. Un trabajo puede reactivar la carga de trabajo desactivada si el lote o la sesión no han alcanzado su valor TTL máximo.
    Note

    El trabajo debe pasar por la cola normal para reactivar la carga de trabajo.

  4. Si se alcanza el valor TTL máximo, la carga de trabajo finaliza y los trabajos en cola restantes fallan. Cualquier trabajo que se esté ejecutando en ese momento no se ejecutará hasta su finalización si al hacerlo se supera el límite de coste de la instancia.

El siguiente vídeo ilustra el flujo de trabajo básico, utilizando sesiones como ejemplo:

Para más detalles sobre los temporizadores TTL, consulte la guía Tiempo máximo de ejecución.


Próximos pasos

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.