

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

# 成本追蹤和儲存
<a name="braket-pricing"></a>

**提示**  
**了解量子運算的基礎 AWS！**註冊 [Amazon Braket 數位學習計劃](https://skillbuilder.aws/learning-plan/EH35DWGU3R/amazon-braket--knowledge-badge-readiness-path-includes-labs)，在完成一系列的學習課程和數位評估後獲得自己的數位徽章。

透過 Amazon Braket，您可以隨需存取量子運算資源，而無需預先承諾。您僅需按實際用量付費。若要進一步了解定價，請造訪我們的[定價頁面](https://aws.amazon.com/braket/pricing/)。

**Topics**
+ [設定 Amazon Braket QPUs的花費限制](#quantum-hardware-spending-limits)
+ [近乎即時的成本追蹤](#real-time-cost-tracking)
+ [節省成本的最佳實務](#best-practices)

## 設定 Amazon Braket QPUs的花費限制
<a name="quantum-hardware-spending-limits"></a>

Amazon Braket 花費限制提供量子處理單元 (QPUs) 的選用每個裝置成本控制。

 **花費限制的運作方式**：Amazon Braket 會追蹤您的累積花費，並根據您設定的限制驗證每個任務建立請求。如果任務的預估成本超過剩餘花費限制，Amazon Braket 會立即以驗證錯誤拒絕任務。您可以選擇性地設定花費限制的期間。透過設定期間，您可以確保只能在指定期間內提交任務。在期間之外提交的任務將被拒絕。

 **選擇加入設計**：除非您明確啟用控制項，否則現有的工作流程將保持不變。您可以透過刪除花費限制來移除所有限制。

**注意**  
 支出限制僅適用於隨需和混合任務 [QPU 任務](braket-submit-tasks)。它們排除[模擬器](braket-submit-tasks-simulators)、[受管筆記本](braket-get-started-create-notebook)、[混合任務](braket-jobs) EC2 執行個體成本和 [Braket Direct 保留](braket-reservations)。如需所有 AWS 服務的完整成本管理，請繼續使用 [AWS Budgets](https://aws.amazon.com/aws-cost-management/aws-budgets/)。

### 花費限制動作清單
<a name="spending-limits-actions"></a>

  **搜尋**   
 使用下列 AWS CLI 命令，您可以搜尋並列出特定 AWS 區域和特定 Braket 裝置的花費限制。  

```
aws --region {device_region} braket search-spending-limits --filters name=deviceArn,operator=EQUAL,values={device_arn}
```

  **建立**   
 使用下列 AWS CLI 命令，您可以在特定區域中為指定的量子裝置建立新的花費限制。如果裝置的花費限制已存在，則會拒絕請求。  

```
aws --region {device_region} braket create-spending-limit --device-arn {device_arn} --spending-limit {max_spend}
```

  **更新**   
 使用下列 AWS CLI 命令，您可以將現有的花費限制更新為新的最大花費值。如果目前花費和佇列花費的總和已高於請求的新最大花費，則會拒絕請求。  

```
aws --region {device_region} braket update-spending-limit --spending-limit-arn {spending_limit_arn} --spending-limit {new_max_spend}
```
 您可以提供時間範圍，而不是或除了新的最高支出之外，如上述範例所示。

  **刪除**   
 使用下列 AWS CLI 命令，您可以刪除現有的花費限制。  

```
aws --region {device_region} braket delete-spending-limit --spending-limit-arn {spending_limit_arn}
```
 您可以提供時間範圍，而不是或除了新的最高支出之外，如上述範例所示。

 選用時，一律指定區域參數做為最佳實務。在與裝置 不同的區域上執行的命令將會失敗，或者，如果是 `SearchSpendingLimits`，則傳回不正確的結果。

 如需如何使用花費限制的更多範例，請參閱[範例筆記本](https://github.com/amazon-braket/amazon-braket-examples/tree/main/examples/braket_features/Spending_Limits_Introduction.ipynb)。

### 任務驗證的運作方式
<a name="spending-limit-task-validation"></a>

 當 AWS 帳戶傳送其他有效`CreateQuantumTask`請求時，會受到下列門控行為的約束。注意：剩餘預算是花費限制與已排入佇列和目前花費的總和之間的差異。（請參閱下一節） 
+  案例 1：任務裝置**沒有花費限制**：任務已建立。
+  案例 2：目標裝置的花費限制，且**目前時間是在花費限制的期間內**：
  +  如果任務的預估成本低於或等於剩餘預算：CreateQuantumTask 成功，則會建立任務。
  +  如果預估成本大於剩餘預算： `CreateQuantumTask` 失敗，而且不會建立任務。
+  案例 3：目標裝置的花費限制，且**目前時間在花費限制的期間之外**： `CreateQuantumTask` 失敗，而且不會建立任務。

### 如何計算剩餘預算
<a name="spending-limit-budget-computation"></a>

 剩餘預算是**支出限制**與**目前支出**和**佇列支出**的總和之間的差異。

 為具有花費限制的裝置建立任務時，**佇列支出**會由任務的預估成本提高。此事件列於下表的第一列。下表顯示佇列支出和目前支出的情況，取決於任務的進度。


|  |  |  |  | 
| --- |--- |--- |--- |
|   **舊量子任務狀態**   |   **新的量子任務狀態**   |   **變更為排入佇列的支出**   |   **變更為目前支出**   | 
|  -  |  CREATED (已建立)  |  依預估成本增加  |  未變更  | 
|  CREATED (已建立)  |  QUEUED  |  未變更  |  未變更  | 
|  任何  |  RUNNING (執行中)  |  未變更  |  未變更  | 
|  任何  |  CANCEL  |  未變更  |  未變更  | 
|  CANCEL  |  CANCELLED (已取消)  |  減少預估成本  |  沒有 chnage  | 
|  任何  |  失敗  |  減少預估成本  |  未變更  | 
|  RUNNING (執行中)  |  COMPLETED (已完成)  |  減少預估成本  |   依預估成本增加 （針對部分完成的任務進行相應調整）   | 

### Edge 案例
<a name="spending-limit-edge-cases"></a>

 **問：建立支出限制時，佇列中已有的任務是否計入佇列支出？** 

 答：否。已建立、佇列或以其他方式進行中的任務不會計入新建立的支出限制的佇列支出。

 **問：透過更新支出限制是否會導致建立、佇列或以其他方式進行中的量子任務提早終止？** 

 答：否。

 **問：達到支出限制的結束時間是否會導致建立、佇列或以其他方式進行中的量子任務提早終止？** 

 答：否。無論花費限制狀態為何，都可以完成建立、佇列和其他進行中的任務。

 **問：缺少花費限制與零美元的花費限制有何不同？** 

 答：沒有花費限制允許建立無限制的量子任務。零美元的花費限制會封鎖所有量子任務。

 **問：過去或未來的花費限制是否封鎖所有量子任務的建立？** 

 答案：是。

 **問：建立支出限制時，在上述任務完成後，佇列中已存在的任務預估成本是否會計入目前的支出？** 

 答：否。只有在花費限制處於作用中狀態時提交的任務才會計入累積的花費。

## 近乎即時的成本追蹤
<a name="real-time-cost-tracking"></a>

Braket SDK 可讓您選擇將近乎即時的成本追蹤新增至量子工作負載。我們每個範例筆記本都包含成本追蹤程式碼，以提供您 Braket 量子處理單位 (QPUs) 和隨需模擬器的最高成本預估。最高成本預估將以 USD 顯示，不包含任何點數或折扣。

**注意**  
顯示的費用是根據 Amazon Braket 模擬器和量子處理單位 (QPU) 任務用量估算。顯示的預估費用可能與您的實際費用不同。預估費用不會計入任何折扣或點數，而且您可能會因為使用 Amazon Elastic Compute Cloud (Amazon EC2) 等其他服務而產生額外費用。

 **SV1 的成本追蹤** 

為了示範如何使用成本追蹤函數，我們將建構 Bell State 電路，並在 SV1 模擬器上執行它。首先匯入 Braket SDK 模組、定義 Bell 狀態，並將 `Tracker()`函數新增至我們的電路：

```
#import any required modules
from braket.aws import AwsDevice
from braket.circuits import Circuit
from braket.tracking import Tracker

#create our bell circuit
circ = Circuit().h(0).cnot(0,1)
device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1")
with Tracker() as tracker:
    task = device.run(circ, shots=1000).result()

#Your results
print(task.measurement_counts)
```

```
Counter({'00': 500, '11': 500})
```

當您執行筆記本時，您可以預期 Bell 狀態模擬有下列輸出。追蹤器函數會顯示傳送的鏡頭數量、完成的量子任務、執行持續時間、計費執行持續時間，以及以 USD 為單位的最高成本。每個模擬的執行時間可能有所不同。

```
import datetime

tracker.quantum_tasks_statistics()
{'arn:aws:braket:::device/quantum-simulator/amazon/sv1':
 {'shots': 1000,
  'tasks': {'COMPLETED': 1},
  'execution_duration': datetime.timedelta(microseconds=4000),
  'billed_execution_duration': datetime.timedelta(seconds=3)}}
  
tracker.simulator_tasks_cost()
```

```
Decimal('0.0037500000')
```

 **使用成本追蹤器設定最高成本** 

您可以使用成本追蹤器來設定程式的最高成本。對於您想要在指定程式上花費多少，可能會有最大閾值。透過這種方式，您可以使用成本追蹤器在執行程式碼中建置成本控制邏輯。下列範例在 Rigetti QPU 上採用相同的電路，並將成本限制為 1 USD。在我們的程式碼中執行一次重複電路的成本為 0.30 USD。我們已將邏輯設定為重複反覆運算，直到總成本超過 1 USD；因此，程式碼片段將執行三次，直到下一次反覆運算超過 1 USD。一般而言，程式會繼續反覆運算，直到達到所需的最高成本為止，在此情況下為 - 三次反覆運算。

```
device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3")
with Tracker() as tracker:
    while tracker.qpu_tasks_cost() < 1:
        result = device.run(circ, shots=200).result()
print(tracker.quantum_tasks_statistics())
print(tracker.qpu_tasks_cost(), "USD")
```

```
{'arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3': {'shots': 600, 'tasks': {'COMPLETED': 3}}}
1.4400000000 USD
```

**注意**  
成本追蹤器不會追蹤失敗TN1量子任務的持續時間。在TN1模擬期間，如果您的演練完成，但收縮步驟失敗，您的演練費用將不會顯示在成本追蹤器中。

## 節省成本的最佳實務
<a name="best-practices"></a>

請考慮下列使用 Amazon Braket 的最佳實務。節省時間、降低成本，並避免常見的錯誤。

 **使用模擬器驗證** 
+ 在 QPU 上執行之前，請使用模擬器驗證您的電路，因此您可以微調電路，而不會產生 QPU 使用費。
+ 雖然在模擬器上執行電路的結果可能與在 QPU 上執行電路的結果不同，但您可以使用模擬器識別編碼錯誤或組態問題。

 **限制使用者存取特定裝置** 
+ 您可以設定限制，防止未經授權的使用者在特定裝置上提交規定人數任務。限制存取的建議方法是使用 AWS IAM。如需如何執行此操作的詳細資訊，請參閱[限制存取](https://docs.aws.amazon.com/braket/latest/developerguide/braket-manage-access.html#restrict-access)。
+ 我們建議您**不要**使用**管理員**帳戶作為授予或限制使用者存取 Amazon Braket 裝置的方式。

 **設定帳單警示** 
+ 您可以設定帳單警示，在帳單達到預設限制時通知您。設定警示的建議方法是透過 AWS Budgets。您可以設定自訂預算，並在成本或用量可能超過預算金額時收到提醒。如需相關資訊，請參閱 [AWS Budgets](https://aws.amazon.com/aws-cost-management/aws-budgets/)。

 **低鏡頭計數的測試TN1量子任務** 
+ 模擬器的成本低於 QPUs，但如果量子任務以高鏡頭計數執行，則某些模擬器可能會很昂貴。建議您使用低shot計數來測試TN1任務。 Shot計數不會影響 SV1和本機模擬器任務的成本。

 **檢查所有區域是否有量子任務** 
+ 主控台只會針對您目前的 顯示量子任務 AWS 區域。尋找已提交的計費量子任務時，請務必檢查所有區域。
+ 您可以在[支援的裝置](braket-devices.md)文件頁面上檢視裝置及其相關區域的清單。