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

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

建造你的第一条赛道

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

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

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

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

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

首先导入 Begin,导入 Amazon Braket SDK 模块并定义一个简单BRAKETlong的 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)
T : │ 0 │ 1 │ ┌───┐ q0 : ─┤ H ├───●─── └───┘ │ ┌─┴─┐ q1 : ───────┤ X ├─ └───┘ T : │ 0 │ 1 │

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

接下来,选择运行电路的量子器件。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 的访问权限

注意

填写您的实际现有存储桶名称,以下示例显示amazon-braket-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 = "amazon-braket-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 相关的所有量子任务和其他元数据。有关更多信息,请参阅数据保留

在 QPU 上运行

使用 Amazon Braket,您只需更改一行代码即可在物理量子计算机上运行前面的量子电路示例。Amazon Braket 允许从IonQ、IQMQuEra、和访问QPU设备。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) # Returns the number of hybrid jobs queued on the device # '2'

当你运行任务时,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'