Executando tarefas quânticas durante uma reserva - Amazon Braket

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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. Tarefas quânticas e trabalhos híbridos enviados com um ARN de reserva não aparecerão na fila do dispositivo. As tarefas enviadas antes do horário de início da reserva permanecerão no QUEUED estado até o início da reserva.

nota

As reservas são específicas AWS da conta e do dispositivo. Somente a AWS conta que criou a reserva pode usar o ARN da sua reserva.

Durante uma reserva, tanto a reserva quanto as tarefas regulares podem ser criadas. Para verificar se uma tarefa quântica criada pelo Braket está associada a uma reserva, verifique o campo “ARN da reserva” na página da tarefa quântica no console do Braket ou consulte o mesmo campo nos metadados da tarefa usando o SDK. O restante desta página descreve como especificar quais tarefas estão associadas à reserva.

Você pode criar tarefas quânticas usando Python SDKs como Braket,,, CUDA-QPennyLaneQiskit, ou diretamente com o boto3 (Trabalhando com o 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. Certifique-se de que toda a sua carga de trabalho seja executada dentro do with bloco; qualquer coisa executada fora do escopo do with bloco não será associada à sua 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)

Você pode criar tarefas quânticas em uma reserva usando CUDA-QPennyLane, e Qiskit plug-ins, desde que o DirectReservation contexto 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_context = 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_context.stop() # unset reservation context
nota

As reservas têm um horário de início e término predeterminado (consulte Criar uma reserva). Os métodos reservation_context.stop() e reservation_context.start() não iniciam nem encerram uma reserva. Em vez disso, enquanto o contexto estiver ativo, todas as tarefas quânticas que você criar serão associadas à sua reserva e serão executadas somente durante a reserva agendada. O contexto da reserva não tem 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. No entanto, observe que, ao usar bibliotecas de terceirosPennyLane, como Qiskit ou, pode ser difícil garantir que as tarefas enviadas estejam usando o ARN de reserva correto. Por esse motivo, é recomendável usar o gerenciador de DirectReservation contexto.

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)