Q Provider Factory APP, como tecnología de QuantumPath®, hace posible refactorizar el proveedor cuántico de un programa desarrollado en un determinado SDK de fabricante. Lo que abre un interesante abanico de posibilidades de exploración de alternativas minimizando riesgos y tiempo.
Una de las tecnologías soportadas por Q Provider Factory es Amazon Braket SDK, software de desarrollo Python proporcionado por Amazon, una biblioteca de código abierto que permite el desarrollo de circuitos cuánticos e interactuar con diferentes dispositivos y simuladores dentro del ecosistema cuántico de AWS.
A continuación, mostraremos como usar, paso a paso, Q Provider Factory para ejecutar, a través de QuantumPath®, un programa cuántico implementado con Amazon Braket SDK. El ejemplo escogido para el artículo es una implementación del algoritmo de “Simon”, cuyo código fuente puede encontrarse en el repositorio GitHub de Amazon Braket.
Ilustración 1: Algoritmo Simon en el repositorio GitHub de Amazon Braket
En el primer artículo que se publicó de Q Provider Factory de Agosto 2023, disponible en El Blog de QPath®, ya se introducían los pasos a seguir para refactorizar una aplicación cuántica. Vamos a ver que, siguiendo los mismos pasos, es realmente sencillo introducir nuevos proveedores y explotar las funcionalidades del CORE para investigar nuevos contextos.
Es importante recordar, que la solución en QuantumPath® es la que determina el enlace entre los activos cuánticos y los proveedores cuánticos. En su rol está el actuar como proveedor de “cadenas de conexión” para ejecutar circuitos en los diferentes proveedores linkados. Como paso previo, si ya tenemos una solución vinculada a AWS podemos reutilizarla o generar una nueva preparando sus conexiones a los simuladores o QPU disponibles.
Ilustración 2: Solución de QuantumPath con los dispositivos cuánticos de ejecución habilitados
Uso de Q Provider Factory
· Instalar QrEngineer SDK.
Para trabajar con Q Provider Factory, es necesario instalar QrEngineer SDK si no lo teníamos ya, para lo que es necesario ejecutar la siguiente instrucción en una consola de comandos:
pip install QrEngineerSDK
Nota: dado que son productos en Beta, será recomendable actualizar las librerías si ya las teníamos instaladas.
pip install –-upgrade QrEngineerSDK
· Identificar el fichero principal del programa cuántico a integrar con QuantumPath®, en este caso el simon_algorithm.py.
· Identificar la línea donde finaliza la creación del objeto Circuit con la definición del circuito cuántico y borrar el código que se utiliza para lanzar el experimento contra el simulador de local.
…
n = len(s)
circ = Circuit()
# Apply Hadamard gates to first n qubits
circ.h(range(n))
# Now apply the Oracle for f
circ.simons_oracle(s)
# Apply Hadamard gates to the first n qubits
circ.h(range(n))
print(circ) # get number of qubits
|
task = device.run(circ, shots=4*n)
result = task.result()
counts = result.measurement_counts
plt.bar(counts.keys(), counts.values());
plt.xlabel(‘bit strings’);
plt.ylabel(‘counts’);
plt.xticks(rotation=90)
plt.show()
…
· Añadir tras esa línea, el código de Q Provider Factory necesario para transpilar el circuito y ejecutarlo a través de QuantumPath®:
o Añadir una sentencia import a la clase QProviderFactory del SDK.
from QrEngineerSDK import QProviderFactory
o Instanciar el objeto QProviderFactory, indicando las credenciales de QuantumPath®
qprovider = QProviderFactory(user = ‘***qpath user***’, passwordSHA256=’***sha-256 encrypted password***’)
o Transpilar el circuito original a un circuito de puertas de QuantumPath®, usando la instrucción transpileAmazonCircuit.
qpathCircuit = qProvider.transpileAmazonCircuit(circuit)
o Lanzar la ejecución del circuito a través de QuantumPath®, proporcionando el identificador de la solución, el dispositivo cuántico, el namespace, el nombre del circuito y el número de ejecuciones o sampleos a realizar.
qpathSolutionID = 10223
qpathDeviceID = 14 #AMAZON BRAKET 25qbits Local Simulator
qpathCircuitName = ‘SIMONS_ALGORITHM’
qpathNamespace = ‘TEST’
qpathNumRepeats = 100
result = qprovider.executeQPathCircuit(qpathSolutionID,qpathDeviceID,qpathCircuitName,qpathNamespace,qpathNumRepeats,qpathCircuit)
Nota: Como se ha comentado anteriormente, tanto el id de la solución, como el id del dispositivo cuántico, pueden ser obtenidos de la página de información de la propia solución en QuantumPath®.
Una vez ejecutado el circuito a través de QuantumPath®, es necesario recuperar el histograma resultante de la ejecución, para tal y como se hace en el ejemplo original, realizar la agregación de los resultados ignorando la medición en los últimos qubits, más allá de los n dígitos de la cadena secret (n):
new_results = {}
histogramValues = list(qpathResult.histogram.values())[0]
for bitstring, count in histogramValues.items():
# Only keep the outcomes on first n qubits
trunc_bitstring = bitstring[:n]
# Add the count to that of the of truncated bit string
new_results[trunc_bitstring] =
new_results.get(trunc_bitstring, 0) + count
El resto del postprocesamiento clásico realizado en el ejemplo original se mantiene sin cambios.
Una vez ejecutado el código refactorizado, el usuario puede acceder a la plataforma QuantumPath® y visualizar en la solución indicada, el circuito y el flujo generados automáticamente por el SDK, y comprobar el resultado de la ejecución en la plataforma.
Ilustración 3: Circuito generado con QrEngineer Python SDK, visto en QuantumPath®
Además, como se puede observar en las siguientes ilustraciones, se pueden realizar las tareas de desarrollo y ejecución que se estimen oportunas con el circuito adaptado a QPath®
Ilustración 4: Edición del circuito “SIMON_ALGORITHM” con Q Assets Compositor®
Ilustración 5: QuantumPath® Runtime Dashboard
Una vez echa la adaptación del programa Braket y operativa dentro del ecosistema de QuantumPath®, remarcar que se abrirá un nuevo camino en la exploración del programa cuántico en construcción en el que se contarán con todas las ventajas que se agregan como valor añadido gracias a dicho ecosistema. El desarrollador podrá continuar investigando con Braket al mismo tiempo que podrá utilizar QuantumPath®, lo que le puede ayudar a simplificar el camino para lograr su objetivo: la ventaja cuántica aplicada.
Uso de Q Provider Factory Web UI
Q Provider Factory Web UI permite acelerar el proceso de adaptación del fuente cuántico del que hemos hablado en el punto anterior, asistiendo al usuario, de forma guiada, en la refactorización del código original del programa.
Para ello el usuario deberá seguir los siguientes pasos:
· Acceder a la herramienta y autenticarse con sus credenciales de QuantumPath®.
· Crear un nuevo proyecto o acceder a uno ya existente.
Ilustración 6: Catálogo de proyectos de Q Provider Factory.
· Adjuntar el código fuente del circuito o programa cuántico.
Para este ejemplo, la parte del código del circuito que está implementada en un fichero Jupyter Notebook, se ha exportado al fichero simons_algorithm.py de Python. Ambos ficheros, simons_algorithm.py y simons_util.py se han comprimido en un fichero .zip para poder subirlo a la herramienta.
Ilustración 7: Formulario para añadir un circuito cuántico
Ilustración 8: Código del circuito cuántico añadido a un proyecto.
· Desde la pestaña “Code migrations”, generar nuevo código de integración con QuantumPath®, indicando:
o Namespace y nombre del circuito a crear en QPath®.
o Solución de QPath® donde ubicar el circuito.
o Dispositivo cuántico donde lanzar la ejecución del circuito
Ilustración 9: Formulario para generar el código de una nueva integración con QPath®.
· Del código fuente, seleccionar el fichero principal del programa y la línea donde se va a insertar el código de Q Provider Factory.
Ilustración 10: Selección de la ubicación donde se insertará el código de Q Provider Factory.
· Guardar el código generado y descargarlo para su ejecución localmente.
Ilustración 11: Código generado por la herramienta
Ilustración 12: Listado de migraciones generadas, con la opción de descarga del código.
· Para completar el ejemplo, es necesario editar el fichero principal simons_algorithm.py y realizar los siguientes cambios:
o Localizar la línea donde se inicializa el objeto QProviderFactory y añadir la password:
§ Codificada en Base64:
qprovider = QProviderFactory(user = ‘***quantum path user***’, passwordB64=’***Base64-encoded password***’)
§ O encriptada en SHA256:
provider = QProviderFactory(user = ‘***quantum path user***’, passwordSHA256=’***sha-256 encrypted password***’)
o Localizar la parte donde se realiza la agregación de los resultados, y sustituir por el siguiente código:
new_results = {}
histogramValues = list(qpathResult.histogram.values())[0]
for bitstring, count in histogramValues.items():
# Only keep the outcomes on first n qubits
trunc_bitstring = bitstring[:n]
# Add the count to that of the of truncated bit string
new_results[trunc_bitstring] =
new_results.get(trunc_bitstring, 0) + count
Al lanzar la ejecución del programa desde una consola de comandos local, se puede ver el resultado de la integración y ejecución contra QPath®:
Ilustración 13: Consola de comandos ejecutando el programa “SIMONS_ALGORITHM” modificado.
Hecho lo anterior, al igual que se mostró en el apartado de Q Provider Factory, el desarrollador podrá acceder, visualizar y trabajar sin limitaciones con la implementación del algoritmo de “Simon” desde a la plataforma QuantumPath®.
Resumen
QuantumPath® es una plataforma Full-Stack para el desarrollo de software cuántico y el control del ciclo de vida de sistemas híbridos cuántico/clásicos: desde la creación del algoritmo cuántico, pasando por su desarrollo, prueba y aplicación, integración, hasta su despliegue y reutilización. Una plataforma concebida para hacer posible la ingeniería y el ciclo de vida del software cuántico híbrido.
En este artículo, como introdujimos en artículos anteriores publicados en El Blog de QPath®, el camino que abre Q Provider Factory -y los servicios guiados del producto-, hacen posible al usuario establecer un punto de inflexión en su búsqueda de la ventaja cuántica. En estos días, los avances de la computación cuántica abren nuevas vías de exploración debido al número creciente de tecnologías y proveedores. Lo que muchas veces no hace viable la selección del mejor proveedor para un determinado problema a resolver o la justificación de determinar cuál es el que mejor se adapta a la solución, debido al coste de investigación y aprendizaje de todos estos caminos.
Gracias a los adaptadores de Q Provider Factory de QPath®, la tarea de pocos pasos de adaptar a QuantumPath® el algoritmo de Simon sin alterar la experiencia con Braket del usuario ofrece un nuevo valor añadido al poder disponerse no solo de nuevas herramientas sino una nueva plataforma que hace posible evaluar la ventaja cuántica abriendo nuevas posibilidades. Continuar con la misma línea, combinar fuerzas o abrir otras nuevas, ya será una opción más en el camino a recorrer. Pero la opción existe y es viable.
Como hemos visto una vez adaptado el algoritmo de Simon a la plataforma entrará en el ciclo de vida, como un elemento ya nativo, del resto de las capacidades de QPath® (QAgnostic, QHybrid, QQuality, QManagement, QBusiness y QWorkforce) y todos sus servicios gestionados. Esto ofrece otras posibilidades de explotación y evolución del desarrollo adaptado a QPath®, al poder utilizar en su ciclo de vida el amplio conjunto de herramientas, servicios, métodos y procesos de la plataforma diseñados desde la perspectiva de la Ingeniería del Software Cuántico.