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. Estas tareas permanecen en el estado QUEUED hasta que comience la reserva.
nota
Las reservas son específicas del dispositivo y de la cuenta de AWS. Solo la cuenta de AWS que creó la reserva puede usar su ARN de reserva.
nota
No hay visibilidad de la cola para las tareas y los trabajos enviados con un ARN de reserva, ya que solo se ejecutan sus tareas durante su reserva.
Puede crear tareas cuánticas utilizando Python SDKs, como Braket, Qiskit
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.
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)
Puede crear tareas cuánticas en una reserva utilizando los complementos PennyLane y Qiskit, siempre que el contexto de DirectReservation esté activo al crear las 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 = 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.stop() # unset reservation context
nota
Las reservas tienen una hora de inicio y finalización programadas (consulte Create a reservation). Los métodos reservation.start() y reservation.stop() no inician ni finalizan una reserva. Estos son métodos para modificar todas las tareas cuánticas posteriores para que se ejecuten durante la reserva. Estos métodos no afectan al horario de la 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. Además, compruebe que las tareas creadas en Qiskit o PennyLane están usando el ARN de reserva correcto. Debido a estas consideraciones adicionales, se recomiendan las dos formas anteriores.
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)