Compartir a través de


Introducción a las sesiones

Las sesiones son una característica clave de la computación cuántica híbrida que permite agrupar varios trabajos de computación cuántica.

En este artículo se explica la arquitectura de las sesiones en la computación cuántica híbrida y cómo crear una nueva sesión.

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 gratuitamente 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 instalados.

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

En las sesiones, el recurso de proceso de cliente se puede mover a la nube, lo que da lugar a una menor latencia y a 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 en los trabajos que no son de sesión. Aunque los estados de cúbit no se conservan entre trabajos, una sesión permite tiempos de cola más cortos para trabajos y problemas de ejecución más largos.

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 quiera 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 se admiten en todos los proveedores de hardware de computación cuántica. En algunos casos, los trabajos enviados dentro de una sesión tienen prioridad en la cola de ese target. Para obtener más información, consulte Target Comportamiento.

Creación de una sesión

Para crear una sesión, siga estos pasos:

En este ejemplo se muestra cómo crear una sesión con Q# código insertado mediante un cuaderno de 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 quantum target de su elección. En este ejemplo, va a usar el simulador de IonQ como target.

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

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
    

    Nota:

    Adaptive_RItarget actualmente se admiten trabajos de perfil en Quantinuum targets. Para más información, consulte Computación cuántica híbrida integrada.

  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
    import Std.Measurement.*;
    import Std.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 la GenerateRandomBit 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, puede que desee enviar diferentes programas 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. Para 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.

Comportamiento de Target

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 Quantinuumtarget, la sesión tendrá acceso exclusivo al hardware, siempre y cuando se ponen en cola los trabajos dentro de un minuto entre sí. Después, los trabajos se aceptarán y controlarán con la lógica de puesta en cola y priorización estándar.