本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在预约期间运行量子任务
ARN从 “创建预留” 中获取有效预留后,您可以创建要在预留期间运行的量子任务。在您的预约开始之前,这些任务将保持QUEUED
状态。
注意
预订视 AWS 账户和设备而定。只有创建预订的 AWS 账户才能使用您的预订ARN。
注意
对于通过预留提交的任务和作业,队列不可见,ARN因为在预留期间只有您的任务会运行。
你可以使用创建量子任务 Python SDKs 比如 Braket,Qiskit
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)