

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

# コストの追跡と削減
<a name="braket-pricing"></a>

**ヒント**  
**量子コンピューティングの基礎について説明します AWS。**[Amazon Braket Digital Learning Plan](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}
```
 上記の例のように、新しい最大支出の代わりに、またはそれに加えて期間を指定できます。

 オプションですが、ベストプラクティスとして常に region パラメータを指定します。デバイスの とは異なるリージョンで実行されたコマンドは失敗するか、 の場合は誤った結果`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 | 変更なし | 変更なし | 
| いずれか | キャンセル中 | 変更なし | 変更なし | 
| キャンセル中 | CANCELLED | 推定コストによる削減 | チャネルなし | 
| いずれか | FAILED | 推定コストによる削減 | 変更なし | 
| RUNNING | COMPLETED | 推定コストによる削減 |  推定コストの増加 (部分的に完了したタスクに応じて調整)  | 

### エッジケース
<a name="spending-limit-edge-cases"></a>

 **Q: 使用制限を作成する場合、キューに入っているタスクはキューに入れられた使用にカウントされますか?**

 A: いいえ。作成済み、キューに入っている、または進行中のタスクは、新しく作成された使用制限のキューに入れられた支出にはカウントされません。

 **Q: 使用制限を下げると、更新によって、作成済み、キューに入っている、または進行中の量子タスクが早期終了されますか?**

 A: いいえ。

 **Q: 使用制限の終了時間に達すると、作成済み、キューに入っている、または進行中の量子タスクが早期に終了しますか?**

 A: いいえ。作成済み、キューに入っている、または進行中のタスクは、使用制限のステータスに関係なく完了できます。

 **Q: 使用制限の不足と 0 USD の使用制限の違いは何ですか?**

 A: 使用制限がないと、制限なしで量子タスクを作成できます。ゼロドルの使用制限は、すべての量子タスクをブロックします。

 **Q: 過去または将来の支出制限は、すべての量子タスクの作成をブロックしますか?**

 A: はい。

 **Q: 使用制限を作成する場合、キューにすでにあるタスクの推定コストは、タスクが完了すると現在の支出にカウントされますか?**

 A: いいえ。支出制限がアクティブなときに送信されたタスクのみが、累積支出にカウントされます。

## ほぼリアルタイムのコスト追跡
<a name="real-time-cost-tracking"></a>

Braket SDK には、量子ワークロードにほぼリアルタイムのコスト追跡を追加するオプションが用意されています。各サンプルノートブックには、Braket の量子処理ユニット (QPU) とオンデマンドシミュレーターの最大コスト見積もりを提供するコスト追跡コードが含まれています。最大コスト見積もりは USD で表示され、クレジットや割引は含まれません。

**注記**  
表示される料金は、Amazon Braket シミュレーターと量子処理ユニット (QPU) のタスクの使用状況に基づいた見積もりです。表示される料金見積もりは、実際の料金とは異なる場合があります。料金見積もりには、割引やクレジットは勘案されていません。また、Amazon Elastic Compute Cloud (Amazon EC2) など他のサービスの利用状況によっては、追加の料金が発生する可能性もあります。

 **SV1 のコスト追跡** 

コスト追跡関数の使用方法を示すために、ベル状態回路を構築し、SV1 シミュレーターで実行します。まず、Braket SDK モジュールをインポートし、ベル状態を定義して、回路に `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})
```

ノートブックを実行すると、ベル状態のシミュレーションで下記の出力が予想されます。トラッカー (コスト追跡) 関数により、送信されたショットの数、完了した量子タスク数、実行期間、請求された実行期間、最大コストが 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 に制限しています。コード内で回路の反復を 1 回実行するコストは 0.30 USD です。合計コストが 1 USD を超えるまで反復を繰り返すようにロジックが設定されています。したがって、このコードスニペットは次の反復が 1 USD を超えるまでの 3 回、実行されます。一般的に、プログラムは希望する最大コストに達するまで反復され続けます。この場合、反復は 3 回です。

```
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 で回路を実行した結果と同じではない可能性がありますが、シミュレーターを使用してコーディングエラーや構成の問題を特定できます。

 **特定のデバイスへのユーザーアクセスを制限する** 
+ 権限のないユーザーが特定のデバイスで量子タスクを送信できないように制限を設定できます。アクセスを制限するには、IAM AWS を使用することをお勧めします。これを行う方法についての詳細は、[アクセスの制限](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 量子タスクをテストする** 
+ シミュレーターのコストは QPU より少なくなりますが、特定のシミュレーターは、高いショット数で量子タスクを実行するとコストが高くなる可能性があります。TN1 タスクは少ない shot 数でテストすることをお勧めします。Shot 数は、SV1 およびローカルシミュレータータスクのコストには影響しません。

 **量子タスクがないかすべてのリージョンをチェックする** 
+ コンソールには、現在の量子タスクのみが表示されます AWS リージョン。提出された請求可能な量子タスクを探すときは、必ずすべてのリージョンをチェックしてください。
+ [サポートされるデバイス](braket-devices.md)ドキュメントページで、デバイスおよび関連するリージョンの一覧を表示できます。