本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在预留期间运行量子任务
从“创建预留”中获取有效的预留 ARN 后,您可以创建要在预留期间运行的量子任务。使用预留 ARN 提交的量子任务和混合任务不会显示在设备队列中。在预约开始时间之前提交的任务将保持该QUEUED状态,直到您的预订开始。
注意
预订视 AWS 账户和设备而定。只有创建预留的 AWS 账户才能使用您的预订 ARN。
在预约期间,既可以创建预留任务,也可以创建常规任务。要验证创建的 Braket 量子任务是否与预留关联,请在 Braket 控制台中查看量子任务页面上的 “预留 ARN” 字段,或者使用 SDK 查询任务元数据中的相同字段。本页的其余部分将介绍如何指定哪些任务与预留相关联。
您可以使用Python SDKs诸如 Brak et、、、之类的量子任务 CUDA-QPennyLaneQiskit
pip install --upgrade amazon-braket-sdk amazon-braket-pennylane-plugin qiskit-braket-provider
使用 DirectReservation 上下文管理器运行任务
在计划预留中运行任务的推荐方法是使用 DirectReservation 上下文管理器。通过指定您的目标设备和预留 ARN,上下文管理器可确保在 Python with 语句中创建的所有任务均以独占访问该设备的方式运行。
首先,定义量子电路和设备。然后,使用预留上下文并运行任务。确保您的整个工作负载都在with区块内运行;在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.ForteEnterprise1) # run the circuit in a reservation with DirectReservation(device, reservation_arn="<my_reservation_arn>"): task = device.run(bell, shots=100)
只要创建量子任务时DirectReservation上下文处于活动状态 CUDA-QPennyLane,就可以使用、和Qiskit插件在预留中创建量子任务。例如,使用 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) qpu = BraketProvider().get_backend("Forte Enterprise 1") # run the circuit in a reservation with DirectReservation(Devices.IonQ.ForteEnterprise1, reservation_arn="<my_reservation_arn>"): qpu_task = qpu.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.ForteEnterprise1.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.ForteEnterprise1, reservation_arn="<my_reservation_arn>"): probs = bell_state()
手动设置预留上下文
您还可以使用以下代码手动设置预留。
# set reservation context reservation_context = DirectReservation(device, reservation_arn="<my_reservation_arn>").start() # run circuit during reservation task = device.run(bell, shots=100)
这非常适合 Jupyter Notebook,其中,上下文可以在第一个单元格中运行,所有后续任务都将在预留中运行。
注意
包含 .start() 调用的单元只能运行一次。
要切换回按需模式,请执行以下操作:重新启动 Jupyter Notebook,或调用以下命令将上下文改回按需模式。
reservation_context.stop() # unset reservation context
注意
预订有预先确定的开始和结束时间(参见创建预订)。reservation_context.start() 和 reservation_context.stop() 方法不会开始或终止预留。相反,当上下文处于活动状态时,您创建的任何量子任务都将与您的预留相关联,并且仅在您的计划预留期间运行。预订上下文对预定预订时间没有影响。
创建任务时明确传递预留 ARN
在预留期间创建任务的另一种方法是在调用 device.run() 时明确传递预留 ARN。
task = device.run(bell, shots=100, reservation_arn="<my_reservation_arn>")
此方法直接将量子任务与预留 ARN 关联起来,确保其在预留期内运行。对于此选项,请将预留 ARN 添加到您计划在预留期间运行的每项任务中。但是,请注意,在使用第三方库(例如Qiskit或)时PennyLane,可能很难确保提交的任务使用的是正确的预留 ARN。因此,建议使用 DirectReservation 上下文管理器。
直接使用 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)