PennyLane 与 Amazon Braket 一起使用 - Amazon Braket

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

PennyLane 与 Amazon Braket 一起使用

混合算法是同时包含经典指令和量子指令的算法。经典指令在经典硬件( EC2 实例或笔记本电脑)上运行,量子指令要么在模拟器上运行,要么在量子计算机上运行。我们建议您使用混合作业功能运行混合算法。有关更多信息,请参阅何时使用 Amazon Braket 任务

Amazon Braket 使您能够在 Amazon Braket 插件的帮助下,或者使用 Amazon PennyLane Braket Python SDK 和示例笔记本存储库来设置和运行混合量子算法。基于软件开发工具包的 Amazon Braket 示例笔记本使您无需插件即可设置和运行某些混合算法。 PennyLane 但是,我们 PennyLane 之所以推荐,是因为它提供了更丰富的体验。

关于混合量子算法

混合量子算法对当今的行业很重要,因为当代量子计算设备通常会产生噪声,从而产生错误。计算中添加的每个量子门都会增加增加噪声的机会;因此,长期运行的算法可能会被噪声所淹没,从而导致计算错误。

诸如肖尔(量子相位估计示例)或格罗弗(格罗弗的例子)之类的纯量子算法需要数千或数百万次运算。出于这个原因,它们对于现有的量子器件来说可能是不切实际的,这些器件通常被称为噪声中级量子(NISQ)器件。

在混合量子算法中,量子处理单元 (QPUs) 充当经典算法的协处理器 CPUs,专门用于加快经典算法中的某些计算。电路执行时间大大缩短,触手可及。

带有 Amazon Braket PennyLane

Amazon Braket 为PennyLane围绕量子微分编程概念构建的开源软件框架提供支持。你可以使用这个框架来训练量子电路,就像训练神经网络来寻找量子化学、量子机器学习和优化中计算问题的解决方案一样。

该 PennyLane 库为熟悉的机器学习工具(包括 PyTorch 和)提供了接口 TensorFlow,使量子电路训练变得快速而直观。

  • PennyLane 库 —— PennyLane 已预先安装在 Amazon Braket 笔记本电脑中。要从中访问 Amazon Braket 设备 PennyLane,请打开笔记本并使用以下命令导入 PennyLane 库。

import pennylane as qml

教程笔记本可帮助您快速入门。或者,您可以通过自己选择的 IDE PennyLane 在 Amazon Braket 上使用。

  • AmazonBraket PennyLane 插件 — 要使用你自己的 IDE,你可以手动安装 Amazon Braket PennyLane 插件。该插件 PennyLane 与 Amazon Braket Python SDK 连接,因此你可以在 Amazon Braket 设备 PennyLane 上运行电路。要安装该 PennyLane 插件,请使用以下命令。

pip install amazon-braket-pennylane-plugin

以下示例演示了如何在中 PennyLane设置对 Amazon Braket 设备的访问权限:

# to use SV1 import pennylane as qml sv1 = qml.device("braket.aws.qubit", device_arn="arn:aws:braket:::device/quantum-simulator/amazon/sv1", wires=2) # to run a circuit: @qml.qnode(sv1) def circuit(x): qml.RZ(x, wires=0) qml.CNOT(wires=[0,1]) qml.RY(x, wires=1) return qml.expval(qml.PauliZ(1)) result = circuit(0.543) #To use the local sim: local = qml.device("braket.local.qubit", wires=2)

有关教程示例和更多信息 PennyLane,请参阅 Amazon Braket 示例存储库

AmazonBraket PennyLane 插件使您只需一行代码即可在 Amazon PennyLane Braket QPU 和嵌入式仿真器设备之间切换。它提供了两个 Amazon Braket 量子器件可供使用 PennyLane:

  • braket.aws.qubit用于与 Amazon Braket 服务的量子设备一起运行,包括 QPUs 和模拟器

  • braket.local.qubit用于使用 Amazon Braket SDK 的本地模拟器运行

AmazonBraket PennyLane 插件是开源的。你可以从PennyLane 插件 GitHub 存储库中安装它。

有关的更多信息 PennyLane,请参阅PennyLane 网站上的文档。

Amazon Braket 中的混合算法示例笔记本

Amazon Braket 确实提供了各种不依赖 PennyLane 插件来运行混合算法的示例笔记本。你可以开始使用这些说明变分方法Amazon Braket 混合示例笔记本中的任何一个,例如量子近似优化算法 (QAOA) 或变分量子特征求解器 (VQE)。

亚马逊 Braket 示例笔记本依赖于 Amazon B raket Python SDK。SDK 提供了一个通过 Amazon Braket 与量子计算硬件设备进行交互的框架。它是一个开源库,旨在帮助您完成混合工作流程的量子部分。

您可以使用我们的示例笔记本进一步探索 Amazon Braket。

带有嵌入式 PennyLane 仿真器的混合算法

Amazon Braket Hybrid Jobs 现在配备了基于 CPU 和 GPU 的高性能嵌入式模拟器。PennyLane该系列嵌入式模拟器可以直接嵌入到您的混合作业容器中,包括快速状态向量lightning.qubit模拟器、使用NVIDIA的cu Quantum库加速的lightning.gpu仿真器等。这些嵌入式仿真器非常适合变分算法,例如量子机器学习,这些算法可以从高级方法(例如伴随微分法)中受益您可以在一个或多个 CPU 或 GPU 实例上运行这些嵌入式模拟器。

借助 Hybrid Jobs,您现在可以使用经典协处理器和 QPU 的组合、Amazon Braket 按需仿真器(例如)或直接使用中的嵌入式仿真器来运行变分算法代码。SV1 PennyLane

嵌入式模拟器已经在 Hybrid Jobs 容器中可用,你只需要用装饰@hybrid_job器装饰你的主 Python 函数即可。要使用 PennyLane lightning.gpu模拟器,您还需要在中指定 GPU 实例,InstanceConfig如以下代码片段所示:

import pennylane as qml from braket.jobs import hybrid_job from braket.jobs.config import InstanceConfig @hybrid_job(device="local:pennylane/lightning.gpu", instance_config=InstanceConfig(instanceType="ml.p3.8xlarge")) def function(wires): dev = qml.device("lightning.gpu", wires=wires) ...

要开始使用带有 Hybrid Jobs 的 PennyLane 嵌入式模拟器,请参阅示例笔记本

PennyLane 使用 Amazon Braket 模拟器开启伴随渐变

借助 Amazon Braket 的PennyLane插件,您可以在本地状态向量模拟器上运行时使用伴随微分法计算梯度,或者。 SV1

注意:要使用伴随微分法,必须在 “” 和 “不是diff_method='adjoint'diff_method='device'qnode指定。请参阅以下示例。

device_arn = "arn:aws:braket:::device/quantum-simulator/amazon/sv1" dev = qml.device("braket.aws.qubit", wires=wires, shots=0, device_arn=device_arn) @qml.qnode(dev, diff_method="device") def cost_function(params): circuit(params) return qml.expval(cost_h) gradient = qml.grad(circuit) initial_gradient = gradient(params0)
注意

目前,PennyLane将计算 QAOA Hamiltonians 的分组指数,并使用它们将哈密顿函数拆分为多个期望值。如果要在从中运行 QAOA 时使用 SV1伴随微分能力PennyLane,则需要通过移除分组指数来重建成本哈密顿模型,如下所示:cost_h, mixer_h = qml.qaoa.max_clique(g, constrained=False) cost_h = qml.Hamiltonian(cost_h.coeffs, cost_h.ops)