Esta guía describe patrones clave de comportamiento y casos de uso con ejemplos de código para ayudarte a migrar el código del paquete anterior qiskit-ibmq-provider para usar las primitivas de Qiskit Runtime.
Las primitivas son la herramienta recomendada para escribir algoritmos cuánticos, ya que encapsulan las consultas de dispositivos comunes que se ven en los paquetes de aplicaciones y permiten el rendimiento administrado a través del servicio Qiskit Runtime. Sin embargo, si tu algoritmo requiere información más granular, como mediciones previas a las iteraciones, es posible que las primitivas no proporcionen el nivel de abstracción deseado.
Las primitivas de Qiskit Runtime implementan las interfaces de referencia Sampler y Estimator que se encuentran en qiskit.primitives. Estas interfaces te permiten cambiar entre implementaciones primitivas con cambios de código mínimos. Se pueden encontrar diferentes implementaciones primitivas en las bibliotecas qiskit, qiskit_aer, y qiskit_ibm_runtime. Cada implementación tiene un propósito específico:
Las primitivas en qiskit pueden realizar simulaciones de vectores de estado locales, útiles para crear prototipos de algoritmos rápidamente.
Las primitivas en qiskit_aer dan acceso a los simuladores Aer locales para tareas como simulación ruidosa.
Las primitivas en qiskit_ibm_runtime brindan acceso a simuladores en la nube y hardware real a través del servicio Qiskit Runtime. Incluyen funciones exclusivas, como la optimización de circuitos integrados y la compatibilidad con la mitigación de errores.
Atención
Las únicas primitivas que brindan acceso al servicio Qiskit Runtime son las importadas de qiskit_ibm_runtime (Qiskit Runtime Primitives).
Al migrar, la clave para escribir un algoritmo equivalente utilizando primitivas es identificar primero cuál es la unidad mínima de información en la que se basa tu algoritmo:
Si usas un valor esperado, necesitarás un Estimator.
Si usa una distribución de probabilidad (del muestreo del dispositivo), necesitarás un Sampler.
Después de determinar qué primitiva usar, identifica dónde accede el algoritmo al backend. Busca la llamada a backend.run(). A continuación, reemplazarás esta llamada con la llamada primitiva respectiva, como se muestra en los siguientes ejemplos.
Nota
Some qiskit libraries provide their own backend.run() wrappers, for example: QuantumInstance,
formerly used in qiskit.algorithms. To migrate code that has such dependencies, replace the execution
method with the corresponding primitive.
This guide has examples for two basic types of users:
Los desarrolladores de algoritmos que necesitan refactorizar algoritmos para usar primitivas en lugar de backend.run deben consultar estos temas:
Algorithm users that refer to Qiskit algorithms but do not directly use primitives. These users now need to pass in a primitive instead of a backend to the updated Qiskit algorithms. Refer to this topic for details:
Bloques de construcción de algoritmos simplificados
Interfaz flexible
Integración informática elástica
Eficiencia de encolamiento
Caché de datos
Soporte de mitigación de errores
Habilitación de SAAS
Clave:
No soportado
Soporte completo
Soporte futuro
Beneficios de usar Qiskit Runtime:
Simplifica el diseño y la optimización de algoritmos.
Ejecuta circuitos más rápido mediante el uso de sesiones: un administrador de contexto diseñado para administrar de manera eficiente las cargas de trabajo iterativas y minimizar la latencia artificial entre los subcomponentes cuánticos y clásicos.
Accede a nuestros sistemas cuánticos más potentes con nuestro último rendimiento y optimización de hardware, incluidas las capacidades como la supresión y mitigación de errores.
Integra fácilmente Qiskit Runtime con tu nube o recursos computacionales clásicos locales mediante el uso del kit de herramientas sin servidor cuántico.
Los usuarios pueden tener las siguientes preguntas cuando planean migrar su código a Qiskit Runtime:
Which channel should I use?
Después de decidir utilizar las primitivas de Qiskit Runtime, el usuario debe determinar si accederá a Qiskit Runtime a través de IBM Cloud o IBM Quantum Platform. Alguna información que podría ayudarte a decidir incluye:
Los planes disponibles:
Qiskit Runtime está disponible en el plan Open (acceso gratuito) o Premium (acceso pagado basado en contrato) en IBM Quantum Platform. Consulta Planes de acceso de IBM Quantum para obtener detalles.
Se puede acceder a Qiskit Runtime a través del plan Lite (acceso gratuito) o Estándar (acceso de pago por uso) en IBM Cloud. Consulta Planes para obtener detalles.
Los requerimientos de caso de uso:
IBM Quantum Platform ofrece un compositor visual de circuitos (Quantum Composer) y un entorno de Jupyter Notebook (Quantum Lab).
IBM Cloud ofrece un servicio nativo en la nube que es ideal si los usuarios necesitan integrar capacidades cuánticas con otros servicios en la nube.
How do I set up my channel?
Después de decidir qué canal usar para interactuar con Qiskit Runtime, puedes configurar cualquiera de las plataformas siguiendo las instrucciones a continuación:
A partir de la v0.22, los algoritmos de Qiskit Terra usan primitivas de Qiskit Runtime. Por lo tanto, no es necesario que los usuarios modifiquen los estimadores de amplitud o cualquier otro algoritmo de Qiskit Terra.
Which primitive should I use?
Al elegir qué primitiva usar, primero debes comprender si el algoritmo usa una distribución de cuasi-probabilidad muestreada de un estado cuántico (una lista de cuasi-probabilidades) o un valor esperado de un cierto observable con respecto a un estado cuántico (un número real).
Una distribución de probabilidad suele ser de interés en los problemas de optimización que devuelven una cadena de bits clásica, codificando una determinada solución para un problema en cuestión. En estos casos, podrías estar interesado en encontrar una cadena de bits que corresponda a un valor ket con la mayor probabilidad de ser medido desde un estado cuántico, por ejemplo.
Un valor esperado de un observable podría ser la cantidad objetivo en escenarios donde conocer un estado cuántico no es relevante. Esto ocurre a menudo en problemas de optimización o aplicaciones químicas. Por ejemplo, cuando se trata de descubrir la energía extrema de un sistema.