量子任務批處理 - Amazon Braket

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

量子任務批處理

除了本地模擬器外,每個 Amazon Braket 裝置都可以使用量子任務批次處理。批次處理對於在隨選模擬器上執行的量子工作特別有用 (TN1 或 SV1)因為它們可以 parallel 處理多個量子任務。為了協助您設定各種量子任務,Amazon Braket 提供範例筆記本電腦

批次處理可讓您 parallel 啟動量子任務。例如,如果您希望進行需要 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

如需詳細資訊,請參閱 Amazon Braket GitHub 或 Quantum 任務批次處理的範例,其中包含有關批次處理的更具體資訊。

關於量子任務批處理和成本

有關量子任務批處理和計費成本,請牢記一些注意事項:

  • 根據預設,量子任務批次處理會重試所有逾時或失敗量子任務 3 次。

  • 一批長時間運行的量子任務,如 34 qubits for SV1,可能會產生大量成本。在開始一批量子任務之前,請務必仔細檢查run_batch分配值。我們不建議使用 TN1 與run_batch.

  • TN1 排練階段失敗的工作可能會產生成本 (如需詳細資訊,請參閱TN1說明)。自動重試可能會增加成本,因此我們建議在使用時將批處理時的「max_retries」數量設置為 0 TN1 (請參閱量子任務批處理,第 186 行)。

量子任務批處理和 PennyLane

在 Amazon Braket PennyLane 上使用時進行批次處理,方法是設定實例化 Amazon Braket 裝置的parallel = True時間,如下列範例所示。

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典,或輸入字典,在這種情況下,i第-th 字典與第 i-th 任務配對,如下列list範例所示。

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-th 量子任務對應於使用 i-th 輸入字典執行的電路。

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)