予約中の量子タスクの実行 - Amazon Braket

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

予約中の量子タスクの実行

予約の作成から有効な予約 ARN https://docs.aws.amazon.com/braket/latest/developerguide/braket-reservations.html#braket-create-a-reservationを取得したら、予約中に実行する量子タスクを作成できます。これらのタスクは、予約が開始されるまで QUEUED状態のままになります。

注記

予約は AWS アカウントとデバイス固有です。予約を作成した AWS アカウントのみが予約 ARN を使用できます。

注記

予約 ARN で送信されたタスクとジョブのキューの可視性はありません。予約中に実行されるのはタスクのみです。

Python SDKs Braket、、QiskitPennyLaneまたは boto3 (Boto3 の操作) を使用して直接量子タスクを作成できます。予約を使用するには、Amazon Braket Python SDKのバージョン v1.79.0 以降が必要です。次のコードを使用して、最新の Braket SDK、Qiskitプロバイダー、PennyLaneプラグインに更新できます。

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() 呼び出しを含むセルは 1 回のみ実行する必要があります。

オンデマンドモードに戻すには: Jupyter Notebook を再起動するか、以下を呼び出してコンテキストをオンデマンドモードに戻します。

reservation.stop() # unset reservation context
注記

予約には開始時刻と終了時刻がスケジュールされています (「予約の作成」を参照)。reservation.start() および reservation.stop()メソッドは予約を開始または終了しません。これらは、予約中に実行する後続のすべての量子タスクを変更する方法です。これらの方法は、スケジュールされた予約時間には影響しません。

タスクの作成時に予約 ARN を明示的に渡す

予約中にタスクを作成するもう 1 つの方法は、 を呼び出すときに予約 ARN を明示的に渡すことですdevice.run()

task = device.run(bell, shots=100, reservation_arn="<my_reservation_arn>")

このメソッドは、量子タスクを予約 ARN に直接関連付け、予約期間中に実行できるようにします。このオプションでは、予約中に実行する予定の各タスクに予約 ARN を追加します。さらに、 Qiskitまたは で作成されたタスクが正しい予約 ARN PennyLaneを使用していることを確認します。これらの追加の考慮事項により、前の 2 つの方法をお勧めします。

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)