Ejecución de tareas cuánticas durante una reserva - Amazon Braket

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejecución de tareas cuánticas durante una reserva

Tras obtener un ARN de reserva válido con la opción Crear una reserva, puede crear tareas cuánticas para ejecutarlas durante la reserva. Las tareas de Quantum y los trabajos híbridos enviados con un ARN de reserva no aparecerán en la cola de dispositivos. Las tareas enviadas antes de la hora de inicio de la reserva permanecerán en ese QUEUED estado hasta que comience la reserva.

nota

Las reservas son específicas AWS de la cuenta y del dispositivo. Solo la AWS cuenta que creó la reserva puede usar su ARN de reserva.

Durante una reserva, se pueden crear tanto tareas de reserva como tareas normales. Para comprobar que una tarea cuántica de Braket creada está asociada a una reserva, compruebe el campo «ARN de reserva» en la página de la tarea cuántica en la consola de Braket o consulte el mismo campo en los metadatos de la tarea mediante el SDK. El resto de esta página describe cómo especificar qué tareas están asociadas a la reserva.

Puede crear tareas cuánticas con Python SDKsBraket,, CUDA-QPennyLaneQiskit, o directamente con boto3 (trabajar con Boto3). Para utilizar las reservas, debe tener la versión v1.79.0 o superior del Python SDK de Amazon Braket. Puede actualizar el SDK de Braket, el proveedor de Qiskit y el plugin de PennyLane de Braket a la versión más reciente con el siguiente código.

pip install --upgrade amazon-braket-sdk amazon-braket-pennylane-plugin qiskit-braket-provider

Ejecución de tareas con el administrador de contexto de DirectReservation

La forma recomendada de ejecutar una tarea en su reserva programada es utilizar el administrador de contexto de DirectReservation. Al especificar su dispositivo de destino y el ARN de reserva, el administrador de contexto garantiza que todas las tareas creadas en la declaración with de Python se ejecuten con acceso exclusivo al dispositivo.

Primero, defina un circuito cuántico y el dispositivo. A continuación, utilice el contexto de reserva y ejecute la tarea. Asegúrese de que toda su carga de trabajo se ejecute dentro del with bloque; ¡todo lo que se ejecute fuera del alcance del with bloque no se asociará a su reserva!

from braket.aws import AwsDevice, DirectReservation from braket.circuits import Circuit from braket.devices import Devices bell = Circuit().h(0).cnot(0, 1) device = AwsDevice(Devices.IonQ.Aria1) # run the circuit in a reservation with DirectReservation(device, reservation_arn="<my_reservation_arn>"): task = device.run(bell, shots=100)

Puedes crear tareas cuánticas en una reserva mediante CUDA-QPennyLane, y Qiskit complementos, siempre que el DirectReservation contexto esté activo al crear tareas cuánticas. Por ejemplo, con el proveedor de Qiskit-Braket, puede ejecutar las tareas de la siguiente manera.

from braket.devices import Devices from braket.aws import DirectReservation from qiskit import QuantumCircuit from qiskit_braket_provider import BraketProvider qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) aria = BraketProvider().get_backend("Aria 1") # run the circuit in a reservation with DirectReservation(Devices.IonQ.Aria1, reservation_arn="<my_reservation_arn>"): aria_task = aria.run(qc, shots=10)

Del mismo modo, el siguiente código ejecuta un circuito durante una reserva mediante el complemento Braket-PennyLane.

from braket.devices import Devices from braket.aws import DirectReservation import pennylane as qml dev = qml.device("braket.aws.qubit", device_arn=Devices.IonQ.Aria1.value, wires=2, shots=10) @qml.qnode(dev) def bell_state(): qml.Hadamard(wires=0) qml.CNOT(wires=[0, 1]) return qml.probs(wires=[0, 1]) # run the circuit in a reservation with DirectReservation(Devices.IonQ.Aria1, reservation_arn="<my_reservation_arn>"): probs = bell_state()

Configuración manual del contexto de reserva

También puede configurar el contexto de reserva de forma manual con el siguiente código.

# set reservation context reservation_context = DirectReservation(device, reservation_arn="<my_reservation_arn>").start() # run circuit during reservation task = device.run(bell, shots=100)

Esto es ideal para los cuadernos de Jupyter, donde el contexto se puede ejecutar en la primera celda y todas las tareas subsiguientes se ejecutarán en la reserva.

nota

La celda que contiene la llamada a .start() solo debe ejecutarse una vez.

Para volver al modo bajo demanda: reinicie el cuaderno de Jupyter o llame a lo siguiente para volver a cambiar el contexto al modo bajo demanda.

reservation_context.stop() # unset reservation context
nota

Las reservas tienen una hora de inicio y finalización predeterminadas (consulte Crear una reserva). Los métodos reservation_context.start() y reservation_context.stop() no inician ni finalizan una reserva. En cambio, mientras el contexto esté activo, cualquier tarea cuántica que crees se asociará a tu reserva y solo se ejecutará durante la reserva programada. El contexto de la reserva no afecta a la hora de reserva programada.

Transferencia explícita del ARN de reserva al crear la tarea

Otra forma de crear tareas durante una reserva es transferir explícitamente el ARN de reserva al llamar a device.run().

task = device.run(bell, shots=100, reservation_arn="<my_reservation_arn>")

Este método asocia directamente la tarea cuántica con el ARN de reserva, lo que garantiza que se ejecute durante el período reservado. Para esta opción, añada el ARN de reserva a cada tarea que vaya a ejecutar durante una reserva. Sin embargo, tenga en cuenta que al utilizar bibliotecas de tercerosPennyLane, como Qiskit o, puede resultar difícil garantizar que las tareas enviadas utilicen el ARN de reserva correcto. Por este motivo, se recomienda utilizar el administrador de DirectReservation contexto.

Cuando utilice boto3 directamente, transfiera el ARN de reserva como una asociación al crear una tarea.

import boto3 braket_client = boto3.client("braket") kwargs["associations"] = [ { "arn": "<my_reservation_arn>", "type": "RESERVATION_TIME_WINDOW_ARN", } ] response = braket_client.create_quantum_task(**kwargs)