

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 什么是 Amazon Braket？
<a name="what-is-braket"></a>

**提示**  
**通过以下方式学习量子计算的基础 AWS！**注册 [Amazon Braket 数字学习计划](https://skillbuilder.aws/learning-plan/EH35DWGU3R/amazon-braket--knowledge-badge-readiness-path-includes-labs)，完成一系列学习课程和数字评估后，即可获得自己的数字徽章。

 Amazon Braket 是一款完全托管的软件 AWS 服务 ，可帮助研究人员、科学家和开发人员开始使用量子计算。量子计算可解决经典计算机无法解决的计算问题，因为它利用了量子力学定律以新方式处理信息。

获取量子计算硬件可能既昂贵又不方便。由于访问权限有限，很难运行算法、优化设计、评估技术的当前状态以及规划何时投入资源以获得最大收益。Braket 可帮助您克服这些挑战。

 Braket 提供对各种量子计算技术的单一接入点。使用 Braket，您可以：
+ 探索和设计量子算法及混合算法。
+ 在不同的量子电路模拟器上测试算法。
+ 在不同类型的量子计算机上运行算法。
+ 创建概念验证应用程序。

要定义量子问题并对量子计算机进行编程以解决这些问题，需要一套新技能。为帮助您获得这些技能，Braket 提供了不同的环境来模拟和运行您的量子算法。您可以找到最适合您要求的方法，并通过一组名为 *Notebook* 的示例环境快速入门。

 Braket 开发分为三个阶段：
+ [构建](https://docs.aws.amazon.com/braket/latest/developerguide/braket-build.html)：Braket 提供完全托管的 Jupyter Notebook 环境，可以让您轻松上手。Braket Notebook 预装了示例算法、资源和开发人员工具，包括 Amazon Braket SDK。借助 Amazon Braket SDK，您可以构建量子算法，然后通过更改一行代码在不同的量子计算机和模拟器上对其进行测试和运行。
+ [测试](https://docs.aws.amazon.com/braket/latest/developerguide/braket-test.html)：Braket 提供对完全托管的高性能量子电路模拟器的访问。您可以测试和验证您的电路。Braket 处理所有底层软件组件和 Amazon Elastic Compute Cloud（Amazon EC2）集群，从而减轻了在传统高性能计算（HPC）基础设施上模拟量子电路的负担。
+ [运行](https://docs.aws.amazon.com/braket/latest/developerguide/braket-using.html)：Braket 可实现对不同类型的量子计算机的安全按需访问。您可以从、、和Rigetti访问基于门的量子计算机 AQT IonQIQM，也可以访问来自的模拟哈密顿仿真器。 QuEra同时，您无需预先承诺，也不需要通过个别提供商购买访问权限。

 **关于量子计算和 Braket** 

量子计算正处于早期发展阶段。重要的一点，我们要明白，目前不存在通用、容错的量子计算机。因此，特定类型的量子硬件更适合每个使用案例，访问各种计算硬件至关重要。Braket 通过第三方提供商提供各种硬件。

现有的量子硬件由于噪声而受到限制，这会带来错误。该行业正处于含噪中型量子（NISQ）时代。在 NISQ 时代，量子计算设备噪声太大，无法维持纯量子算法，如*肖尔算法*或*格罗弗算法*。在获得更好的量子误差校正之前，最实用的量子计算需要将经典（传统）计算资源与量子计算机相结合来创建混合算法。Braket 可帮助您使用*混合量子算法*。

在混合量子算法中，量子处理单元 (QPUs) 被用作协处理器 CPUs，从而加快经典算法中的特定计算。这些算法利用迭代处理，在这种处理中，计算在经典计算机和量子计算机之间移动。例如，量子计算在化学、优化和机器学习中的当前应用基于*变分量子算法*，变分量子算法是一种*混合量子算法*。在变分量子算法中，经典优化例程迭代调整参数化量子电路的参数，与根据机器学习训练集中的误差迭代调整神经网络权重的方式大致相同。Braket 提供对 PennyLane 开源软件库的访问权限，该库可帮助您使用*变分量子算法*。

量子计算在四个主要领域的计算中越来越受欢迎：
+  **数论**：包括因式分解和密码学（例如，*肖尔算法*是数论计算的主要量子方法）
+  **优化**：包括约束满足度、求解线性系统和机器学习
+  **Oracular 计算**：包括搜索、隐藏子组和排序查找（例如，*Grover 算法是*预言机计算的主要量子方法）
+  **模拟**：包括直接模拟、节点不变量和量子近似优化算法（QAOA）应用

这些计算类别的应用可在金融服务、生物技术、制造和制药等行业中找到。Braket 提供了功能和示例 Notebook，除某些实际问题外，这些功能和示例 Notebook 已经可以应用于许多概念验证问题。

**Topics**
+ [Amazon Braket 的工作方式](braket-how-it-works.md)
+ [Amazon Braket 术语和概念](braket-terms.md)
+ [成本跟踪和节约](braket-pricing.md)
+ [Amazon Braket 的 API 参考和存储库](braket-references.md)
+ [Amazon Braket 支持的区域和设备](braket-devices.md)

# Amazon Braket 的工作方式
<a name="braket-how-it-works"></a>

**提示**  
**通过以下方式学习量子计算的基础 AWS！**注册 [Amazon Braket 数字学习计划](https://skillbuilder.aws/learning-plan/EH35DWGU3R/amazon-braket--knowledge-badge-readiness-path-includes-labs)，完成一系列学习课程和数字评估后，即可获得自己的数字徽章。

 Amazon Braket 提供对量子计算设备的按需访问，包括按需电路模拟器和不同类型的量子处理单元 ()。QPUs在 Amazon Braket 中，对设备的原子请求是一项量子任务。对于基于门的设备，此请求包括量子电路（包括测量指令和拍摄次数）和其他请求元数据。对于模拟哈密顿模拟器来说，量子任务包含量子寄存器的物理布局以及操纵场的时间和空间依赖性。

Braket Direct是一项计划，它扩展了你探索量子计算的方式 AWS，加速了研究和创新。您可以在各种量子设备上预留专用容量，直接与量子计算专家接触，并抢先访问下一代功能，包括来自 IonQ 的最新陷阱离子设备 Forte。

在本节中，我们将学习在 Amazon Braket 上运行量子任务的高级流程。

**Topics**
+ [Amazon Braket 量子任务流](#braket-data-flow)
+ [第三方数据处理](#braket-3rd-party-processing)

## Amazon Braket 量子任务流
<a name="braket-data-flow"></a>

![\[该图显示了用户与 AWS 云服务（例如 Amazon Braket 笔记本、S3 结果存储桶、Amazon Braket、托管模拟器）的互动，以及它们用于量子计算任务的结果 QPUs 。\]](http://docs.aws.amazon.com/zh_cn/braket/latest/developerguide/images/data-flow-3.png)


[使用Jupyter笔记本电脑，您可以从 Amazon Brake [t 控制台或使用 Amazon Braket](https://us-west-1.console.aws.amazon.com/console/home?region=us-west-1#) SDK 定义、提交和监控您的量子任务。](https://github.com/aws/amazon-braket-sdk-python)您可以直接在 SDK 中构建量子电路。但是，对于模拟哈密顿仿真器，您可以定义寄存器布局和控制字段 (1)。定义量子任务后，您可以选择一台设备来运行该任务，然后将其提交给 Amazon Braket API (2)。根据您选择的设备，对量子任务排队直到设备可用为止，同时将任务发送到 QPU 或模拟器实施 (3)。Amazon Braket 允许您访问各种[支持的量子设备](braket-devices.md) QPUs，包括按需模拟器、本地模拟器和嵌入式仿真器。

处理完您的量子任务后，Amazon Braket 会将结果返回到 Amazon S3 存储桶，数据存储在您的 AWS 账户 (4) 中。同时，SDK 会在后台轮询结果，并在量子任务完成时将其加载到 Jupyter Notebook 中。您还可以在 Amazon Braket 控制台的 Quantum Taskes 页面上或使用 Amazon Braket 的`GetQuantumTask`操作来查看和管理您的**量子任务**。API

 Amazon Braket 与 AWS Identity and Access Management (IAM) CloudWatch、 AWS CloudTrail 亚马逊和亚马逊集成， EventBridge 用于用户访问管理、监控和记录以及基于事件的处理 (5)。

## 第三方数据处理
<a name="braket-3rd-party-processing"></a>

提交给 QPU 设备的量子任务在位于第三方提供商运营的设施中的量子计算机上处理。要了解有关 Amazon Braket 安全性和第三方处理的更多信息，请参阅 [Amazon Braket 硬件提供商的安全性](third-party-security.md)。

# Amazon Braket 术语和概念
<a name="braket-terms"></a>

**提示**  
**通过以下方式学习量子计算的基础 AWS！**注册 [Amazon Braket 数字学习计划](https://skillbuilder.aws/learning-plan/EH35DWGU3R/amazon-braket--knowledge-badge-readiness-path-includes-labs)，完成一系列学习课程和数字评估后，即可获得自己的数字徽章。

Braket 中使用了以下概念和术语：

 **模拟哈密顿模拟**   
模拟哈密顿模拟（AHS）是一种独特的量子计算范式，用于实现多体系统瞬态量子动力学的直接模拟。在 AHS 中，用户直接指定一个时变哈密顿量，通过调整量子计算机，可以直接模拟该哈密顿量下的连续时间演变。AHS 设备通常是专用设备，而不是像基于门的设备这样的通用量子计算机。它们仅限于其可以模拟的一类哈密顿量。然而，由于这些哈密顿量是在设备上自然实现的，因此 AHS 不承担制定像电路那样的算法和执行门操作所需的开销。

  **Braket**   
我们以 [Braket 表示法](https://en.wikipedia.org/wiki/Bra%E2%80%93ket_notation)（量子力学中的标准表示法）命名了 Braket 服务。该表示法由保罗·狄拉克于 1939 年推出，用于描述量子系统的状态，也被称为狄拉克表示法。

  **Braket Direct**   
借助 Braket Direct，您可以保留对自己选择的不同量子设备的专门访问权限，与量子计算专家联系以获取工作负载指导，并尽早使用下一代功能，如可用性有限的新量子设备。

  **Braket 混合作业**   
Amazon Braket 有一项名为 Amazon Braket Hybrid Jobs 的功能，该功能可实现混合算法的完全托管执行。Braket 混合作业由三部分组成：  

1. 算法的定义，可作为脚本、Python 模块或 Docker 容器提供。

1. 基于 Amazon EC2 的*混合作业实例*，用于运行您的算法。默认为 ml.m5.xlarge 实例。

1. 用于运行作为算法一部分的*量子任务*的量子*设备*。单个混合作业通常包含许多量子任务的集合。

  **设备**   
在 Amazon Braket 中，设备是可以运行*量子任务*的后端。设备可以是 *QPU* 或*量子电路模拟器*。要了解更多信息，请参阅 [Amazon Braket 支持的设备](braket-devices.md)。

 **错误缓解**   
错误缓解包括运行多个物理电路并将它们的测量结果组合在一起以获得更好的结果。有关更多信息，请参阅[错误缓解技术](braket-error-mitigation.md)。

  **基于门的量子计算**   
在基于门的量子计算（QC）（也称为基于电路的 QC）中，计算被分解为基本运算（门）。某些门集是通用的，这意味着每次计算都可以表示为这些门的有限序列。门是*量子电路*的基块，类似于经典数字电路的逻辑门。

 **门拍摄限制**   
门拍摄限制是指每次拍摄的总门数（所有门类型的总和）和每项任务的门拍摄数量。从数学上讲，门拍摄限制可以表示为：  
`Gateshot limit = (Gate count per shot) * (Shot count per task)`

 **哈密顿量**   
物理系统的量子动力学由其哈密顿量决定，哈密顿量对有关系统各组成部分之间的相互作用和外生驱动力影响的所有信息进行编码。在经典机器上，N 量子比特系统的哈密顿量通常表示为复数的 2N x 2N 矩阵。通过在量子设备上运行模拟哈密顿模拟，可以避免这些指数级的资源需求。

  **脉冲**   
脉冲是传输到量子比特的瞬态物理信号。它由在帧中播放的波形来描述，该波形充当载波信号的支撑，并绑定到硬件通道或端口。客户可以通过提供调制高频正弦载波信号的模拟包络来设计自己的脉冲。该帧的独特特征是频率和相位，这些频率和相位通常被选为与量子比特的 \$10−⟩ 和 \$11−⟩ 能级之间的能量分离产生共振。因此，门被设置为具有预定形状和校准参数（如振幅、频率和持续时间）的脉冲。模板波形未涵盖的使用案例将通过自定义波形启用，自定义波形将通过提供由固定的物理周期时间分隔的值列表以单样本分辨率进行指定。

  **量子电路**   
量子电路是在基于门的量子计算机上定义计算的指令集。量子电路是一系列量子门，它们是 qubit 寄存器上的可逆变换，还有测量指令。

  **量子电路模拟器**   
量子电路模拟器是一种在经典计算机上运行并计算*量子电路*测量结果的计算机程序。对于一般电路，量子模拟的资源需求会随着要模拟的 qubits 的数量而呈指数级增长。Braket 提供对托管（通过 Braket 访问 API）和本地（Amazon Braket SDK 的一部分）量子电路模拟器的访问权限。

  **量子计算**   
量子计算机是一种使用量子力学现象（如叠加和纠缠）进行计算的物理设备。量子计算（QC）有不同的范式，如基于*门*的 QC。

 **量子处理单元（QPU）**   
QPU 是一种可以在量子任务上运行的物理量子计算设备。 QPUs 可以基于不同的 QC 范式，例如基于门的 QC。要了解更多信息，请参阅 [Amazon Braket 支持的设备](braket-devices.md)。

  **QPU 原生门**   
QPU 原生门可以直接映射到 QPU 控制系统的控制脉冲。无需进一步编译即可在 QPU 设备上运行原生门。*QPU 支持的门的子集*。您可以在 Amazon Braket 控制台的“**设备**”页面和 Braket SDK 中找到设备的原生门。

  ** QPU 支持的门**   
QPU 支持的门是 QPU 设备接受的门。这些门可能不会直接在 QPU 上运行，这意味着它们可能需要分解成原生门。您可以在 Amazon Braket 控制台的“**设备**”页面和 Amazon Braket SDK 上找到支持的设备门。

 **量子任务**   
在 Braket 中，量子任务是对*设备*的原子请求。对于*基于门的质量控制设备*，这包括量子电路（包括测量指令和 shots 的数量）和其他请求元数据。您可以通过 Amazon Braket SDK 或直接使用该 CreateQuantumTask API 操作来创建量子任务。创建量子任务后，它将排队直到请求的设备变为可用为止。您可以在 Amazon Braket 控制台的“**量子任务**”页面上或使用 GetQuantumTask 或 SearchQuantumTasks API 操作来查看您的量子任务。

  ** Qubit **   
量子计算机中的基本信息单位被称为 qubit（量子比特），就像经典计算中的位一样。qubit 是一个双能量子系统，可以通过不同的物理实现来实现，如超导电路或单个离子和原子。其他 qubit 类型基于光子、电子、核自旋或更奇特的量子系统。

  ** Queue depth **   
Queue depth 指排队等候特定设备的量子任务和混合作业的数量。可通过 Braket Software Development Kit (SDK) 或 Amazon Braket Management Console 访问设备的量子任务和混合作业队列数。  

1. *任务队列深度*指等待以正常优先级运行的量子任务总数。

1. *优先任务队列深度*是指等待通过 Amazon Braket Hybrid Jobs 运行的已提交量子任务的总数。混合作业启动后，这些任务优先于独立任务。

1. *混合作业队列深度*是指当前在设备上排队的混合作业总数。Quantum tasks 作为混合作业的一部分提交，具有优先级，汇总在 Priority Task Queue 中。

  ** Queue position **   
Queue position 指您的量子任务或混合作业在相应设备队列中的当前位置。它可以通过 Braket Software Development Kit (SDK) 或 Amazon Braket Management Console 获得，用于量子任务或混合作业。

  ** Shots **   
由于量子计算本质上是有一定的概率性的，因此任何电路都需要多次评估才能得到准确的结果。单个电路的执行和测量被称为镜头。电路的拍摄次数（重复执行）是根据所需的结果精度来选择的。

## AWS Amazon Braket 的术语和小贴士
<a name="braket-aws-terms"></a>

  **IAM 策略**   
IAM 策略是允许或拒绝对 AWS 服务 和资源的权限的文档。IAM 策略允许您自定义用户对资源的访问级别。例如，您可以允许用户访问您中的所有 Amazon S3 存储桶 AWS 账户，或者仅允许用户访问特定存储桶。  
+  **最佳实践：**授予权限时遵循*最低权限*的安全原则。通过遵循这一原则，您可以帮助防止用户或角色拥有的权限超过执行其量子任务所需的权限。例如，如果员工只需要访问特定存储桶，请在 IAM 策略中指定该存储桶，而不是向员工授予访问您 AWS 账户中所有存储桶的权限。

 **IAM 角色**   
IAM 角色是一种可以代入的身份，可以代入该身份来临时访问权限。您必须先对用户授予切换到您创建的 IAM 角色的权限，然后用户、应用程序或服务才能使用该角色。当有人担任 IAM 角色时，他们会放弃以前在先前角色下拥有的所有权限，并使用新角色的权限。  
+  **最佳实践：**IAM 角色非常适合需要临时而不是长期授予服务或资源访问权限的情况。

  **Amazon S3 存储桶**   
 *亚马逊简单存储服务 (Amazon S3) Simp AWS 服务 le Service 允许您将数据*作为*对象存储在存储桶中。*Amazon S3 存储桶提供无限的存储空间。Amazon S3 存储桶中的最大对象大小为 5 TB。您可以将任何类型的文件数据上传到 Amazon S3 存储桶，如图像、视频、文本文件、备份文件、网站媒体文件、存档文档以及您的 Braket 量子任务结果。  
+  **最佳实践：**您可以设置权限以控制对 S3 存储桶的访问权限。有关更多信息，请参阅 Amazon S3 文档中的[存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)。

# 成本跟踪和节约
<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)、[Hybrid Job](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  |  无更改  |  无更改  | 
|  任何  |  正在运行  |  无更改  |  无更改  | 
|  任何  |  正在取消  |  无更改  |  无更改  | 
|  正在取消  |  CANCELLED  |  按估计成本降低  |  没有变化  | 
|  任何  |  FAILED  |  按估计成本降低  |  无更改  | 
|  正在运行  |  COMPLETED  |  按估计成本降低  |   按估计费用增加（根据部分完成的任务作相应调整）   | 

### 边缘保护壳
<a name="spending-limit-edge-cases"></a>

 **问：在创建支出限额时，队列中已有的任务是否计入排队的支出？** 

 答：不是。 已创建、排队或其他正在进行的任务不计入新创建的支出限额的排队支出。

 **问：通过更新支出限额来降低支出限额是否会导致已创建、已排队或其他正在进行的量子任务提前终止？** 

 答：不是。

 **问：达到支出限制的结束时间是否会导致已创建、已排队或其他正在进行的量子任务提前终止？** 

 答：不是。 无论支出限制状态如何，都允许完成已创建、已排队和其他正在进行的任务。

 **问：缺乏支出限额与零美元支出限额有何不同？** 

 答：没有支出限制，可以不受限制地创建量子任务。零美元的支出限制会阻止所有量子任务。

 **问：过去或未来（future）的支出上限为零会阻碍所有量子任务的创建？** 

 答：能。

 **问：在创建支出限额时，已在队列中的任务完成后，估计的费用是否会计入当前支出？** 

 答：不是。 只有在支出限额处于活动状态时提交的任务才会计入累计支出。

## 近乎实时的成本跟踪
<a name="real-time-cost-tracking"></a>

Braket SDK 为您提供了向量子工作负载中添加近乎实时的成本跟踪的选项。我们的每个示例笔记本都包含成本跟踪代码，可为您提供有关 Braket 量子处理单元 (QPUs) 和按需模拟器的最大成本估算。最高成本估算值将以美元显示，不包括任何积分或折扣。

**注意**  
显示的费用是根据您的 Amazon Braket 模拟器和量子处理单元（QPU）任务使用情况估算的费用。显示的预计费用可能与您的实际费用有所不同。预计费用不考虑任何折扣或积分，您可能会因使用其他服务 [Amazon Elastic Compute Cloud（Amazon EC2）] 等其他服务而收取的额外费用。

 **成本跟踪 SV1** 

为了演示如何使用成本跟踪功能，我们将构建一个 Bell State 电路并在我们的 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})
```

当您运行 Notebook 时，您可以期待 Bell State 模拟的以下输出。跟踪器功能将显示发送的镜头数量、已完成的量子任务、执行时长、计费的执行持续时间以及以美元为单位的最大成本。每次模拟的执行时间可能会有所不同。

```
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 美元。在我们的代码中运行一次电路迭代的成本为 0.30 美元。我们已将逻辑设置为重复迭代，直到总成本超过 1 美元；因此，代码片段将运行三次，直到下一次迭代超过 1 美元为止。通常，程序会继续迭代，直到达到所需的最大成本，在本例中为三次迭代。

```
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)”文档页面上查看设备及其相关区域的列表。

# Amazon Braket 的 API 参考和存储库
<a name="braket-references"></a>

**提示**  
**通过以下方式学习量子计算的基础 AWS！**注册 [Amazon Braket 数字学习计划](https://skillbuilder.aws/learning-plan/EH35DWGU3R/amazon-braket--knowledge-badge-readiness-path-includes-labs)，完成一系列学习课程和数字评估后，即可获得自己的数字徽章。

Amazon Braket 提供了 APIs SDKs、和一个命令行界面，您可以使用它来创建和管理笔记本实例以及训练和部署模型。
+  [Amazon Braket Python SDK（推荐）](https://amazon-braket-sdk-python.readthedocs.io/en/latest/#) 
+  [Amazon Braket API 参考](https://docs.aws.amazon.com/braket/latest/APIReference/Welcome.html) 
+  [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/reference/braket/index.html) 
+  [适用于 .NET 的 AWS SDK](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Braket/NBraket.html) 
+  [适用于 C\$1\$1 的 AWS SDK](https://sdk.amazonaws.com/cpp/api/LATEST/namespace_aws_1_1_braket.html) 
+  [适用于 Go 的 AWS SDKAPI Reference](https://docs.aws.amazon.com/sdk-for-go/api/service/braket/) 
+  [适用于 Java 的 AWS SDK](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/braket/package-summary.html) 
+  [适用于 JavaScript 的 AWS SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Braket.html) 
+  [适用于 PHP 的 AWS SDK](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Braket.BraketClient.html) 
+  [AWS SDK for Python (Boto)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/braket.html) 
+  [适用于 Ruby 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Braket.html) 

您还可以从 Amazon Braket 教程 GitHub 存储库中获取代码示例。
+  [支架教程 GitHub](https://github.com/aws/amazon-braket-examples) 

## 核心存储库
<a name="braket-repos"></a>

下面显示了包含用于 Braket 的密钥包的核心存储库列表：
+  [Braket Python SDK](https://github.com/aws/amazon-braket-sdk-python)：使用 Braket Python SDK 在 Python 编程语言的 Jupyter Notebook 上设置您的代码。设置好 Jupyter Notebook 后，您可以在 Braket 设备和模拟器上运行代码
+  [Braket 架构](https://github.com/aws/amazon-braket-schemas-python)：Braket SDK 和 Braket 服务之间的合约。
+  [Braket 默认模拟器](https://github.com/aws/amazon-braket-default-simulator-python)：我们所有用于 Braket 的本地量子模拟器（状态向量和密度矩阵）。

## 插件
<a name="braket-plugins"></a>

然后是各种插件以及各种设备和编程工具。其中包括 Braket 支持的插件以及第三方支持的插件，如下所示。

 **Amazon Braket 支持的**：
+  [Amazon Braket 算法库](https://github.com/aws-samples/amazon-braket-algorithm-library)：用 Python 编写的预建量子算法目录。按原样运行它们，或者使用它们作为起点来构建更复杂的算法。
+  [Braket-PennyLane 插件](https://github.com/aws/amazon-braket-pennylane-plugin-python)-用PennyLane作 Braket 上的 QML 框架。

 **第三方（Braket 团队监控并做出贡献）**：
+  [Qiskit-Braket 提供商](https://github.com/qiskit-community/qiskit-braket-provider)：使用 Qiskit SDK 访问 Braket 资源。
+  [Braket-Julia SDK](https://github.com/awslabs/Braket.jl)：（实验性）Braket SDK 的 Julia 原生版本

# Amazon Braket 支持的区域和设备
<a name="braket-devices"></a>

**提示**  
**通过以下方式学习量子计算的基础 AWS！**注册 [Amazon Braket 数字学习计划](https://skillbuilder.aws/learning-plan/EH35DWGU3R/amazon-braket--knowledge-badge-readiness-path-includes-labs)，完成一系列学习课程和数字评估后，即可获得自己的数字徽章。

在 Amazon Braket 中，设备代表量子处理单元 (QPU) 或模拟器，你可以调用它来运行量子任务。Amazon Braket 允许从AQT、、IonQIQM、QuEra和访问 QPU 设备。Rigetti此外，还 AWS 提供对按需、本地和嵌入式模拟器的访问。有关嵌入式模拟器的更多信息，请参阅[关于嵌入式模拟](embedded-simulator.md)器。

有关支持的量子硬件提供商的信息，请参阅[向提交量子任务 QPUs](braket-submit-tasks.md)。有关可用模拟器的信息，请参阅[向模拟器提交量子任务](braket-submit-tasks-simulators.md)。下表列出了可用设备和模拟器。


| Provider | 设备名称 | 范式 | Type | 设备 ARN | Region | 
| --- | --- | --- | --- | --- | --- | 
|   [AQT](braket-submit-tasks.md#braket-qpu-partner-aqt)   |   IBEX-Q1   |  基于门  |  QPU  |  arn: aws: braket: eu-north-1::-Q1 device/qpu/aqt/Ibex  |  eu-north-1  | 
|   [IonQ](braket-submit-tasks.md#braket-qpu-partner-ionq)   |   Forte-1   |  基于门  |  QPU  |  arn: aws: braket: us-east-1:: -1 device/qpu/ionq/Forte  |  us-east-1  | 
|   [IonQ](braket-submit-tasks.md#braket-qpu-partner-ionq)   |   Forte-Enterprise-1   |  基于门  |  QPU  |  arn: aws: braket: us-east-1::-Enterprise-1 device/qpu/ionq/Forte  |  us-east-1  | 
|   [IQM](braket-submit-tasks.md#braket-qpu-partner-iqm)   |   Garnet   |  基于门  |  QPU  |  arn: aws: braket: eu-north-1:: device/qpu/iqm/Garnet  |  eu-north-1  | 
|   [IQM](braket-submit-tasks.md#braket-qpu-partner-iqm)   |   Emerald   |  基于门  |  QPU  |  arn: aws: braket: eu-north-1:: device/qpu/iqm/Emerald  |  eu-north-1  | 
|   [QuEra](braket-submit-tasks.md#braket-qpu-partner-quera)   |   Aquila   |  模拟哈密顿模拟  |  QPU  |  arn: aws: braket: us-east-1:: device/qpu/quera/Aquila  |  us-east-1  | 
|   [Rigetti](braket-submit-tasks.md#braket-qpu-partner-rigetti)   |   Ankaa-3   |  基于门  |  QPU  |  arn: aws: braket: us-west-1:: -3 device/qpu/rigetti/Ankaa  |  us-west-1  | 
|   AWS   |   [braket\$1sv](braket-submit-tasks-simulators.md#braket-simulator-sv)   |  基于门  |  本地模拟器  |  不适用（Braket SDK 中的本地模拟器）  |  不适用  | 
|   AWS   |   [braket\$1dm](braket-submit-tasks-simulators.md#braket-simulator-dm)   |  基于门  |  本地模拟器  |  不适用（Braket SDK 中的本地模拟器）  |  不适用  | 
|   AWS   |   [braket\$1ahs](braket-submit-tasks-simulators.md#braket-simulator-ahs-local)   |  模拟哈密顿模拟  |  本地模拟器  |  不适用（Braket SDK 中的本地模拟器）  |  不适用  | 
|   AWS   |   [SV1](braket-submit-tasks-simulators.md#braket-simulator-sv1)   |  基于门  |  按需模拟器  |  arn: aws: braket:: 1 device/quantum-simulator/amazon/sv  |  us-east-1、us-west-1、us-west-1、us-west-2  | 
|   AWS   |   [DM1](braket-submit-tasks-simulators.md#braket-simulator-dm1)   |  基于门  |  按需模拟器  |  arn: aws: braket:: 1 device/quantum-simulator/amazon/dm  |  us-east-1、us-west-1、us-west-1、us-west-2  | 
|   AWS   |   [TN1](braket-submit-tasks-simulators.md#braket-simulator-tn1)   |  基于门  |  按需模拟器  |  arn: aws: braket:: 1 device/quantum-simulator/amazon/tn  |  us-east-1、us-west-2 和 eu-west-2  | 

**注意**  
设备区 ARNs 分大小写。例如，在使用AQT IBEX-Q1设备时，请验证设备 ARN 是否包含。'Ibex-Q1'

要查看有关可用于 Amazon Brake QPUs t 的更多详细信息，请参阅 Amazon Braket Quant [um](https://aws.amazon.com/braket/quantum-computers/) 计算机。

 **设备属性** 

对于所有设备，您可以在 Amazon Braket 控制台的“**设备**”选项卡上或通过 `GetDevice` API 找到更多设备属性，如设备拓扑、校准数据和原生门设置。使用模拟器构造电路时，Amazon Braket 要求您使用连续的量子比特或索引。使用 SDK 时，以下代码示例显示了如何访问每台可用设备和模拟器的设备属性。

```
from braket.aws import AwsDevice
from braket.devices import LocalSimulator

device = AwsDevice('arn:aws:braket:::device/quantum-simulator/amazon/sv1')              # SV1
# device = LocalSimulator()                                                             # Local State Vector Simulator
# device = LocalSimulator("default")                                                    # Local State Vector Simulator
# device = LocalSimulator(backend="default")                                            # Local State Vector Simulator
# device = LocalSimulator(backend="braket_sv")                                          # Local State Vector Simulator
# device = LocalSimulator(backend="braket_dm")                                          # Local Density Matrix Simulator
# device = LocalSimulator(backend="braket_ahs")                                         # Local Analog Hamiltonian Simulation
# device = AwsDevice('arn:aws:braket:::device/quantum-simulator/amazon/tn1')            # TN1
# device = AwsDevice('arn:aws:braket:::device/quantum-simulator/amazon/dm1')            # DM1
# device = AwsDevice('arn:aws:braket:eu-north-1::device/qpu/aqt/Ibex-Q1')               # AQT IBEX-Q1
# device = AwsDevice('arn:aws:braket:us-east-1::device/qpu/ionq/Forte-1')               # IonQ Forte-1
# device = AwsDevice('arn:aws:braket:us-east-1::device/qpu/ionq/Forte-Enterprise-1')    # IonQ Forte-Enterprise-1
# device = AwsDevice('arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet')                # IQM Garnet
# device = AwsDevice('arn:aws:braket:eu-north-1::device/qpu/iqm/Emerald')               # IQM Emerald
# device = AwsDevice('arn:aws:braket:us-east-1::device/qpu/quera/Aquila')               # QuEra Aquila
# device = AwsDevice('arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3')            # Rigetti Ankaa-3

# Get device properties
device.properties
```

## Amazon Braket 的区域和端点数
<a name="braket-regions"></a>

有关区域和端点的完整列表，请参阅[AWS 一般参考。](https://docs.aws.amazon.com/general/latest/gr/braket.html)

在 QPU 设备上运行的量子任务可以在该设备所在区域的 Amazon Braket 控制台中查看。使用 Amazon Braket SDK 时，无论您在哪个区域工作，都可以向任何 QPU 设备提交量子任务。SDK 会自动为指定的 QPU 创建与该区域的会话。

Amazon Braket 有以下几种可供选择： AWS 区域


| 区域名称 | Region | Braket 端点 | 
| --- | --- | --- | 
|  美国东部（弗吉尼亚州北部）  |  us-east-1  |  braket.us-east-1.amazonaws.com（IPv4 仅限） braket.us-east-1.api.aws（双堆栈）  | 
|  美国西部（北加利福尼亚）  |  us-west-1  |  braket.us-west-1.amazonaws.com（IPv4 仅限） braket.us-west-1.api.aws（双堆栈）  | 
|  us-west-2（俄勒冈）  |  us-west-2  |  braket.us-west-2.amazonaws.com（IPv4 仅限） braket.us-west-2.api.aws（双堆栈）  | 
|  eu-north-1（斯德哥尔摩）  |  eu-north-1  |  braket.eu-north-1.amazonaws.com（IPv4 仅限） braket.eu-north-1.api.aws（双堆栈）  | 
|  eu-west-2（伦敦）  |  eu-west-2  |  braket.eu-west-2.amazonaws.com（IPv4 仅限） braket.eu-west-2.api.aws（双堆栈）  | 

**注意**  
Amazon Braket 软件开发工具包不支持仅限 IPv6网络的网络。