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.

Computación cuántica interactiva

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 el azure-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.

  1. En VS Code, seleccione Ver > paleta de comandos y seleccione Crear: Nuevo Jupyter Notebook.

  2. 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.

  3. 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"
    )
    
  4. Haga clic en + Código para agregar una nueva celda en el cuaderno e importar qsharp el SDK de Python.

    import qsharp
    
  5. Seleccione el cuanto target que prefiera. En este ejemplo, se usa el simulador de IonQ como target.

    target = workspace.get_targets("ionq.simulator")
    
  6. Seleccione las configuraciones del target perfil, ya sea Base o Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Unrestricted
    
  7. 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, ny 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;
    }
    
  8. A continuación, creará una sesión. Supongamos que quiere ejecutar GenerateRandomBit la operación tres veces, por lo que se usa target.submit para enviar la Q# operación con los target 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.

  9. 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.

  1. Seleccione la hoja Administración de trabajos en el área de trabajo de Quantum.
  2. 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.
  3. Haga clic en el nombre de una sesión para obtener más detalles.
  4. 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.