Introducción a las primitivas
El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o versiones más recientes.
qiskit[all]~=2.3.0 qiskit-ibm-runtime~=0.43.1
¿Por qué Qiskit introdujo primitivas?
Al igual que en los primeros tiempos de los ordenadores clásicos, cuando los desarrolladores tenían que manipular directamente los registros de la CPU, la primera interfaz de las QPU se limitaba a devolver los datos brutos de la electrónica de control.
Esto no era un gran problema cuando las QPU vivían en laboratorios y sólo permitían el acceso directo de los investigadores.
Reconociendo que la mayoría de los desarrolladores no estarían ni deberían estar familiarizados con la destilación de tales datos brutos en 0s y 1s, Qiskit introdujo backend.run, una primera abstracción para acceder a las QPU en la nube. Esto permitió a los desarrolladores trabajar con un formato de datos familiar y centrarse en el panorama general.
A medida que se generalizaba el acceso a las QPU y se desarrollaban más algoritmos cuánticos, surgió de nuevo la necesidad de una abstracción de más alto nivel. En respuesta, Qiskit introdujo la interfaz de primitivas, que está optimizada para dos tareas centrales en el desarrollo de algoritmos cuánticos: estimación del valor de expectativa (Estimator) y muestreo de circuitos (Sampler). El objetivo es una vez más, ayudar a los desarrolladores a centrarse más en la innovación y menos en la conversión de datos. La interfaz de primitivas sustituye a la interfaz backend.run , ya que Sampler proporciona el mismo acceso directo al hardware que ofrecía backend.run.
¿Qué es un primitivo?
Los sistemas informáticos se construyen sobre múltiples capas de abstracción. Las abstracciones permiten centrarse en un determinado nivel de detalle relevante para la tarea en cuestión. Cuanto más te acerques al hardware menor será el nivel de abstracción que necesites (por ejemplo, puede que necesites mover o manipular datos al nivel de instrucción de la CPU). Cuanto más compleja sea la tarea que quieras realizar, mayor será el nivel de abstracción (por ejemplo, podría utilizar una biblioteca de programación para realizar cálculos algebraicos) cálculos algebraicos).
En este contexto, una primitiva es la instrucción de procesamiento más pequeña, el bloque de construcción más simple a partir del cual se puede crear algo útil para un determinado nivel de abstracción se puede crear algo útil para un determinado nivel de abstracción.
Los recientes avances en computación cuántica han aumentado la necesidad de trabajar a niveles más altos de abstracción. A medida que el campo avanza hacia unidades de procesamiento cuántico (QPU) más grandes y flujos de trabajo más complejos, la atención deja de centrarse en la interacción con señales de qubits individuales de los qubits individuales a ver los dispositivos cuánticos como sistemas que realizan las tareas necesarias.
Las dos tareas más comunes de los ordenadores cuánticos son el muestreo de estados cuánticos y el cálculo de valores de expectativa. Estas tareas motivaron el diseño de Qiskit primitives : Estimator and Sampler.
- El estimador calcula los valores de las expectativas de los observables con respecto a los estados preparados por los circuitos cuánticos.
- El muestreador muestrea el registro de salida de la ejecución del circuito cuántico.
En resumen, el modelo computacional introducido por Qiskit primitives acerca la programación cuántica un paso más a donde se encuentra hoy la programación clásica, donde la atención se centra menos en los detalles del hardware y más en los resultados que se intentan conseguir.
Definición primitiva e implementaciones
Hay dos tipos de « Qiskit primitives »: las clases base y sus implementaciones. Las primitivas Estimator y Sampler se definen mediante clases base de primitivas de código abierto que se encuentran en el paquete « Qiskit SDK » (en el qiskit.primitives módulo ). Los proveedores (como Qiskit Runtime ) pueden utilizar estas clases base para derivar sus propias implementaciones de Sampler y Estimator. La mayoría de los usuarios interactuarán con las implementaciones de los proveedores, no con las primitivas básicas.
clases base
Las Base primitivas son clases abstractas que definen una interfaz común para implementar primitivas. Todas las demás clases del qiskit.primitives módulo heredan de estas clases base. Los desarrolladores deberían utilizarlas si están interesados en crear su propio modelo de ejecución basado en primitivas para un proveedor específico. Estas clases también pueden resultar útiles para quienes deseen realizar un procesamiento muy personalizado y consideren que las implementaciones de las primitivas existentes son demasiado sencillas para sus necesidades. Los usuarios generales no utilizarán directamente las clases base.
BaseEstimatorV1 y BaseSamplerV1 - Aunque las primitivas de V1 siguen siendo válidas, estas guías se centran en las primitivas de V2, ya que son las más recientes y las más utilizadas.
BaseEstimatorV2 y BaseSamplerV2 - Las primitivas de referencia de Qiskit siguen estas especificaciones de interfaz.
Implementaciones
Todas las clases primitivas se derivan de las clases base; por lo tanto, tienen la misma estructura general y el mismo uso. Por ejemplo, el formato de los datos de entrada para todas las primitivas de Estimator es el mismo. Sin embargo, existen diferencias en su aplicación que las hacen únicas.
Son implementaciones de las clases base de las primitivas:
-
Las primitivas de Qiskit Runtime,
EstimatorV2ySamplerV2, ofrecen una implementación más sofisticada (por ejemplo, al incluir medidas de mitigación de errores) como servicio basado en la nube. Esta implementación de las primitivas básicas se utiliza para acceder al hardware de l IBM Quantum®. -
StatevectorEstimatoryStatevectorSampler- Implementaciones de referencia de las primitivas que utilizan el simulador integrado en Qiskit. Se han creado con el móduloquantum_infoQiskit y generan resultados basados en simulaciones con vectores de estado ideales. Se accede a ellos a través de Qiskit. Consulte «Simulación exacta con Qiskit primitives » para obtener más información sobre su uso. -
BackendEstimatorV2yBackendSamplerV2- Puedes utilizar estas clases para «envolver» cualquier recurso de computación cuántica en una primitiva. Esto te permite escribir código de estilo primitivo para proveedores que aún no cuentan con una interfaz basada en primitivas. Estas clases se pueden utilizar igual que el Sampler y el Estimator habituales, salvo que deben inicializarse con un argumentobackendadicional para seleccionar en qué ordenador cuántico se van a ejecutar. Se accede a ellos mediante Qiskit. Consulte la guía de primitivas del backend para obtener más información.
Opciones
Puedes pasar opciones a los tipos primitivos para personalizarlos según tus necesidades. Aunque la interfaz del método run() de las primitivas es común a todas las implementaciones, sus opciones no lo son. Consulte las referencias de la API de una implementación de primitiva concreta para conocer las opciones que admite.
Por ejemplo, consulta los apartados «Opciones de Estimator» y «Opciones de Sampler» para obtener información sobre las opciones de las primitivas de Qiskit Runtime, o consulta las referencias de la API de Qiskit Aer para conocer las opciones de las primitivas de Qiskit Aer.
Ventajas de Qiskit primitives
Con primitivas, los usuarios de Qiskit pueden escribir código cuántico para una QPU específica sin tener que
gestionar explícitamente cada detalle. Además, debido a la capa adicional de abstracción, es posible que pueda acceder más fácilmente
a las capacidades avanzadas de hardware de un proveedor determinado. Por ejemplo, con las primitivas de Qiskit Runtime,
puede aprovechar los últimos avances en mitigación y supresión de errores activando opciones como la primitiva resilience_level, en lugar de crear su propia implementación de estas técnicas.
Para los proveedores de hardware, implementar primitivas de forma nativa significa que pueden ofrecer a sus usuarios una forma más "lista para usar" de acceder a las funciones de su hardware, como las técnicas avanzadas de posprocesamiento de acceder a las funciones de su hardware, como las técnicas avanzadas de posprocesamiento. Así es más fácil que sus usuarios se beneficien de las mejores capacidades de su hardware.
Próximos pasos
- Comprender las operaciones primitivas de entrada y salida.
- Revisa los ejemplos detallados.
- Practique con las primitivas trabajando en la lección sobre la función de coste en IBM Quantum Learning.
- Consulte la sección «Crear un proveedor» para saber cómo implementar sus propias primitivas Sampler y Estimator.
- Consulte las referencias de la API.
- Lea Migrar a V2 primitives.
- Descubre las primitivas de « Qiskit Runtime », que se utilizan para ejecutar circuitos en las QPU de « IBM ».