Executando tarefas quânticas durante uma reserva
Depois de obter um ARN de reserva válido em Criar uma reserva, você pode criar tarefas quânticas para serem executadas durante a reserva. Essas tarefas permanecem no estado QUEUED até o início de sua reserva.
nota
As reservas são específicas da conta AWS e do dispositivo. Somente a conta AWS que criou a reserva pode usar o ARN da sua reserva.
nota
Não há visibilidade da fila para tarefas e trabalhos enviados com um ARN de reserva porque somente suas tarefas são executadas durante a reserva.
Você pode criar tarefas quânticas usando Python SDKs como o Braket, Qiskit
pip install --upgrade amazon-braket-sdk amazon-braket-pennylane-plugin qiskit-braket-provider
Execute tarefas com o gerenciador de contexto DirectReservation
A forma recomendada de executar uma tarefa dentro da sua reserva agendada é usar o gerenciador de contexto DirectReservation. Ao especificar seu dispositivo de destino e o ARN de reserva, o gerenciador de contexto garante que todas as tarefas criadas na instrução with Python sejam executadas com acesso exclusivo ao dispositivo.
Primeiro, defina um circuito quântico e o dispositivo. Em seguida, use o contexto de reserva e execute a tarefa.
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)
Você pode criar tarefas quânticas em uma reserva usando PennyLane e plug-ins Qiskit, desde que o contexto DirectReservation esteja ativo durante a criação de tarefas quânticas. Por exemplo, com o provedor Qiskit-Braket, você pode executar tarefas da seguinte maneira.
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)
Da mesma forma, o código a seguir executa um circuito durante uma reserva usando o plug-in 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()
Configurando manualmente o contexto da reserva
Como alternativa, você pode definir manualmente o contexto da reserva com o seguinte código.
# set reservation context reservation = DirectReservation(device, reservation_arn="<my_reservation_arn>").start() # run circuit during reservation task = device.run(bell, shots=100)
Isso é ideal para cadernos Jupyter, onde o contexto pode ser executado na primeira célula e todas as tarefas subsequentes serão executadas na reserva.
nota
A célula que contém a chamada .start() só deve ser executada uma vez.
Para voltar ao modo sob demanda: reinicie o caderno Jupyter ou ligue para o seguinte para alterar o contexto de volta ao modo sob demanda.
reservation.stop() # unset reservation context
nota
As reservas têm um horário de início e término programado (consulte Criar uma reserva). Os métodos reservation.stop() e reservation.start() não iniciam nem encerram uma reserva. Esses são métodos para modificar todas as tarefas quânticas subsequentes a serem executadas durante a reserva. Esses métodos não têm efeito no horário agendado da reserva.
Passe explicitamente o ARN da reserva ao criar a tarefa
Outra forma de criar tarefas durante uma reserva é passar explicitamente o ARN da reserva ao chamar device.run().
task = device.run(bell, shots=100, reservation_arn="<my_reservation_arn>")
Esse método associa diretamente a tarefa quântica ao ARN da reserva, garantindo que ela seja executada durante o período reservado. Para essa opção, adicione o ARN da reserva a cada tarefa que você planeja executar durante uma reserva. Além disso, verifique se as tarefas foram criadas em Qiskit ou PennyLane estão usando o ARN de reserva correto. Devido a essas considerações adicionais, as duas formas anteriores são recomendadas.
Ao usar o boto3 diretamente, passe o ARN da reserva como uma associação ao criar uma tarefa.
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)