¿Qué son Q# y el Quantum Development Kit?

El Quantum Development Kit (QDK) es el SDK necesario para interactuar con el servicio Azure Quantum. Está integrado en el portal de Azure Quantum, donde puede desarrollar programas mediante los cuadernos de Jupyter Notebook hospedados gratuitamente. También puede instalar el QDK localmente en el equipo para usar su propio entorno de desarrollo local y trabajar tanto en línea como sin conexión con el servicio Azure Quantum. Quantum Development KitCon , puede compilar programas que se ejecutan en hardware cuántico en Azure Quantum.

El QDK incluye el lenguaje de programación cuántica , un lenguaje Q#de programación de código abierto de alto nivel que permite centrar el trabajo en el nivel de algoritmo y aplicación para crear programas cuánticos.

El QDK ofrece compatibilidad con Q#, pero también para Qiskit y Cirq para la computación cuántica, por lo que si ya trabaja en otros lenguajes de desarrollo, también puede ejecutar los circuitos en Azure Quantum.

El QDK contiene componentes que se pueden usar de forma independiente, independientemente del servicio Azure Quantum:

Introducción a Q# y Quantum Development Kit

Para acceder directamente, puede explorar Q# en el portal de Azure Quantum sin que sea necesario instalarlo. Para más información, vea Introducción a Q# y los cuadernos de Azure Quantum.

Para ver otras opciones de entorno de desarrollo, consulte Configuración de Quantum Development Kit.

El lenguaje de programación cuántica Q#

Q# es un lenguaje de programación de alto nivel y de código abierto para desarrollar y ejecutar algoritmos cuánticos. Forma parte de Quantum Development Kit (QDK) y está diseñado para ser independiente del hardware, escalar a toda la gama de aplicaciones cuánticas y optimizar la ejecución. Para más información sobre el proyecto de desarrollo del lenguaje Q#, vea el repositorio de diseño de bibliotecas principales y Q# en GitHub.

Como lenguaje de programación, Q# dibuja elementos conocidos de Python, C# y F#, y admite un modelo de procedimientos básico para escribir programas con bucles, instrucciones if/then y tipos de datos comunes. También presenta nuevas estructuras y operaciones de datos específicas de cuanto, como la repetición hasta el éxito y la estimación de fase adaptable, que permiten la integración de cálculos cuánticos y clásicos. Por ejemplo, el control de flujo de un programa clásico se puede basar en el resultado de una medida cuántica.

Integración con cálculos cuánticos y clásicos

Q# es un lenguaje independiente que ofrece un alto nivel de abstracción. No hay ninguna noción de un estado cuántico o un circuito; en su lugar, Q# implementa programas en términos de instrucciones y expresiones, de forma muy similar a los lenguajes de programación clásicos. Las distintas funcionalidades cuánticas (como la compatibilidad con funtores y construcciones de flujo de control) facilitan la expresión de, por ejemplo, la estimación de fase y algoritmos de química cuántica.

El lenguaje Q# admite la integración en la computación clásica y cuántica enriquecida. Esto permite una expresión limpia de algoritmos adaptables como la operación de estimación de fase de recorrido aleatorio que son difíciles de expresar directamente en el modelo de circuitos de una secuencia fija de puertas cuánticas.

Q# admite el control de flujo clásico general durante la ejecución de un algoritmo. En concreto, el control de flujo clásico se basa en los resultados de medición cuántica, lo que facilita mucho la escritura de elementos que dependen de medidas intermedias. Por ejemplo, el bucle necesario para algoritmos probabilísticos como la búsqueda de Grover se puede expresar fácilmente en Q#, en lugar de tener que volver al controlador clásico para comprobar si el resultado satisface el oráculo y volver a ejecutarlo en caso contrario.

Cúbits como referencias opacas

En Q#, los cúbits son un recurso que se solicita desde el entorno de ejecución cuando son necesarios y se devuelven cuando ya no están en uso. Esto es similar a la forma en que los lenguajes clásicos se ocupan de la memoria del montón.

En Q#, los cúbits se modelan como tipos de datos opacos que representan una referencia a un sistema cuántico de dos estados específico, ya sea físico o lógico (con correcciones de errores), en el que se pueden realizar operaciones cuánticas. Esta es una vista operativa de los cúbits: es decir, los cúbits se definen por lo que se puede hacer con ellos.

El tiempo de ejecución decide la asignación de una variable de cúbit cuántico de un programa a un cúbit lógico o físico real, y esa asignación se puede aplazar hasta después de que se conozca la topología y otros detalles del target dispositivo. El entorno de ejecución es responsable de determinar una asignación que permita que el algoritmo se ejecute, incluida cualquier transferencia de estado del cúbit y la asignación necesaria durante la ejecución.

La representación usada en Q# tiene la implicación interesante de que toda la computación cuántica real se realiza por efecto secundario. No hay ninguna manera de interactuar directamente con el estado cuántico del equipo; no tiene ninguna representación de software. En su lugar, se realizan operaciones en entidades de cúbits que tienen el efecto secundario de modificar el estado cuántico. De hecho, el estado cuántico del equipo es una variable global opaca a la que no se puede acceder excepto a través de un pequeño conjunto de primitivas (medidas) del descriptor de acceso, e incluso estos descriptores de acceso tienen efectos secundarios en el estado cuántico, por lo que en realidad son "mutadores con resultados" más que auténticos descriptores de acceso.

Respeto de las leyes de la física

Los programas cuánticos deben ser necesarios para respetar las leyes de la física. Por ejemplo, no es posible copiar el estado de un cúbit o acceder directamente al estado del cúbit en Q#.

Por lo tanto, Q# no tiene capacidad para entrar directamente en el estado de un cúbit u otras propiedades de la mecánica cuántica, lo que garantiza que un programa de Q# se pueda ejecutar físicamente en cualquier equipo cuántico. En su lugar, un programa de Q# tiene la capacidad de llamar a operaciones y funciones, como DumpOperation operation, para extraer información clásica de un cúbit, lo que permite la validación y el examen de estado para facilitar la depuración con un simulador. Para más información, consulte prueba y depuración.

Independiente del hardware

Q# es independiente del hardware, lo que significa que proporciona los medios para expresar y aprovechar conceptos eficaces de computación cuántica independientemente de cómo evolucione el hardware en el futuro. Para poder usarse en una amplia gama de aplicaciones, Q# le permite crear componentes y capas de abstracciones reutilizables. Para lograr un buen rendimiento con el tamaño creciente de hardware cuántico, el lenguaje de programación cuántica Q# garantiza la escalabilidad de las aplicaciones y del esfuerzo de desarrollo. Aunque la complejidad completa de estos cálculos requiere más desarrollo de hardware, Q# los programas se targetpueden ejecutar en varios back-end de hardware cuántico en Azure Quantum.

Ejecución eficaz

El lenguaje Q# se centra en expresar información para optimizar la ejecución de componentes cuánticos, independientemente del contexto en el que se invocan. Q# permite al desarrollador comunicar sus conocimientos sobre un cálculo para que el compilador pueda tomar una decisión informada sobre cómo traducirlo en instrucciones, aprovechando la información sobre la aplicación de un extremo a otro que no está disponible para el desarrollador.

Para obtener más información sobre las características de QDK y las partes generales que caben en un programa de Q#, consulte la Q# guía del usuario del lenguaje de programación cuántico.

Flujo de trabajo de desarrollo cuántico con el QDK

Al compilar y ejecutar un programa cuántico, el QDK crea una instancia del simulador cuántico y le pasa el Q# código. El simulador utiliza el código de Q# para crear cúbits (simulaciones de partículas cuánticas) y aplicar transformaciones para modificar su estado. Después, los resultados de las operaciones cuánticas del simulador se devuelven al programa. Al aislar el código de Q# en el simulador, se garantiza que los algoritmos sigan las leyes de la física cuántica y que se puedan ejecutar correctamente en los equipos cuánticos.

Todo lo que necesita para escribir y ejecutar programas de Q#, incluido el compilador de Q#, las bibliotecas de Q# y los simuladores cuánticos, se implementa previamente en los cuadernos de Jupyter Notebook hospedados en el Azure Portal. El QDK también se puede instalar y ejecutar desde el equipo local, por lo que puede usar el IDE y el lenguaje que prefiera localmente y enviar trabajos a hardware cuántico o simuladores basados en la nube en Azure Quantum, o bien trabajar con simuladores locales. Para más información, vea Configuración del entorno de desarrollo cuántico.

En el diagrama siguiente se muestran las fases por las que pasa un programa cuántico desde una idea a una implementación completa en Azure Quantum, y las herramientas que ofrece el QDK para cada fase.

Diagrama que muestra el flujo de trabajo del desarrollo de programación cuántica.

Nota:

Use el mismo código de Q# para todos los pasos del flujo de trabajo. A corto plazo, es posible que tenga que ajustar algunas partes del código para tener en cuenta las limitaciones de hardware actuales. Pero, a largo plazo, podrá cambiar de un simulador y proveedor de hardware a otro sin modificar el código.

Escritura del programa cuántico

Un programa de Q# se puede compilar en una aplicación independiente, ejecutar en un cuaderno de Jupyter Notebook, o bien llamar desde un programa host escrito en Python o un lenguaje de .NET.

Si quiere empezar a practicar y escribir sus programas de Q# sin instalar software adicional, puede usar los cuadernos de Jupyter Notebook hospedados disponibles en el área de trabajo de Azure Quantum en el Azure Portal. La galería de ejemplos contiene una colección de ejemplos de cuadernos anotados: seleccione el ejemplo que desea explorar y ejecútelo en simuladores basados en la nube o en equipos cuánticos reales.

Si prefiere un entorno de desarrollo local, puede crear el programa de Q# mediante cuadernos de Jupyter Notebook con el kernel IQ# o las extensiones de QDK para Visual Studio Code y Visual Studio 2022 y, después, ejecutarlos en hardware cuántico o simuladores locales o basados en la nube.

Sea cual sea el entorno que prefiera, puede seguir los tutoriales de Q# y empezar a escribir programas cuánticos para explorar los conceptos cuánticos como la superposición, el entrelazamiento, el algoritmo cuántico de Grover y otros fenómenos cuánticos.

Si no tiene una cuenta de Azure y desea probar Q# sin instalar el QDK localmente, puede usar Binder para ejecutar los ejemplos de Q# en Jupyter Notebooks en línea.

Exploración de bibliotecas específicas del dominio

Las bibliotecas de Q# le ayudarán a mantener un código de alto nivel, lo que le permite ejecutar operaciones cuánticas complejas sin tener que diseñar secuencias de operaciones de bajo nivel. Los nuevos proyectos de Q# incluyen automáticamente la biblioteca estándar de Q#, que proporciona un conjunto de funciones y operaciones esenciales muy útiles que se pueden usar para escribir programas cuánticos en Q#.

Además de la biblioteca estándar, el QDK incluye una biblioteca de química cuántica para simular problemas de dinámica cuántica y estructura electrónica en equipos cuánticos, una biblioteca de aprendizaje automático cuántico, que proporciona una implementación de los clasificadores secuenciales que aprovechan la computación cuántica para ejecutar experimentos híbridos de aprendizaje automático cuántico/clásico, y una biblioteca numérica cuántica que proporciona soporte con una amplia gama de funcionalidades numéricas.

Ejecución de programas en simuladores

Una vez que haya escrito el programa, el QDK ofrece un conjunto de simuladores cuánticos (programas clásicos que simulan el comportamiento de un sistema cuántico) para que pueda ejecutar una pequeña instancia del programa y ver lo que hace sin necesidad de acceso al hardware real. Puede ejecutar los programas cuánticos en un simulador cuántico de estado completo, un simulador de Toffoli de ámbito limitado, un simulador disperso para sistemas con mayor número de cúbits e incluso usar el simulador de ruido para simular el comportamiento de los programas de Q# bajo la influencia de entornos ruidosos.

Consulte la lista completa de simuladores cuánticos.

Estimación de recursos

Antes de ejecutar su programa en hardware cuántico, deberá averiguar si se puede ejecutar en el hardware existente, y cuántos recursos consumirá. Puede usar el simulador de seguimiento para calcular cuántos cúbits y puertas cuánticas necesita y depurar código clásico que forma parte del programa cuántico.

También puede enviar el programa cuántico al estimador targetde recursos de Azure Quantum en Azure Portal. El estimador de recursos de Azure Quantum calcula la estimación de recursos físicos posteriores al diseño tomando suposiciones sobre los parámetros de cúbit, los códigos de corrección de errores cuánticos y un presupuesto de errores en cuenta. Es gratuito y requiere una cuenta de Azure.

Envío de trabajos a servicio Azure Quantum

Azure Quantum es el servicio de computación cuántica en la nube de Azure e incluye un conjunto diverso de tecnologías y soluciones cuánticas. Azure Quantum garantiza una ruta de acceso abierta, flexible y preparada para el futuro de la computación cuántica que le permite ejecutar el programa en hardware cuántico. Puede ejecutar los programas Qiskit, Cirq y Q# en varios sistemas cuánticos. Vea Proveedores de computación cuántica para obtener la lista actual de proveedores de hardware compatibles.

Sugerencia

Los usuarios de primera vez obtienen automáticamente 500 USD gratis (USD)Créditos de Azure Quantum para su uso con cada proveedor de hardware cuántico participante. Si ha consumido todos los créditos y necesita más, puede solicitar participar en el programa Créditos de Azure Quantum.

Una vez que haya creado un área de trabajo de Azure Quantum, puede enviar los programas de Q# (también conocidos como trabajos) a Azure Quantum desde el entorno de desarrollo que prefiera, tanto local como en línea. Para obtener más información, consulte cómo enviar trabajos de Q#. También puede ejecutar y enviar circuitos cuánticos escritos en Qiskit o Cirq.

En este diagrama, se muestra el flujo de trabajo básico después de enviar el trabajo:

Diagrama que muestra el trabajolow después de un envío de trabajo a Azure Quantum.

Azure Quantum ofrece algunos de los recursos cuánticos más atractivos y diversos disponibles actualmente por parte de los líderes del sector. Con Azure Quantum y el QDK puede escribir programas de computación cuántica y enviarlos a Azure Quantum para que se ejecuten en hardware cuántico.

Pasos siguientes

Si quiere saber más, Quantum Katas ofrece una buena introducción a los conceptos de la computación cuántica, como las operaciones cuánticas comunes y cómo manipular los cúbits.