量子タスクのバッチ処理 - 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 task batching 」のAmazon Braket の例 GitHub」を参照してください。

量子タスクのバッチ処理とコストについて

量子タスクのバッチ処理と請求コストに関する注意点をいくつか示します。

  • デフォルトでは、量子タスクバッチ処理はすべてのタイムアウトを再試行するか、量子タスクを 3 回失敗させます。

  • 34 など、長時間実行されている量子タスクのバッチ qubits を SV1は、大きなコストが発生する可能性があります。量子タスクのバッチを開始する前に、run_batch割り当て値を慎重に再確認してください。の使用はお勧めしません。TN1 run_batch で。

  • TN1 では、失敗したリハーサルフェーズタスクのコストが発生する可能性があります (詳細については、TN1説明を参照してください)。自動再試行はコストに追加される可能性があるため、 を使用する場合、バッチ処理の 'max_retries' の数を 0 に設定することをお勧めします。TN1 (「量子タスクバッチ、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-th ディクショナリは i-th タスクとペアになります。

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)