在预约期间运行量子任务 - Amazon Braket

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在预约期间运行量子任务

ARN从 “创建预留” 中获取有效预留后,您可以创建要在预留期间运行的量子任务。在您的预约开始之前,这些任务将保持QUEUED状态。

注意

预订视 AWS 账户和设备而定。只有创建预订的 AWS 账户才能使用您的预订ARN。

注意

对于通过预留提交的任务和作业,队列不可见,ARN因为在预留期间只有您的任务会运行。

你可以使用创建量子任务 Python SDKs 比如 BraketQiskit, PennyLane,或者直接使用 boto3(使用 Boto 3)。要使用预订,您必须拥有 Amazon Braket 版本 1.79.0 或更高版本 Python SDK。 你可以更新到最新的 BraketSDK,Qiskit 提供者和 PennyLane 带有以下代码的插件。

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

使用DirectReservation上下文管理器运行任务

在计划预留中运行任务的推荐方法是使用DirectReservation上下文管理器。通过指定您的目标设备和预留ARN,上下文管理器可确保在 Python with 语句中创建的所有任务都以该设备的独占访问权限运行。

首先,定义量子电路和器件。然后使用预留上下文并运行任务。

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)

您可以使用在预留中创建量子任务 PennyLane 以及 Qiskit 插件,前提是创建量子任务时DirectReservation上下文处于活动状态。例如,使用 Qiskit-Braket 提供者,你可以按如下方式运行任务。

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)

同样,以下代码在预留期间使用以下代码运行电路 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()

手动设置预订上下文

或者,您可以使用以下代码手动设置预订上下文。

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

这非常适合 Jupyter 笔记本,在这些笔记本中,上下文可以在第一个单元格中运行,所有后续任务都将在预留中运行。

注意

包含该.start()呼叫的单元只能运行一次

要切换回按需模式,请执行以下操作:重新启动 Jupyter 笔记本,或调用以下命令将上下文更改回按需模式。

reservation.stop() # unset reservation context
注意

预订有预定的开始和结束时间(请参阅创建预订)。reservation.start()reservation.stop()方法不会开始或终止保留。这些是修改所有后续量子任务以在预留期间运行的方法。这些方法对预约时间没有影响。

创建任务ARN时明确通过预留

在预留期间创建任务的另一种方法是在呼叫ARN时明确通过预留device.run()

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

此方法直接将量子任务与预留关联起来ARN,确保其在保留期内运行。对于此选项,请将预留ARN添加到您计划在预留期间运行的每项任务中。此外,请检查任务是否已在中创建 Qiskit 或者 PennyLane 正在使用正确的预留ARN。出于这些额外的考虑,建议使用前两种方法。

直接使用 boto3 时,请在创建任务时将预留ARN作为关联传递。

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)