Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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. Una sesión es una agrupación lógica de uno o varios trabajos que se envían a un único target. Cada sesión tiene un identificador único asociado a cada trabajo de esa sesión. Las sesiones son útiles cuando desea ejecutar varios trabajos de computación cuántica en secuencia y ejecutar código clásico entre trabajos cuánticos.
En este artículo se explica la arquitectura de sesiones en la computación cuántica híbrida y cómo crear una nueva sesión en Azure Quantum.
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 Azure Quantum trabajo. Para obtener más información, consulte Creación de un Azure Quantum área de trabajo.
Un entorno Python con Python y Pip instalado.
La versión más reciente de Visual Studio Code (VS Code), con la extensión QDK, la extensión Python y la extensión Jupyter instaladas.
La
qdkPython biblioteca. Para enviar programas Qiskit y Cirq, instale los extrasazure,qiskitycirq.pip install --upgrade "qdk[azure,qiskit,cirq]"
¿Qué es una sesión?
En las sesiones, puede trasladar el recurso de cálculo del cliente a la nube para reducir la latencia y ejecutar su programa cuántico varias veces con diferentes parámetros. Puede agrupar lógicamente los trabajos en una sesión y puede priorizar los trabajos de esa sesión sobre los trabajos que no son de sesión. Los estados de cúbit no se conservan entre los trabajos, pero las tareas dentro de una sesión tienen tiempos de cola más cortos. Los tiempos de cola más cortos permiten ejecutar algoritmos complejos para organizar y realizar un seguimiento mejor de los trabajos de computación cuántica individuales.
Las sesiones son útiles para los algoritmos cuánticos con parámetros, donde la salida de un trabajo de computación cuántica se usa para definir parámetros de entrada para el 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).
Compatibilidad del hardware
Las sesiones se admiten en todos los proveedores de hardware de computación cuántica. En algunos casos, los trabajos que se envían dentro de una sesión se les da prioridad en la cola de ese target. Para obtener más información, consulte Comportamiento de destino.
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 en línea en un Jupyter cuaderno en VS Code.
Nota:
Las sesiones se administran con Python, incluso cuando se está ejecutando código en línea Q#.
En VS Code, abra el menú Ver y elija Paleta de comandos.
Introduzca y seleccione Crear: Nuevo Jupyter Notebook.
En la parte superior derecha, VS Code detectará y mostrará la versión de Python y el entorno virtual Python seleccionado para el cuaderno. Si tiene varios Python entornos, es posible que tenga que seleccionar un núcleo mediante el selector de núcleo ubicado en la parte superior derecha. Si no se detectó un entorno, consulte Jupyter Notebook en VS Code para detalles sobre la configuración.
En la primera celda del cuaderno, ejecute el código siguiente:
from qdk.azure import Workspace workspace = Workspace(resource_id="") # add your resource IDAgregue una nueva celda en el cuaderno e importe el
qsharpPython paquete:from qdk import qsharpElija su cuántico target. En este ejemplo, target es el simulador de IonQ.
target = workspace.get_targets("ionq.simulator")Seleccione las configuraciones del target perfil, ya sea
Base,Adaptive_RIoUnrestricted.qsharp.init(target_profile=qsharp.TargetProfile.Base)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.Escriba su 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; }A continuación, creas una sesión. Supongamos que quiere ejecutar la
GenerateRandomBitoperación tres veces, por lo que se usatarget.submitpara enviar la Q# operación con lostargetdatos 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
Cuando pasas argumentos como parámetros a la tarea, los argumentos están formateados en la expresión Q# cuando se llama a
qsharp.compile. Esto significa que debe dar formato a los argumentos como Q# objetos. En este ejemplo, dado que los arrays en Python ya se muestran utilizando el formato[item0, item1, ...], los argumentos de entrada son compatibles con el formato Q#. En el caso de otras Python estructuras de datos, pueda necesitar más manejos para obtener los valores de cadena insertados en Q# de manera compatible.Una vez creada una sesión, puede usar
workspace.list_session_jobspara recuperar una lista de todos los trabajos de la sesión. Para obtener más información, consulte Administración de sesiones.
Comportamiento objetivo
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 su sesión a Quantinuum target, su sesión tiene acceso exclusivo al hardware siempre que los trabajos se pongan en cola con un intervalo de un minuto entre cada uno. Después, los trabajos se aceptan y gestionan con la lógica de la puesta en cola y priorización estándar.