Executando tarefas quânticas durante uma reserva - Amazon Braket

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, PennyLane, ou diretamente com Boto3 (Trabalhando com Boto3). Para usar reservas, você deve ter a versão v1.79.0 ou superior do Amazon Braket Python SDK Você pode atualizar para o SDK, o provedor Qiskit e o plug-in PennyLane mais recentes do Braket com o código a seguir.

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)