建造你的第一条赛道 - Amazon Braket

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

建造你的第一条赛道

启动笔记本实例后,选择您刚刚创建的笔记本,使用标准 Jupyter 界面打开该实例。

Notebooks 界面显示了名为状态 InService 及其状态 amazon-braket-test的现有笔记本实例URL。

亚马逊 Braket 笔记本实例已预先安装了 Amazon Braket 及其所有依赖SDK项。首先创建一个带有conda_braket内核的新笔记本。

笔记本电脑、控制台和其他工具(例如终端、文本文件、Markdown 文件、Python 文件)的启动器界面,突出显示了 conda_braket Python 环境。

你可以从一个简单的 “你好,世界!” 开始 示例。首先,构造一个准备贝尔状态的电路,然后在不同的设备上运行该电路以获得结果。

首先导入 Amazon Braket SDK 模块并定义一个简单的 Bell State 电路。

import boto3 from braket.aws import AwsDevice from braket.devices import LocalSimulator from braket.circuits import Circuit # create the circuit bell = Circuit().h(0).cnot(0, 1)

你可以用这个命令对电路进行可视化:

print(bell)

在本地模拟器上运行你的电路

接下来,选择运行电路的量子器件。Amazon Braket SDK 配有本地模拟器,用于快速制作原型和测试。对于较小的电路,我们建议使用本地仿真器,最大可达 25 qubits (取决于您的本地硬件)。

以下是实例化本地模拟器的方法:

# instantiate the local simulator local_sim = LocalSimulator()

然后运行电路:

# run the circuit result = local_sim.run(bell, shots=1000).result() counts = result.measurement_counts print(counts)

你应该会看到这样的结果:

Counter({'11': 503, '00': 497})

你准备的具体贝尔状态是 |00> 和 |11> 的相等叠加,你会发现一个大致相等的状态(最多 shot 正如预期的那样,测量结果为00和11的噪声)分布。

在按需模拟器上运行您的赛道

Amazon Braket 还提供按需提供的高性能模拟器,SV1,用于运行更大的电路。SV1 是一款按需状态矢量仿真器,可仿真多达 34 的量子电路 qubits。 你可以找到更多的信息 SV1 在 “支持的设备” 部分和 AWS 控制台中。在上运行量子任务时 SV1 (然后继续 TN1 或任何QPU),量子任务的结果存储在您账户的 S3 存储桶中。如果您未指定存储桶,Braket SDK 会amazon-braket-{region}-{accountID}为您创建一个默认存储桶。要了解更多信息,请参阅管理对 Amazon Braket 的访问权限

注意

填写您的实际现有存储桶名称,以下示例显示amzn-s3-demo-bucket为您的存储桶名称。的存储桶名称 Amazon Braket 始终amazon-braket-以您添加的其他识别字符开头。如果您需要有关如何设置 S3 存储桶的信息,请参阅 Amazon S3 入门

# get the account ID aws_account_id = boto3.client("sts").get_caller_identity()["Account"] # the name of the bucket my_bucket = "amzn-s3-demo-bucket" # the name of the folder in the bucket my_prefix = "simulation-output" s3_folder = (my_bucket, my_prefix)

要在上面运行电路 SV1,您必须提供先前在.run()调用中作为位置参数选择的 S3 存储桶的位置。

# choose the cloud-based on-demand simulator to run your circuit device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1") # run the circuit task = device.run(bell, s3_folder, shots=100) # display the results print(task.result().measurement_counts)

Amazon Braket 控制台提供有关您的量子任务的更多信息。导航到控制台中的 Quantu m Tasks 选项卡,你的量子任务应该位于列表的顶部。或者,您可以使用唯一的量子任务 ID 或其他条件搜索您的量子任务。

注意

90 天后,Amazon Braket 会自动删除与您的量子任务IDs相关的所有量子任务和其他元数据。有关更多信息,请参阅数据保留

在 a 上跑步 QPU

使用 Amazon Braket,您只需更改一行代码即可在物理量子计算机上运行前面的量子电路示例。亚马逊 Braket 提供访问权限 QPU 设备来自 IonQ, IQM, QuEra,以及 Rigetti。 您可以在 “支持的设备” 部分和 AWS 控制台的 “设备” 选项卡下找到有关不同设备和可用性窗口的信息。以下示例说明如何实例化 IQM 设备。

# choose the IQM hardware to run your circuit device = AwsDevice("arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet")

或者选择一个 IonQ 带有以下代码的设备:

# choose the Ionq device to run your circuit device = AwsDevice("arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1")

选择设备后,在运行工作负载之前,您可以使用以下代码查询设备队列深度,以确定量子任务或混合任务的数量。此外,客户可以在设备页面上查看设备特定的队列深度 Amazon Braket Management Console.

# Print your queue depth print(device.queue_depth().quantum_tasks) # returns the number of quantum tasks queued on the device {<QueueType.NORMAL: 'Normal'>: '0', <QueueType.PRIORITY: 'Priority'>: '0'} print(device.queue_depth().jobs) '2' # returns the number of hybrid jobs queued on the device

当您运行任务时,Amazon Braket 会SDK轮询结果(默认超时时间为 5 天)。您可以通过修改.run()命令中的poll_timeout_seconds参数来更改此默认值,如以下示例所示。请记住,如果您的轮询超时时间太短,则可能无法在轮询时间内返回结果,例如QPU不可用且返回本地超时错误时。您可以通过调用task.result()函数重新开始轮询。

# define quantum task with 1 day polling timeout task = device.run(bell, s3_folder, poll_timeout_seconds=24*60*60) print(task.result().measurement_counts)

此外,提交量子任务或混合任务后,您可以调用该queue_position()函数来检查队列位置。

print(task.queue_position().queue_position) # Return the number of quantum tasks queued ahead of you '2'