Elige el modo de ejecución adecuado
Las cargas de trabajo a escala de utilidad (utility-scale) pueden tardar muchas horas en completarse, por lo que es importante que tanto los recursos clásicos como los cuánticos se programen de manera eficiente para agilizar la ejecución. Los modos de ejecución proporcionan flexibilidad para equilibrar el costo y el tiempo y usar los recursos de manera óptima para tus cargas de trabajo. Hay varios aspectos a considerar al elegir qué modo de ejecución usar, como el tiempo general de ejecución (tiempo máximo de vida, o TTL) y el tiempo entre trabajos (TTL interactivo).
Los beneficios de cada uno se resumen a continuación:
- Lote (Batch)
- El lote completo de trabajos (jobs) se programa junto y no hay tiempo de espera (queuing) adicional para cada uno.
- La computación clásica de los trabajos, como la compilación, se ejecuta en paralelo. Por lo tanto, ejecutar múltiples trabajos en un lote es significativamente más rápido que ejecutarlos en serie.
- Usualmente hay un retraso mínimo entre trabajos, lo que puede ayudar a evitar la desviación (drift).
- Si particionas tu carga de trabajo en múltiples trabajos y los ejecutas en modo por lotes, puedes obtener resultados de trabajos individuales, lo que los hace más flexibles para trabajar. Por ejemplo, si los resultados de un trabajo no cumplen con tus expectativas, puedes cancelar los trabajos restantes. Además, si un trabajo falla, puedes volver a enviarlo en lugar de volver a ejecutar toda la carga de trabajo.
- En general, es menos costoso que las sesiones.
- Sesión (Session)
- Toda la funcionalidad del modo por lotes (pero requiriendo un mayor uso; consulta Uso de carga de trabajo para obtener más detalles sobre cómo se calcula el uso).
- Acceso dedicado y exclusivo a la QPU durante la ventana activa de la sesión.
- Útil para cargas de trabajo que no tienen todas las entradas listas desde el principio, para cargas de trabajo iterativas que requieren posprocesamiento clásico antes de que pueda ejecutarse la siguiente, y para experimentos que necesitan ejecutarse lo más cerca posible entre sí.
- Trabajo (Job)
- El más fácil de usar al ejecutar un experimento pequeño.
- Podría ejecutarse antes que el modo por lotes.
Recomendaciones y mejores prácticas
Generalmente, usa el modo por lotes a menos que tengas cargas de trabajo que no tengan todas las entradas listas desde el principio.
-
Usa el modo por lotes (batch) para enviar múltiples trabajos de primitivas simultáneamente para acortar el tiempo de procesamiento.
-
Usa el modo sesión (session) para cargas de trabajo iterativas, o si necesitas acceso dedicado a la QPU.
-
Siempre usa el modo trabajo (job) para enviar una sola solicitud de primitiva.
-
Debido a que las sesiones son generalmente más costosas, se recomienda que uses el modo por lotes siempre que no necesites los beneficios adicionales de usar sesiones.
-
Los usuarios del Plan Abierto (Open Plan) no pueden enviar trabajos de sesión.
Para asegurar el uso más eficiente de los modos de ejecución, se recomiendan las siguientes prácticas:
-
Hay una sobrecarga (overhead) fija asociada a la ejecución de un trabajo. En general, si cada uno de tus trabajos usa menos de un minuto de tiempo de QPU, considera combinar varios en un trabajo más grande (esto aplica a todos los modos de ejecución). "Tiempo de QPU" refiere al tiempo que gasta el complejo de la QPU procesando tu trabajo.
-
Si cada uno de tus trabajos consume más de un minuto de tiempo de QPU, o si combinar trabajos no es práctico, aún puedes ejecutar múltiples trabajos en paralelo. Cada trabajo pasa por procesamiento tanto clásico como cuántico. Mientras que una QPU solo puede procesar un trabajo a la vez, se pueden procesar hasta cinco trabajos clásicos en paralelo. Puedes aprovechar esto enviando múltiples trabajos en modo de ejecución por lotes o por sesión.
Las anteriores son pautas generales, y debes ajustar tu carga de trabajo para encontrar la proporción óptima, especialmente al usar sesiones. Por ejemplo, si estás usando una sesión para obtener acceso exclusivo a un backend, considera dividir los trabajos grandes en otros más pequeños y ejecutarlos en paralelo. Esto podría ser más rentable (cost-effective) ya que puede reducir el tiempo real (wall-clock time).
Ejemplos
Ejecutar un algoritmo variacional cuántico
La ejecución de un algoritmo variacional cuántico (quantum variational algorithm) típicamente sigue este flujo:
- Prepara el ansatz.
- Evalúa la función de costo en una QPU.
- Toma el resultado del paso anterior y ejecútalo a través de un optimizador clásico.
- Ajusta los parámetros según la salida de (3), luego vuelve al paso (2).
En este caso, si usaras el modo de trabajo (job) o lote (batch), cada trabajo generado por el paso (2) tendría que volver a entrar a la cola. Esto incrementa drásticamente la longitud del experimento (tiempo real) debido al tiempo en la cola. También podría tardar más en converger debido a la desviación (drift) del dispositivo. Es decir, se supone que cada iteración te dará un mejor resultado, pero la desviación del dispositivo podría empeorar los resultados posteriores.
Además, si utilizas PEA o PEC, puedes aprender el modelo de ruido una vez y aplicarlo a los trabajos posteriores cuando se ejecute en una sesión dedicada. Normalmente, esto no funciona con el modo por lotes o por trabajos debido a que el modelo de ruido podría volverse obsoleto (stale) para cuando el siguiente trabajo salga de la cola de espera.
Comparar ajustes de mitigación de errores
Para comparar los efectos de los métodos de mitigación de errores disponibles, podrías seguir este flujo:
- Construye un circuito y un observable.
- Envía trabajos de primitivas que utilicen diferentes combinaciones de configuraciones (settings) de mitigación de errores.
- Graficar los resultados para observar los efectos de los diferentes ajustes prestablecidos.
En este caso, todos los trabajos (que están relacionados pero son independientes) están disponibles desde el inicio. Si usas el modo por lotes, se programan de manera colectiva, así que solo tienes que esperar a que pasen por la cola una sola vez. Adicionalmente, debido a que la meta es comparar los efectos de varios métodos de mitigación de errores, es beneficioso que se ejecuten lo más cerca posible entre sí. Por lo tanto, el modo por lotes sería una buena elección. Podrías ejecutar estos trabajos en una sesión, pero debido a que las sesiones son generalmente más costosas, se recomienda que uses el modo por lotes siempre que no necesites la funcionalidad adicional que proporcionan las sesiones.