在预留期间运行量子任务
从“创建预留”中获取有效的预留 ARN 后,您可以创建要在预留期间运行的量子任务。在您的预留开始之前,这些任务将保持 QUEUED 状态。
注意
预留视 AWS 账户和设备而定。只有创建预留的 AWS 账户才能使用您的预留 ARN。
注意
对于使用预留 ARN 提交的任务和作业,队列不可见,因为只有在预留期间,您的任务才会运行。
您可以使用诸如 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)
只要创建量子任务时 DirectReservation 上下文处于活动状态,您就可以使用 PennyLane 和 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) 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
在预留期间创建任务的另一种方法是在调用 device.run() 时明确传递预留 ARN。
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)