本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
成本跟踪和节约
提示
通过以下方式学习量子计算的基础 AWS!注册 Amazon Braket 数字学习计划
借助 Amazon Braket,您可以按需访问量子计算资源,无需预先承诺。您仅需按实际用量付费。要了解有关定价的更多信息,请访问定价页面
为 Amazon Braket 设置支出限额 QPUs
Amazon Braket 支出限额为量子处理单元提供了可选的每台设备的成本控制 ()。QPUs
支出限制的运作方式:Amazon Braket 会跟踪您的累积支出,并根据您配置的限额验证每个任务创建请求。如果某项任务的估计费用超过您的剩余支出上限,Amazon Braket 会立即拒绝该任务,并显示验证错误。您可以选择为支出限额配置时间段。通过配置时间段,您可以确保只能在该指定时间段内提交任务。在时间段之外提交的任务将被拒绝。
可选设计:除非您明确启用控件,否则现有工作流程将不受影响。您可以通过删除支出限额来取消所有限制。
注意
支出限制仅适用于按需和混合作业 QPU 任务。它们不包括模拟器、托管笔记本电脑、Hybrid Job EC2 实例成本和 Braket Direct 预留。要全面管理所有 AWS 服务的成本,请继续使用AWS Budgets
支出限制措施清单
- 搜寻
-
使用以下 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,则返回错误的结果。
有关如何使用支出限额的更多示例,请参阅示例笔记本
任务验证的工作原理
当 AWS 账户发送原本有效的CreateQuantumTask请求时,它会受到以下门控行为的约束。注意:剩余预算是支出限额与排队和当前支出之和之间的差额。(参见下一节)
-
案例 1:任务设备没有支出限制:任务已创建。
-
案例 2:目标设备有支出限制,并且当前时间在支出限制的时间段内:
-
如果任务的估计成本低于或等于剩余预算: CreateQuantumTask 成功,则任务即被创建。
-
如果预估成本大于剩余预算:
CreateQuantumTask失败,并且不创建任何任务。
-
-
案例 3:目标设备有支出限制,且当前时间超出支出限制的时间段:
CreateQuantumTask失败,且未创建任何任务。
剩余预算是如何计算的
剩余预算是支出限额与当前支出和排队支出之和之间的差额。
当为具有支出限制的设备创建任务时,排队的支出将按任务的估计成本增加。下表的第一行列出了此事件。下表显示了排队的支出和当前支出的变化,具体取决于任务的进度。
|
旧的量子任务状态 |
新的量子任务状态 |
更改为排队支出 |
更改为当前支出 |
|
- |
CREATED |
按估计成本增加 |
无更改 |
|
CREATED |
QUEUED |
无更改 |
无更改 |
|
任何 |
正在运行 |
无更改 |
无更改 |
|
任何 |
正在取消 |
无更改 |
无更改 |
|
正在取消 |
CANCELLED |
按估计成本降低 |
没有变化 |
|
任何 |
FAILED |
按估计成本降低 |
无更改 |
|
正在运行 |
COMPLETED |
按估计成本降低 |
按估计费用增加(根据部分完成的任务相应调整) |
边缘保护壳
问:在创建支出限额时,队列中已有的任务是否计入排队的支出?
答:不是。 已创建、排队或其他正在进行的任务不计入新创建的支出限额的排队支出。
问:通过更新支出限额来降低支出限额是否会导致已创建、已排队或其他正在进行的量子任务提前终止?
答:不是。
问:达到支出限制的结束时间是否会导致已创建、已排队或其他正在进行的量子任务提前终止?
答:不是。 无论支出限制状态如何,都允许完成已创建、已排队和其他正在进行的任务。
问:缺乏支出限额与零美元支出限额有何不同?
答:没有支出限制,可以不受限制地创建量子任务。零美元的支出限制会阻止所有量子任务。
问:过去或将来的支出限制为零会阻碍所有量子任务的创建?
答:能。
问:在创建支出限额时,已在队列中的任务完成后,估计的费用是否会计入当前支出?
答:不是。 只有在支出限额处于活动状态时提交的任务才会计入累计支出。
近乎实时的成本跟踪
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 模拟过程中,如果您的排练已完成,但收缩步骤失败,则您的排练费用将不会显示在成本跟踪器中。
节省成本的最佳实践
请考虑以下使用 Amazon Braket 的最佳实践。节省时间,最大限度地降低成本,并避免常见错误。
使用模拟器进行验证
-
在 QPU 上运行模拟器之前,请使用模拟器验证电路,这样您就可以微调电路,而不会因使用 QPU 而产生费用。
-
尽管在模拟器上运行电路的结果可能与在 QPU 上运行电路的结果不同,但您可以使用模拟器识别编码错误或配置问题。
限制用户访问某些设备
-
您可以设置限制,防止未经授权的用户在某些设备上提交量子任务。限制访问的推荐方法是使用 AWS IAM。有关如何操作的更多信息,请参阅限制访问。
-
我们建议您不要使用管理员账户来授予或限制用户访问 Amazon Braket 设备。
设置账单警报
-
您可以设置账单警报,以便在账单达到预设限额时发出通知。设置闹钟的推荐方法是通过 AWS Budgets。您可以设置自定义预算,并在费用或使用量可能超过预算金额时收到提醒。有关信息,请访问 AWS Budgets
。
使用低拍摄计数测试 TN1 量子任务
-
模拟器的成本低于 QPUs,但是如果量子任务以高射击次数运行,则某些模拟器可能会很昂贵。我们建议您使用低 shot 计数来测试您的 TN1 任务。Shot 计数不影响 SV1 和本地模拟器任务的成本。
检查所有区域的量子任务
-
控制台仅显示您当前的量子任务 AWS 区域。在查找已提交的计费量子任务时,请务必查看所有区域。
-
您可以在“受支持的设备”文档页面上查看设备及其相关区域的列表。