量子任务批处理 - Amazon Braket

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

量子任务批处理

除本地模拟器外,每台 Amazon Braket 设备都支持量子任务批处理。批处理对于在按需模拟器上运行的量子任务特别有用 (TN1 或者 SV1),因为它们可以并行处理多个量子任务。为了帮助您设置各种量子任务,Amazon Braket 提供了示例笔记本。

批处理允许您并行启动量子任务。例如,如果你想进行需要10个量子任务的计算,并且这些量子任务中的电路相互独立,那么使用批处理是个好主意。这样,您就不必等待一项量子任务完成后再开始另一项任务。

以下示例显示如何运行一批量子任务:

circuits = [bell for _ in range(5)] batch = device.run_batch(circuits, s3_folder, shots=100) print(batch.results()[0].measurement_counts) # The result of the first quantum task in the batch

有关更多信息,请参阅有关 Quantum 任务批处理的 Amazon Braket 示例,其中包含有关批处理的更多具体信息。 GitHub

关于量子任务批处理和成本

关于量子任务批处理和计费成本,请记住一些注意事项:

  • 默认情况下,量子任务批处理重试全部超时或量子任务失败 3 次。

  • 一批长时间运行的量子任务,例如 34 qubits for SV1,可能会产生高昂的成本。在开始一批量子run_batch任务之前,请务必仔细检查分配值。我们不建议使用 TN1 和run_batch

  • TN1 可能因排练阶段的任务失败而产生费用(有关更多信息,请参阅TN1说明)。自动重试可能会增加成本,因此我们建议在使用时将批处理时的 “max_retries” 次数设置为 0 TN1 (参见 Quantum Task 批处理,第 186 行)。

量子任务批处理和 PennyLane

在 Amazon Braket PennyLane 上使用时,通过parallel = True设置实例化 Amazon Braket 设备的时间,充分利用批处理功能,如以下示例所示。

device = qml.device("braket.aws.qubit",device_arn="arn:aws:braket:::device/quantum-simulator/amazon/sv1",wires=wires,s3_destination_folder=s3_folder,parallel=True,)

有关批处理的更多信息 PennyLane,请参阅量子电路的并行优化。

任务批处理和参数化电路

提交包含参数化电路的量子任务批处理时,您可以提供inputs字典(用于批次中的所有量子任务)或输入字典,在这种情况下,第-th 字典与i第-th 个任务配对,如以下示例所示。list i

from braket.circuits import Circuit, FreeParameter, Observable from braket.aws import AwsQuantumTaskBatch # create the free parameters alpha = FreeParameter('alpha') beta = FreeParameter('beta') # create two circuits circ_a = Circuit().rx(0, alpha).ry(1, alpha).cnot(0,2).xx(0, 2, beta) circ_a.variance(observable=Observable.Z(), target=0) circ_b = Circuit().rx(0, alpha).rz(1, alpha).cnot(0,2).zz(0, 2, beta) circ_b.expectation(observable=Observable.Z(), target=2) # use the same inputs for both circuits in one batch tasks = device.run_batch([circ_a, circ_b], inputs={'alpha': 0.1, 'beta':0.2}) # or provide each task its own set of inputs inputs_list = [{'alpha': 0.3,'beta':0.1}, {'alpha': 0.1,'beta':0.4}] tasks = device.run_batch([circ_a, circ_b], inputs=inputs_list)

您还可以为单个参数电路准备输入字典列表,然后将其作为量子任务批量提交。如果列表中有 N 个输入字典,则该批次包含 N 个量子任务。i第 n 个量子任务对应于使用i第-t 个输入字典执行的电路。

from braket.circuits import Circuit, FreeParameter # create a parametric circuit circ = Circuit().rx(0, FreeParameter('alpha')) # provide a list of inputs to execute with the circuit inputs_list = [{'alpha': 0.1}, {'alpha': 0.2}, {'alpha': 0.3}] tasks = device.run_batch(circ, inputs=inputs_list)