

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

# 在保留期間執行量子任務
<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 提交的 Quantum 任務和混合任務不會顯示在裝置佇列中。在保留開始時間之前提交的任務將保持 `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/qiskit-community/qiskit-braket-provider](https://github.com/qiskit-community/qiskit-braket-provider)、 或直接搭配 boto3 [https://github.com/amazon-braket/amazon-braket-pennylane-plugin-python](https://github.com/amazon-braket/amazon-braket-pennylane-plugin-python)([使用 Boto3](https://docs.aws.amazon.com/braket/latest/developerguide/braket-using-boto3.html)) Python SDKs來建立量子任務。若要使用保留，您必須擁有 [Amazon Braket Python SDK](https://github.com/amazon-braket/amazon-braket-sdk-python)的 [1.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)
```

您可以使用 CUDA-Q、 PennyLane和 Qiskit 外掛程式在保留中建立量子任務，只要`DirectReservation`內容在建立量子任務時處於作用中狀態即可。例如，透過 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 筆記本，且所有後續任務將在保留中執行。

**注意**  
包含`.start()`呼叫的儲存格*應只執行一次*。

若要切換回隨需模式：重新啟動 Jupyter 筆記本，或呼叫以下內容將內容變更回隨需模式。

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

在保留期間建立任務的另一個方法是在呼叫 時明確傳遞保留 ARN`device.run()`。

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