

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

# 予約期間での量子タスクの実行
<a name="braket-run-quantum-task-with-reservation"></a>

[[予約を作成]](https://docs.aws.amazon.com/braket/latest/developerguide/braket-reservations.html#braket-create-a-reservation) により有効な予約 ARN を取得したら、予約期間に実行する量子タスクを作成できます。予約 ARN で送信された量子タスクとハイブリッドジョブは、デバイスキューに表示されません。予約開始時刻より前に送信されたタスクは、予約が開始されるまで `QUEUED`状態のままになります。

**注記**  
予約は AWS アカウントとデバイスによって異なります。予約を作成した AWS アカウントのみが予約 ARN を使用できます。  
予約中に、予約タスクと通常のタスクの両方を作成できます。作成された Braket 量子タスクが予約に関連付けられていることを確認するには、Braket コンソールの量子タスクのページの「予約 ARN」フィールドを確認するか、 SDK を使用してタスクメタデータ内の同じフィールドをクエリします。このページの残りの部分では、どのタスクをリザベーションに関連付けるかを指定する方法について説明します。

[Braket](https://docs.aws.amazon.com/braket/latest/developerguide/braket-references.html)、、[https://github.com/NVIDIA/cuda-quantum](https://github.com/NVIDIA/cuda-quantum)、[https://github.com/amazon-braket/amazon-braket-pennylane-plugin-python](https://github.com/amazon-braket/amazon-braket-pennylane-plugin-python)、 [https://github.com/qiskit-community/qiskit-braket-provider](https://github.com/qiskit-community/qiskit-braket-provider)Python SDKsなどの量子タスクを boto3 ([Boto3 の使用](https://docs.aws.amazon.com/braket/latest/developerguide/braket-using-boto3.html)) で直接作成できます。予約を使用するには、[Amazon Braket Python SDK](https://github.com/amazon-braket/amazon-braket-sdk-python) のバージョン [v1.79.0](https://github.com/amazon-braket/amazon-braket-sdk-python/releases/tag/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` ステートメント内で作成されたすべてのタスクがデバイスへの排他的アクセスによって実行されるようになります。

まず、量子回路とデバイスを定義します。次に、予約コンテキストを使用してタスクを実行します。**ワークロード全体が `with`ブロック内で実行されていることを確認します。 `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.ForteEnterprise1)

# run the circuit in a reservation
with DirectReservation(device, reservation_arn="<my_reservation_arn>"):
    task = device.run(bell, shots=100)
```

量子タスクの作成中に`DirectReservation`コンテキストがアクティブであれば、CUDA-Q、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)

qpu = BraketProvider().get_backend("Forte Enterprise 1")

# run the circuit in a reservation
with DirectReservation(Devices.IonQ.ForteEnterprise1, reservation_arn="<my_reservation_arn>"):
    qpu_task = qpu.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.ForteEnterprise1.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.ForteEnterprise1, reservation_arn="<my_reservation_arn>"):
    probs = bell_state()
```

**予約コンテキストを手動で設定する**

または、予約コンテキストを手動で設定するには、次のコードを使用します。

```
# set reservation context 
reservation_context = 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_context.stop()  # unset reservation context 
```

**注記**  
 予約には、事前に定義された開始時刻と終了時刻があります ([「予約の作成](https://docs.aws.amazon.com/braket/latest/developerguide/braket-reservations.html#braket-create-a-reservation)」を参照）。`reservation_context.start()` および `reservation_context.stop()` メソッド**は予約を開始したり終了したりしません**。代わりに、コンテキストがアクティブな間、作成した量子タスクは予約に関連付けられ、スケジュールされた予約中にのみ実行されます。予約コンテキストは、スケジュールされた予約時間には影響しません。

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

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

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

このメソッドは、量子タスクを予約 ARN に直接関連付け、予約期間中に実行するようにします。この方法では、予約中に実行する予定の各タスクに予約 ARN を追加してください。ただし、 Qiskitや などのサードパーティーライブラリを使用する場合PennyLane、送信されたタスクが正しい予約 ARN を使用していることを確認するのは難しい場合があります。このため、DirectReservation コンテキストマネージャーを使用することをお勧めします。

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)
```