The QPath Blog
Introducción al desarrollo de software cuántico con QPath
En la programación cuántica todo es nuevo y en este contexto, para desarrollar software cuántico, tenemos que prestar atención a sus condicionantes más determinantes:
· Nuevo paradigma de la computación cuántica
· Hardware de la computación cuántica
· Lenguajes de programación cuántica
· Kits de desarrollo de software cuántico
Veamos un breve resumen del contexto existente para el desarrollo de software cuántico, incluyendo las características más relevantes de cada uno de estos elementos del nuevo entorno de desarrollo de software y como cada uno de ellos repercute en el desarrollo de software y aplicaciones cuánticas.
Nuevo paradigma de la computación cuántica
La computación cuántica es posible gracias a la convergencia de la Mecánica Cuántica, las Matemáticas y la Informática. La intersección de estas disciplinas ha dado lugar a un nuevo paradigma de computación, disruptivo respecto a todo lo que podamos conocer sobre la computación y el desarrollo de software.
Por lo tanto, para quienes venimos del software clásico, este nuevo paradigma nos obliga a salir de las zonas de confort profesionales en las que nos encontremos y comenzar una andadura muy particular, y apasionante, en diferentes ámbitos del conocimiento científico, tecnológico y técnico.
Lo primero que deben tener presente los interesados en iniciarse en el desarrollo de software cuántico es que, para diseñar y desarrollar software cuántico de calidad, sí o sí, hay que dominar los principios de la computación cuántica y ser conscientes de que esto es esencial para estar en condiciones de alcanzar las competencias específicas requeridas para desarrollar software cuántico.
Por ello, para trabajar con éxito en el diseño y desarrollo de software cuántico, como mínimo, hay que dominar los fundamentos de la mecánica y la computación cuántica [1], sus conceptos básicos [2] y su maquinaria matemática y física [3]:
Ilustración 1 Fundamentos de la computación cuántica
Además de dominar los principios de la computación cuántica, para desarrollar software cuántico práctico de calidad este nuevo paradigma demanda una serie de competencias científicas y tecnológicas inherentes a la computación cuántica [4]. En nuestra investigación y desarrollo hemos verificado las competencias mínimas requeridas para desarrollar software cuántico de calidad [5]:
Ilustración 2 Competencias necesarias para el desarrollo de software cuántico
Por supuesto que es todo un mundo de nuevas competencias complejas. Pero si eres de quienes desean dar los primeros pasos en la programación de software cuántico no te desanimes.
La buena noticia es que, en nuestra experiencia, el desarrollo de software cuántico de calidad requiere de un exquisito trabajo en equipo y para que ello sea posible el equipo debe ser, científica y tecnológicamente, polímata. Dicho de otra forma, que más allá de la cultura cuántica imprescindible para programar, tal y como ocurre en el desarrollo de software clásico de calidad, los equipos están compuestos por diferentes perfiles, cada uno de ellos con sus competencias específicas que, con una organización razonable, conforman un equipo robusto. Lo que también sabemos es que en ningún caso se trata de que quienes programen software cuántico sean eruditos cuánticos o “hombres del renacimiento”.
Sin lugar a duda, el nivel de requerimiento individual de estas competencias será directamente proporcional al perfil que se desempeñe en el equipo de desarrollo cuántico (por ejemplo, Ingeniero o Programador), al tipo de software cuántico que se vaya a desarrollar y, por supuesto, al entorno de ordenador cuántico para el que se desarrollará el software.
Además, las competencias específicas requeridas tendrán una mayor o menor presencia, una mayor o menos relevancia en las tareas específicas a realizar en el tipo de desarrollo de software cuántico en el que se trabaje:
Ilustración 3 Tipos de software cuántico
Nosotros nos dedicamos a la investigación, desarrollo y el negocio en el campo de la Ingeniería del Software y la Programación Cuántica y por ello nuestras Líneas de investigación, nuestros productos (QPath, la primera plataforma para el desarrollo y ciclo de vida de aplicaciones de software cuántico) y nuestros proyectos de desarrollo de software cuántico práctico (como es el caso de QSalud) están centrados en los ámbitos de desarrollo de software y las aplicaciones cuánticas. Por lo tanto, el contenido de este artículo está concebido desde estas experiencias y orientado, sobre todo, a quienes se dedican o desean dedicarse a estas actividades tanto en la investigación como en el desarrollo de software cuántico para el mundo real.
Hardware de la computación cuántica
Al iniciarnos en el ámbito del desarrollo de software cuántico el otro elemento a tener presente en este nuevo paradigma es el hardware cuántico.
Existen diferentes tipos de computadoras cuánticas (entre las cuales actualmente destacan en su uso las tecnologías de puertas cuánticas y las annealing), que difieren en la potencia del procesamiento (cantidad de cúbits), lo que de una forma u otra limita el tipo de aplicaciones que pueden implementarse en las mismas; hay varios modelos de computadoras cuánticas; y, además, existe una gran variedad de sistemas físicos para generar cúbits. De cada uno de estos elementos, los que consideramos más relevantes por su utilización en la naciente industrial cuántica son los siguientes:
Ilustración 4 Computadoras cuánticas
Aunque su desarrollo avanza a buen ritmo, la realidad es que el hardware cuántico aún está por crecer y superar sus limitaciones actuales, las cuales repercuten en las posibilidades del desarrollo de software.
Prestad mucha atención a este listado porque, como verán a continuación, los tipos y modelos de ordenadores cuánticos tienen una incidencia directa en la definición del lenguaje y el kit de desarrollo de software cuántico con el que trabajemos [6] y, por lo menos por ahora, cada uno de ellos es diferente, poseen requisitos y características que resuelven de forma específica la ejecución de los circuitos programados, por lo que también se suelen aplicar a diferentes tipos de resolución de problemas [7].
Lenguajes de programación cuántica
Como no podía ser de otra forma, el nuevo paradigma de la computación cuántica también incluye nuevos lenguajes de programación.
Al igual que ocurre con las computadoras cuánticas, en el ámbito del desarrollo de software cuántico hay una amplía gama de lenguajes de programación. En la siguiente tabla mostramos los que consideramos más destacados, agrupados en los dos grupos principales de lenguajes de programación cuántica:
Ilustración 5 Lenguajes de programación cuántica
Definir el (o los) lenguaje de desarrollo de software cuántico con el que se desarrollará no es trivial, pues al hacerlo estaremos definiendo el alcance del tipo de software que podremos desarrollar, los algoritmos a utilizar, etc.
Los proveedores han creado las condiciones para que podamos desarrollar software cuántico con su tecnología, pero debemos ser conscientes que cuando seleccionamos uno u otro de esos lenguajes simultáneamente estaremos definiendo el Kit para el desarrollo de software cuántico que emplearemos.
Kits para el desarrollo de software cuántico
Por último, el nuevo paradigma de la computación cuántica también incluye sus nuevos entornos o kits para el desarrollo de software cuántico.
Como se puede ver a continuación, también es variada la cantidad de entornos de desarrollos para la programación cuántica (normalmente muy vinculados a los tipos de computadoras cuánticas), que suelen presentase como Kits con acceso a procesadores, Kits basados en simuladores cuánticos, o Kits con acceso a simuladores y hardware cuántico.
Ilustración 6 Kits para el desarrollo de software cuántico
Por supuesto que es totalmente lógico que cada fabricante desarrolle lenguajes y kits de desarrollos para su hardware, pues es la forma de garantizar que se pueda programar software para los mismos.
Tanto los lenguajes como los kits de desarrollo de los proveedores permiten a los programadores cuánticos desarrollar soluciones cuánticas, pero -eso sí- con el inconveniente de que los conocimientos y competencias requeridas para cada uno de ellos son específicos.
Teniendo presente la variedad de proveedores de computación cuántica y las limitaciones actuales del hardware cuántico, esta situación coloca a los diseñadores y programadores de software cuántico en la difícil tarea de tener que aprender, entrenarse y desarrollar competencias para cada uno de esos lenguajes y kits y repetir el proceso tantas veces como su vida profesional requiera que desarrolle una solución cuántica con la computadora cuántica más eficiente para el tipo de solución a implementar.
Tener que desarrollar una misma solución en el entorno cuántico de otro proveedor significa comenzar nuevamente el proceso desde cero, no solo con el lenguaje de programación, sino también con el kit de desarrollo e, incluso, con la computadora cuántica. Esto es el equivalente a “resetear” una parte importante de las competencias adquiridas lo que, sin lugar a dudas, es un desperdicio de esfuerzo, conocimientos y por lo tanto de dinero.
Estas complejidades del nuevo paradigma de computación hasta la actualidad tienen un gran peso entre las causas del por qué el número de ingenieros de software y programadores capaces de trabajar con estas herramientas siga siendo insignificante respecto a las necesidades de la naciente industria cuántica [8].
Pero, ¿existe alguna forma de evitar esta situación y poder desarrollar software cuántico abstrayéndonos del ordenador cuántico de cada proveedor y sus respectivos lenguajes así como kits de desarrollo de software cuántico?
Afortunadamente la respuesta a esta pregunta es sí, existe la posibilidad de desarrollar software cuántico independiente de la tecnología cuántica y, por lo tanto, sin necesidad de aprender diferentes lenguajes de programación y kits de desarrollo para ello.
Para resolver este gran reto nosotros hemos realizado una amplia investigación y desarrollo en los ámbitos de la Ingeniería del Software y la Programación Cuántica, cuyo resultado más relevante es QPath, la primera plataforma para la gestión del ciclo de vida y desarrollo de software cuántico de calidad. Desde la creación del algoritmo cuántico a través de su desarrollo, prueba e implementación, hasta su despliegue y reutilización. Un ecosistema de herramientas para desarrollar software cuántico que soporta la ejecución de las unidades de proceso cuántico de forma transparente independientemente de la plataforma donde se ejecutan.
En la página CORE QPath de este sitio web ampliamos estas definiciones y también afirmamos que QPath es una plataforma completamente diseñada para ofrecer un camino que facilita adoptar más rápidamente las tecnologías cuánticas, liberándose de los detalles de un proveedor cuántico específico, permitiendo a sus usuarios:
· Crear sus activos de aplicaciones cuánticas y establecer los requisitos del entorno.
· Diseñar visualmente los activos cuánticos: los circuitos cuánticos, sus definiciones de modelos de annealing y componer el algoritmo usando flujos.
· Gestionar el ciclo de vida de forma automática.
· Elegir como destino de ejecución los ordenadores cuánticos y/o los entornos de simulación escalables preferidos. Ofreciendo incluso la posibilidad de lanzar un mismo experimento en múltiples destinos simultáneamente, consolidando los resultados y analizándolos, con las ventajas que esto puede suponer.
· Explorar los resultados usando un esquema unificado normalizado sea cual sea el destino de ejecución.
· Gestionar todos los procesos y analizar toda la telemetría almacenada.
Para hacer posible estas funcionalidades, QPath está compuesto de dos grandes unidades funcionales [9]:
· Los Módulos CORE, capaces de gestionar soluciones independientes de la tecnología cuántica asistidas por herramientas de propósito general
· La Plataforma de Apps, que se integran con los módulos CORE del sistema QPath y facilitan a los equipos de desarrollo la gestión del ciclo de vida de los proyectos de software híbrido.
Pues bien, a continuación mostraremos como se cumplen estas afirmaciones, para lo cual nos centraremos, solo, en las funcionalidades de los Módulos CORE que lo hacen posible.
Introducción al desarrollo de software cuántico con QuantumPath
Cuando se comienza a trabajar con QPath, en lugar de tener que preocuparnos por definir los detalles de determinados SDK a desplegar (QISKIT, Ocean…), el lenguaje y el entorno con que vamos a programar (Python directo, , Q#, …, Jupyter notebook, …) y generar los ficheros necesarios junto con donde mantenerlos (disco local, repositorio http, github…), usamos el concepto de solución para crear la “caja” donde guardaremos nuestros activos.
La Solución, entre otras, tiene ya la responsabilidad de conectar las diferentes plataformas cuánticas disponibles (contemplando los correspondientes SDKs, sus requisitos y sus diferentes versiones) a los activos que generemos con QPath. Esto permite, entre otras cosas, acotar determinadas tecnologías cuánticas al contexto del problema y el licenciamiento de las mismas. Además, ya desde el comienzo podemos determinar usar el camino de tecnologías de puertas cuánticas o tecnologías de annealing, por ejemplo:
Ilustración 7 Gestión de soluciones
Asociados a la solución, iremos agregando, editando y gestionando los activos cuánticos con los que resolveremos un determinado problema.
Ilustración 8 Diferentes tipos de activos
Estos activos actualmente -y principalmente- pueden ser Circuitos y Flujos.
Los Circuitos nos permiten conceptualizar el circuito cuántico. Y si bien en QPath éste se define con un “metalenguaje”, la plataforma permite el diseño gráfico del circuito cuántico y persiste su información en el sistema de forma transparente. De esta manera, sólo nos preocupamos por el activo y no de todos los elementos subyacentes que dependen de él. El diseño del Circuito dependerá del tipo de tecnología con el que queramos trabajar (basada en puertas o annealing), y el diseñador reaccionará a ello con la herramienta de diseño más adecuada. Si, por ejemplo, queremos realizar un circuito de puertas cuánticas con el que probar el principio de Entrelazamiento cuántico, en QPath tendríamos algo como esto:
Ilustración 9 Definición de Circuitos
Ilustración 10 Definición de un circuito
Ilustración 11 Diseño gráfico de un circuito de puertas cuánticas
Al igual que ocurre con una solución clásica, podemos tomar los Circuitos como componentes que necesitan ser orquestados en una aplicación en la que pueden existir múltiples pasos. Para poder disponer de una aplicación en la que lanzar nuestro Circuito -o los circuitos que vayamos construyendo-, necesitaremos definir un Flujo.
El Flujo tiene la responsabilidad de coordinar la forma en que se van a ejecutar y coordinar los Circuitos y todos los elementos que QPath irá proporcionando. En el caso de nuestro ejemplo del entrelazamiento, un flujo sería:
Ilustración 12 Definición de Flujos
Ilustración 13 Edición y diseño de un Flujo
Concluido este trabajo, ya estaremos en condiciones de poder realizar ejecuciones del experimento. Para ello, QPath proporciona el cuadro de mando de ejecución. Desde esta funcionalidad, se podrá coordinar las ejecuciones necesarias y comprobar los resultados, siendo posible, como se comentaba anteriormente, poder seleccionar con mucha flexibilidad el destino de ejecución dentro de los asociados a la solución: máquina cuántica real, simulador cuántico, o ambas, o todas las disponibles.
El CORE de QPath, mediante su gestor de procesos, será el responsable de realizar todas las acciones necesarias para responder a las necesidades del usuario y proporcionarle los diferentes resultados consolidados.
Es importante remarcar en este punto que todo lanzamiento de experimentos es totalmente asíncrono, teniendo presente que, en función de la capacidad de respuesta de una máquina cuántica real, el nivel de licencia disponible y su cola de peticiones en curso (que puede ser de cientos y miles de experimentos a nivel global), pueden tardarse horas (o incluso días) en recogerse una respuesta.
QPath simplifica la democratización del acceso a las máquinas cuánticas. Su habilidad de poder proporcionar múltiples destinos y su aprendizaje por telemetría, pueden hacer que la selección del destino distribuya la carga proporcionando los resultados lo antes posible y beneficiando al entorno general. Su capacidad de permitir el refinamiento de activos y lanzarlos previamente contra simuladores locales/distribuidos también beneficia al no sobrecargar una máquina real en una experimentación continuada e incluso puede influir positivamente en la economía de la ejecución de los proyectos en su fase de desarrollo. Todo ello pudiendo postponer esas posibilidades hasta el punto final del desarrollo.
Además, que los datos de ejecución sean almacenados en el sistema sin esfuerzo para el usuario permite que se puedan consultar los resultados con posterioridad sin necesidad de ejecutar de nuevo el experimento, evitando así la sobrecarga de las máquinas disponibles.
Ilustración 14 Cuadro de mando de ejecución
Realizadas las ejecuciones y recibidas en el sistema, se puede observar los resultados obtenidos de cada destino de forma normalizada y se pueden analizar adicionalmente sus telemetrías. Así como detalles curiosos de cómo un ordenador real NISQ (Noisy Intermediate-Scale Quantum) puede estar inyectando errores en la ejecución al presentar valores que no deberían aparecer en el experimento de entrelazamiento realizado. Esto es algo que no pasa, por ejemplo, en los simuladores (tanto locales como remotos).
Consideramos razonable insistir en que los resultados quedan almacenados en el proyecto, sin esfuerzo por parte del usuario. De forma que es posible consultarlos tantas veces como sea necesario sin tener que lanzar de nuevo el experimento.
Y todo esto es posible realizarlo en el mínimo tiempo. Centrando todo el foco de atención en el experimento y no en todos los elementos necesarios que deberían ser construidos en cada plataforma.
Por supuesto, el usuario puede seguir ampliando su catálogo de circuitos y refactorizando los existentes para ir perfeccionando su solución, al mismo tiempo que o mantiene el flujo ya terminado o lo refactoriza para ampliar su algoritmia o complejidad. Todo dentro de un entorno controlado.
Para finalizar esta introducción a lo que QPath ofrece, hay que destacar que no “solamente” se proporciona un entorno donde gestionar el ciclo de vida de una solución cuántica, sino que también se proporcionan los servicios e interfaces para explotar el dato desde aplicaciones de terceros.
Aunque esto no es objeto de análisis en este artículo, consideramos importante señalar que desde la perspectiva práctica del software cuántico es muy importante tener presente si, como parte del ciclo de vida, se están concibiendo soluciones cuánticas para el mundo real y que estas serán explotadas por sistemas clásicos, componiendo una arquitectura híbrida. Sobre este patrón de arquitectura de sistemas, todo flujo en QPath podrá ser expuesto como servicio al exterior, de forma tal que se puedan construir rápidamente soluciones híbridas.
Sirva como ejemplo, mostrar una aplicación Windows FORM desarrollada con Q#, en la que se pueden observar los elementos que QPath proporciona al exterior y cómo se puede acceder a los datos de nuestro experimento desde una solución híbrida.
Ilustración 15 Un ejemplo de aplicación híbrida que accede a los activos cuánticos de QPath
En resumen, que como hemos mostrado e ilustrado con capturas de pantallas de la Plataforma, QPath hace posible el diseño y construcción de soluciones cuánticas centrando el foco en el problema, y haciendo posible que equipos multidisciplinares puedan trabajar de forma conjunta mediante el uso de herramientas de alto nivel que abstraen las complicaciones inherentes de los fabricantes y sus herramientas. A la par que proporciona una serie de herramientas a diferentes niveles que harán que el desarrollo cuántico se convierta en un nuevo proceso preparado para el negocio.
Por último, y no por ello menos importante, destacamos que QPath ha sido desarrollada teniendo presente los principios de Talavera Manifesto [10], por lo que:
· Es agnóstica respecto a los lenguajes y tecnologías de programación cuántica.
· Adopta la coexistencia de la computación clásica y cuántica, facilitando su integración.
· Favorece la gestión de proyectos de desarrollo de software cuántico.
· Soporta la evolución del software cuántico.
· Facilita entregar programas cuánticos con cero defectos.
· Asegura la calidad del software cuántico.
· Soporta la reutilización del software cuántico.
· Contempla la seguridad y la privacidad por diseño.
· Cubre el gobierno y la gestión de software.
Por todo ello (y por algunas razones más que iremos presentando en otros artículos), QPath es una excelente Plataforma para el desarrollo de software cuántico práctico de calidad, que se integra transparentemente con los ordenadores cuánticos de los principales proveedores y nos libera de tener que conocer y gestionar las complejidades específicas de cada uno de esos entornos cuánticos.
[1] Hevia, José Luis. aQuantum Webinar: Introduction to Quantum Development (in Spanish). https://www.youtube.com/watch?v=V44qdI4rl3c&t=173s, aQuantum, 2020; Introduction to Quantum Development, http://ceur-ws.org/Vol-2561/paper3.pdf. 2020.
[2] Serrano, Manuel Angel. aQuantum Webinar: Quantum Concepts. https://www.youtube.com/channel/UCrhjVcvHCKI79pjZ6R2ybbA. 2020
[3] Murina, Ezequiel. aQuantum Webinar: Quantum Programming the Mathematical and Physics Machinery (in Spanish). https://www.youtube.com/channel/UCrhjVcvHCKI79pjZ6R2ybbA. 2020
[4] Piattini, Mario. aQuantum Webinar: Necessary competences for quantum software development (in Spanish). https://www.youtube.com/watch?v=oDjzUiYOpnk. 2020
[5] Peterssen Nodarse, Guido. aQuantum Webinar: Quantum technology impact the necessary workforce for developing quantum software (in Spanish). https://www.youtube.com/watch?v=2xoX-FWzgIs&t=6s. 2020
[6] An updated list of quantum computers, quantum programming languages and quantum SDKs, with a brief description of their characteristics, can be
consulted at https://en.wikipedia.org/wiki/Quantum_programming#Imperative_languages
[7] Hevia, José Luis. Requirements for Quantum Software Platforms. http://ceur-ws.org/Vol-2705/short3.pdf. 2020
[8] Peterssen, Guido. Quantum technology impact: the necessary workforce for developing quantum software. http://ceur-ws.org/Vol-2561/paper1.pdf. 2020
[9] Hevia, José Luis. QPath Features. The QPath Blog. https://www.quantumpath.es/index.php/2020/12/10/qpath_features/. 2020
[10] The Talavera Manifesto for Quantum Software Engineering and Programming. http://ceur-ws.org/Vol-2561/paper0.pdf. 2020