予約期間での量子タスクの実行
[予約を作成] により有効な予約 ARN を取得したら、予約期間に実行する量子タスクを作成できます。これらのタスクは、予約期間が開始されるまで QUEUED 状態のままになります。
注記
予約は AWS アカウントとデバイスに固有のものです。予約を作成した AWS アカウントのみが予約 ARN を使用できます。
注記
予約期間中はお客様のタスクのみが実行されるため、予約 ARN で送信されたタスクやジョブはキューに表示されません。
量子タスクを作成するには、Braket、Qiskit
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 Notebook に最適です。
注記
.start() 呼び出しを含むセルは 1 回だけ実行する必要があります。
オンデマンドモードに戻すには: Jupyter Notebook を再起動するか以下を呼び出すことで、コンテキストをオンデマンドモードに戻すことができます。
reservation.stop() # unset reservation context
注記
予約には開始時刻と終了時刻がスケジュールされています (「予約の作成」を参照)。reservation.start() および reservation.stop() メソッドは予約を開始したり終了したりしません。これらは、後続のすべての量子タスクを予約期間中に実行するように変更するメソッドです。これらのメソッドは、スケジュールされている予約時間には影響しません。
タスクの作成時に予約 ARN を明示的に渡す
予約期間におけるタスクを作成するもう 1 つの方法は、device.run() を呼び出すときに予約 ARN を明示的に渡すことです。
task = device.run(bell, shots=100, reservation_arn="<my_reservation_arn>")
このメソッドは、量子タスクを予約 ARN に直接関連付け、予約期間中に実行するようにします。この方法では、予約中に実行する予定の各タスクに予約 ARN を追加してください。さらに、Qiskit または PennyLane で作成されたタスクが正しい予約 ARN を使用することを確認します。これら追加の考慮事項があるため、前の 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)