

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

# 使用保留
<a name="braket-reservations"></a>

預留可讓您獨家存取您選擇的量子裝置。您可以方便地排程保留，讓您確切知道工作負載何時開始和結束執行。所有 Braket 裝置皆可以 1 小時遞增的方式進行預訂，且最多可以提前 48 小時取消，無需額外付費。我們建議您使用 Braket Direct Reservation ARN 或在保留期間提交工作負載，為即將到來的保留預先排入佇列量子任務和混合任務。

無論您在量子處理單元 (QPU) 上執行多少個量子任務和混合任務，專用裝置存取的成本取決於保留的持續時間。您可以在我們的[定價頁面](https://aws.amazon.com/braket/pricing/)或透過 [Amazon Braket 管理主控台](https://us-east-1.console.aws.amazon.com/braket/home?region=us-east-1#/devices)找到可供保留的量子電腦更新清單。

**注意**  
在保留中，沒有[閘道擷取](braket-terms.md#gateshot-limit-term)限制。此外，對於IonQ裝置，[錯誤緩解](https://docs.aws.amazon.com/braket/latest/developerguide/braket-error-mitigation.html)任務的最小射擊計數會減少為 500 （隨需則為 2500)。

 **何時使用保留** 

利用保留存取可讓您方便且可預測地確切了解量子工作負載何時開始和結束執行。相較於隨需提交任務和混合任務，您不需要等待其他客戶任務的佇列。由於您在保留期間擁有裝置的專屬存取權，因此只有工作負載會在整個保留期間於裝置上執行。

我們建議您將隨需存取用於研究的設計和原型設計階段，以便快速且經濟實惠地迭代演算法。準備好產生最終實驗結果後，請考慮在方便的時候安排裝置保留，以確保您可以滿足專案或發佈截止日期。當您想要在特定時間執行任務時，例如在量子電腦上執行即時示範或研討會時，我們也建議使用保留。

**Topics**
+ [如何建立保留](braket-create-a-reservation.md)
+ [在保留期間執行量子任務](braket-run-quantum-task-with-reservation.md)
+ [在保留期間執行混合式任務](braket-run-hybrid-jobs-with-reservation.md)
+ [保留結束時會發生什麼情況](braket-end-of-reservation.md)
+ [取消或重新排程現有的保留](braket-cancel-reservation.md)

# 如何建立保留
<a name="braket-create-a-reservation"></a>

若要建立保留，請依照下列步驟聯絡 Braket 團隊：

1. 開啟 Amazon Braket 主控台。

1. 在左側窗格中選擇 **Braket Direct**，然後在**預留**區段中，選擇**預留裝置 **。

1. 選取您要保留**的裝置**。

1. 提供您的聯絡資訊，包括**名稱**和**電子郵件**。請務必提供您定期檢查的有效電子郵件地址。

1. 在**告訴我們工作負載的相關資訊**下，提供使用預留執行工作負載的任何詳細資訊。例如，所需的保留長度、相關限制條件或所需的排程。

提交表單後，您會收到來自 Braket 團隊的電子郵件，其中包含後續步驟。確認保留後，您將透過電子郵件收到保留 ARN。您需要使用保留 ARN 來建立保留任務。在沒有保留 ARN 的情況下建立的任務會提交至一般隨需佇列，而且不會在保留期間執行。

**注意**  
只有在您收到保留 ARN 後，才會確認您的保留。

保留以最少 1 小時的增量提供，某些裝置可能會有其他保留長度限制 （包括最短和最長保留持續時間）。Braket 團隊會在確認保留之前與您分享任何相關資訊。

Braket 團隊將透過您的電子郵件與您聯絡，安排與 Braket 專家進行 30 分鐘的工作階段。

# 在保留期間執行量子任務
<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)
```

# 在保留期間執行混合式任務
<a name="braket-run-hybrid-jobs-with-reservation"></a>

將 Python 函數作為混合任務執行後，您可以透過傳遞`reservation_arn`關鍵字引數在保留中執行混合任務。混合任務中的所有任務都會使用保留 ARN。重要的是， 的混合任務`reservation_arn`*只會在保留開始時啟動傳統運算*。

**注意**  
在保留期間執行的混合任務*只會在預留裝置上成功執行*規定人數任務。嘗試使用不同的隨需 Braket 裝置會導致錯誤。如果您需要在相同混合任務中的隨需模擬器和預留裝置上執行任務，請`DirectReservation`改用 。

下列程式碼示範如何在保留期間執行混合式任務。

```
from braket.aws import AwsDevice
from braket.devices import Devices
from braket.jobs import get_job_device_arn, hybrid_job

@hybrid_job(device=Devices.IonQ.ForteEnterprise1, reservation_arn="<my_reservation_arn>")
def example_hybrid_job():
    # declare AwsDevice within the hybrid job
    device = AwsDevice(get_job_device_arn())
    bell = Circuit().h(0).cnot(0, 1)
    
    task = device.run(bell, shots=10)
```

對於使用 Python 指令碼的混合式任務 （請參閱開發人員指南中[建立您的第一個混合式任務](https://docs.aws.amazon.com/braket/latest/developerguide/braket-jobs-first.html)一節），您可以在建立任務時傳遞`reservation_arn`關鍵字引數，在保留中執行這些任務。

```
from braket.aws import AwsQuantumJob 
from braket.devices import Devices

job = AwsQuantumJob.create( 
    Devices.IonQ.ForteEnterprise1,
    source_module="algorithm_script.py", 
    entry_point="algorithm_script:start_here",
    reservation_arn="<my_reservation_arn>"
)
```

# 保留結束時會發生什麼情況
<a name="braket-end-of-reservation"></a>

保留結束後，您就不再擁有裝置的專用存取權。使用此保留排入佇列的任何剩餘工作負載都會自動取消。

**注意**  
保留結束時處於 `RUNNING` 狀態的任何任務都會取消。我們建議您使用[檢查點，在方便的時候儲存和重新啟動](https://docs.aws.amazon.com/braket/latest/developerguide/braket-jobs-checkpoints.html)任務。

無法延長持續保留，例如保留開始之後和保留結束之前，因為每個保留都代表獨立的專用裝置存取。例如，兩個back-to-back保留會被視為個別的，而第一個保留中的任何待定任務都會自動取消。它們不會在第二個保留中繼續。

**注意**  
預留代表 AWS 帳戶的專用裝置存取。即使裝置保持閒置狀態，其他客戶也無法使用它。因此，無論使用時間為何，都會向您收取預留時間長度的費用。

# 取消或重新排程現有的保留
<a name="braket-cancel-reservation"></a>

您可以在排定的保留開始時間前至少 48 小時內取消保留。若要取消，請以取消請求回應您收到的保留確認電子郵件。

若要重新排程，您必須取消現有的保留，然後建立新的保留。