Quantum 任務批次處理 - Amazon Braket

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

Quantum 任務批次處理

每個 Amazon Braket 裝置都提供 Quantum 任務批次處理,本機模擬器除外。批次處理對於您在隨需模擬器上執行的量子任務特別有用 (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

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

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

有關量子任務批次處理和帳單成本的一些注意事項:

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

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

  • TN1 可能會產生失敗演練階段任務的成本 (如需詳細資訊,請參閱TN1說明)。自動重試可以新增至成本,因此我們建議在使用 時將批次時的 'max_retries' 數目設定為 0 TN1 (請參閱 Quantum 任務批次,第 186 行)。

Quantum 任務批次處理和 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字典,用於批次中的所有量子任務,或輸入字典list的 ,在這種情況下,第 i- 個字典會與第 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- 個量子任務對應到使用第 i- 個輸入字典執行的電路。

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)