Computación cuántica interactiva: sesiones
En este artículo se explica la arquitectura de la computación cuántica interactiva, también conocida como sesiones, y cómo crear una nueva sesión.
En este modelo de computación cuántica híbrida, el recurso de proceso del cliente se puede mover a la nube, lo que da lugar a una latencia menor y la capacidad de repetir la ejecución del circuito cuántico con distintos parámetros. Los trabajos se pueden agrupar lógicamente en una sesión y los trabajos de esa sesión se pueden priorizar sobre los trabajos que no son de sesión. Aunque los estados de cúbit no persisten entre trabajos, una sesión permite tiempos de cola más cortos para trabajos y problemas de ejecución más largos.
Requisitos previos
Para crear una sesión, necesita los siguientes requisitos previos:
Una cuenta de Azure con una suscripción activa. Si no tiene una cuenta de Azure, regístrese de forma gratuita y regístrese para obtener una suscripción de pago por uso.
Un área de trabajo de Azure Quantum. Para más información, consulte Creación de un área de trabajo de Azure Quantum.
Un entorno de Python con Python y Pip instalado.
El paquete de Azure Quantum
azure-quantum
. Si desea usar Qiskit o Cirq, debe instalar elazure-quantum
paquete con las etiquetas [qiskit] o [cirq].pip install --upgrade azure-quantum[qiskit]
¿Qué es una sesión?
Una sesión es una agrupación lógica de uno o varios trabajos enviados a un único target. Cada sesión tiene un identificador único asociado a cada trabajo de esa sesión.
Las sesiones permiten organizar varios trabajos de computación cuántica con la capacidad de ejecutar código clásico entre trabajos cuánticos. Podrá ejecutar algoritmos complejos para organizar y realizar un seguimiento mejor de los trabajos de computación cuántica individuales.
Un escenario de usuario clave en el que es posible que desee combinar trabajos en una sesión es algoritmos cuánticos con parámetros donde la salida de un trabajo de computación cuántica informa a los parámetros del siguiente trabajo de computación cuántica. Los ejemplos más comunes de este tipo de algoritmo son Variational Quantum Eigensolvers (VQE) y Quantum Approximate Optimization Algorithms (QAOA).
Hardware admitido
Las sesiones son compatibles con todos los proveedores de hardware de computación cuántica, actualmente IonQ, Quantinuum y Rigetti. En algunos casos, los trabajos enviados dentro de una sesión tienen prioridad en la cola de .target Para obtener más información, consulte Comportamiento de destino.
Introducción a las sesiones
Las sesiones se administran con Python y se pueden crear para cualquier programa cuántico de QIR, incluidos Q#los programas , Qiskit y Cirq.
En este ejemplo se muestra cómo crear una sesión con Q# código insertado mediante un Jupyter Notebook en Visual Studio Code. También puede crear sesiones mediante un programa de Python que invoque un programa adyacente Q# .
Nota
Las sesiones se administran con Python, incluso cuando se ejecuta Q# código insertado.
En VS Code, seleccione Ver > paleta de comandos y seleccione Crear: Nuevo Jupyter Notebook.
En la parte superior derecha, VS Code detectará y mostrará la versión de Python y el entorno de Python virtual que se seleccionó para el cuaderno. Si tiene varios entornos de Python, es posible que tenga que seleccionar un kernel mediante el selector de kernel en la parte superior derecha. Si no se detectó ningún entorno, consulte Jupyter Notebooks in VS Code (Cuadernos de Jupyter Notebook en VS Code ) para obtener información de configuración.
En la primera celda del cuaderno, ejecute
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
Haga clic en + Código para agregar una nueva celda en el cuaderno e importar
qsharp
el SDK de Python.import qsharp
Seleccione el cuanto target que prefiera. En este ejemplo, se usa el simulador de IonQ como target.
target = workspace.get_targets("ionq.simulator")
Seleccione las configuraciones del target perfil, ya sea
Base
oUnrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Unrestricted
Escriba el Q# programa. Por ejemplo, el siguiente Q# programa genera un bit aleatorio. Para ilustrar el uso de argumentos de entrada, este programa toma un entero,
n
y una matriz de ángulos,angle
, como entrada.%%qsharp open Microsoft.Quantum.Measurement; open Microsoft.Quantum.Arrays; operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] { use qubits = Qubit[n]; // n parameter as the size of the qubit array for q in qubits { H(q); } R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters R(PauliZ, angle[1], qubits[1]); let results = MeasureEachZ(qubits); ResetAll(qubits); return results; }
A continuación, creará una sesión. Supongamos que quiere ejecutar
GenerateRandomBit
la operación tres veces, por lo que se usatarget.submit
para enviar la Q# operación con lostarget
datos y repetir el código tres veces: en un escenario real, es posible que quiera enviar programas diferentes en lugar del mismo código.angle = [0.0, 0.0] with target.open_session(name="Q# session of three jobs") as session: target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission angle[0] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission angle[1] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission session_jobs = session.list_jobs() [session_job.details.name for session_job in session_jobs]
Importante
Al pasar argumentos como parámetros al trabajo, se les da formato a la Q# expresión al llamar a
qsharp.compile
. Esto significa que debe tener cuidado de dar formato a los argumentos como Q# objetos. En este ejemplo, dado que las matrices de Python ya se imprimen como [item0, item1, ...], los argumentos de entrada coinciden con el Q# formato. En el caso de otras estructuras de datos de Python, es posible que necesite más control para obtener los valores de cadena insertados de Q# forma compatible.Una vez creada una sesión, puede usar
workspace.list_session_jobs
para recuperar una lista de todos los trabajos de la sesión. Para obtener más información, consulte Administración de sesiones.
Sesiones de supervisión
Puede usar la hoja Administración de trabajos en el área de trabajo de Quantum para ver todos los elementos enviados de nivel superior, incluidas las sesiones y los trabajos individuales que no están asociados a ninguna sesión.
- Seleccione la hoja Administración de trabajos en el área de trabajo de Quantum.
- Identifique los trabajos de tipo Session. En esta vista, puede ver el identificador único de una sesión en el identificador de columna y supervisar su estado. Los estados de una sesión son:
- En espera: se ejecutan trabajos dentro de la sesión.
- Correcto: la sesión finalizó correctamente.
- Tiempo de espera: si no se envía ningún nuevo trabajo dentro de la sesión durante 10 minutos, esa sesión agota el tiempo de espera. Para obtener más información, consulte Tiempos de espera de sesión.
- Error: si se produce un error en un trabajo dentro de una sesión, la sesión finaliza y notifica un estado de Error. Para obtener más información, consulte Directiva de error de trabajo en sesiones.
- Haga clic en el nombre de una sesión para obtener más detalles.
- Puede ver la lista de Todos los trabajos dentro de la sesión y supervisar su estado.
Comportamiento de destino
Cada proveedor de hardware cuántico define su propia heurística para administrar mejor la priorización de trabajos dentro de una sesión.
Quantinuum
Si decide enviar trabajos dentro de una sesión a Quantinuum target, la sesión tendrá acceso exclusivo al hardware siempre que los trabajos se ponen en cola en un minuto entre sí. Después, los trabajos se aceptarán y controlarán con la lógica estándar de puesta en cola y priorización.
Contenido relacionado
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de