

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

# PennyLane 与 Amazon Braket 一起使用
<a name="hybrid"></a>

混合算法是同时包含经典指令和量子指令的算法。经典指令在经典硬件（EC2 实例或 Notebook）上运行，量子指令要么在模拟器上运行，要么在量子计算机上运行。我们建议您使用混合作业功能运行混合算法。有关更多信息，请参阅[何时使用 Amazon Braket 任务](braket-jobs.md#braket-jobs-use)。

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

 **关于混合量子算法** 

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

诸如肖尔的[（量子相位估计示例）](https://github.com/amazon-braket/amazon-braket-examples/tree/main/examples/advanced_circuits_algorithms/Quantum_Phase_Estimation)或[格罗弗的（格罗弗的例子）](https://github.com/aws/amazon-braket-examples/tree/main/examples/advanced_circuits_algorithms/Grover)之类的纯量子算法需要数千或数百万次运算。出于这个原因，它们对于现有的量子设备来说可能不切实际，这些设备被称为*噪声中级量子*（NISQ）设备。

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

**Topics**
+ [带有 Amazon Braket PennyLane](#pennylane-option)
+ [Amazon Braket 中的混合算法示例 Notebook](#braket-hybrid-workflow)
+ [带有嵌入式 PennyLane 仿真器的混合算法](#hybrid-alorithms-pennylane)
+ [PennyLane 使用 Amazon Braket 模拟器开启伴随渐变](#adjoint-gradient-pennylane)
+ [使用混合作业和 PennyLane 运行 QAOA 算法](braket-jobs-run-qaoa-algorithm.md)
+ [使用 PennyLane 嵌入式仿真器运行混合工作负载](pennylane-embedded-simulators.md)

## 带有 Amazon Braket PennyLane
<a name="pennylane-option"></a>

Amazon Braket 为[PennyLane](https://pennylane.ai)围绕*量子微分*编程概念构建的开源软件框架提供支持。您可以使用该框架来训练量子电路，就像训练神经网络来寻找量子化学、量子机器学习和优化中的计算问题的解决方案一样。

该 PennyLane 库为熟悉的机器学习工具（包括 PyTorch 和）提供了接口 TensorFlow，使量子电路训练变得快速而直观。
+  ** PennyLane 库** —— PennyLane 已预先安装在 Amazon Braket 笔记本电脑中。要从中访问 Amazon Braket 设备 PennyLane，请打开笔记本并使用以下命令导入 PennyLane 库。

```
import pennylane as qml
```

教程 Notebook 可帮助您快速入门。或者，您可以通过自己选择的 IDE PennyLane 在 Amazon Braket 上使用。
+  **AmazonBraket PennyLane 插件** — 要使用你自己的 IDE，你可以手动安装 Amazon Braket PennyLane 插件。该插件 PennyLane 与 [Amazon Braket Python SDK](https://github.com/aws/amazon-braket-sdk-python) 连接，因此你可以在 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 示例存储库](https://github.com/aws/amazon-braket-examples/tree/main/examples/pennylane)。

AmazonBraket PennyLane 插件使您只需一行代码即可在 Amazon PennyLane Braket QPU 和嵌入式仿真器设备之间切换。它提供了两个 Amazon Braket 量子器件可供使用 PennyLane：
+  `braket.aws.qubit` 用于与 Amazon Braket 服务的量子设备一起运行，包括 QPU 和模拟器
+  `braket.local.qubit` 用于使用 Amazon Braket SDK 的本地模拟器运行

AmazonBraket PennyLane 插件是开源的。你可以从[PennyLane 插件 GitHub 存储库](https://github.com/amazon-braket/amazon-braket-pennylane-plugin-python)中安装它。

有关的更多信息 PennyLane，请参阅[PennyLane 网站](https://pennylane.ai)上的文档。

## Amazon Braket 中的混合算法示例 Notebook
<a name="braket-hybrid-workflow"></a>

Amazon Braket 确实提供了各种不依赖 PennyLane 插件来运行混合算法的示例笔记本。您可以开始使用这些说明*变分方法*的 [Amazon Braket 混合示例 Notebook ](https://github.com/aws/amazon-braket-examples/tree/main/examples/hybrid_quantum_algorithms)中的任何一个，如量子近似优化算法 (QAOA) 或变分量子特征求解器 (VQE)。

Amazon Braket 示例 Notebook 依赖于 [Amazon Braket Python SDK](https://github.com/aws/amazon-braket-sdk-python)。SDK 提供了一个通过 Amazon Braket 与量子计算硬件设备进行交互的框架。它是一个开源库，旨在帮助您完成混合工作流程的量子部分。

您可以使用我们的[示例 Notebook ](https://github.com/aws/amazon-braket-examples)进一步探索 Amazon Braket。

## 带有嵌入式 PennyLane 仿真器的混合算法
<a name="hybrid-alorithms-pennylane"></a>

Amazon Braket Hybrid Jobs 现在配备了来自的高性能 CPU 和 GPU-based 嵌入式模拟器。[PennyLane](https://github.com/PennyLaneAI/pennylane-lightning)该系列嵌入式模拟器可以直接嵌入到您的混合作业容器中，包括快速状态向量 `lightning.qubit` 模拟器、使用 NVIDIA 的 [cuQuantum 库](https://developer.nvidia.com/cuquantum-sdk)加速的 `lightning.gpu` 模拟器等。这些嵌入式模拟器非常适合变分算法，如量子机器学习，这些算法可以从高级方法（如[伴随微分法](https://docs.pennylane.ai/en/stable/introduction/interfaces.html#simulation-based-differentiation)）中受益。您可以在一个或多个 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.g4dn.xlarge"))
def function(wires):
    dev = qml.device("lightning.gpu", wires=wires)
    ...
```

要开始使用带有 Hybrid Jobs 的 PennyLane 嵌入式模拟器，请参阅[示例笔记本](https://github.com/aws/amazon-braket-examples/blob/main/examples/hybrid_jobs/4_Embedded_simulators_in_Braket_Hybrid_Jobs/Embedded_simulators_in_Braket_Hybrid_Jobs.ipynb)。

## PennyLane 使用 Amazon Braket 模拟器开启伴随渐变
<a name="adjoint-gradient-pennylane"></a>

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

 **注意：**要使用伴随微分法，必须在您的 `qnode` 而**非** `diff_method='adjoint'` 中指定 `diff_method='device'`。请参阅以下示例。

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