

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 Amazon Braket 使用 PennyLane
<a name="hybrid"></a>

混合演算法是同時包含傳統和量子指示的演算法。傳統說明是在傳統硬體 (EC2 執行個體或筆記型電腦） 上執行，而量子說明是在模擬器或量子電腦上執行。我們建議您使用混合任務功能執行混合演算法。如需詳細資訊，請參閱[何時使用 Amazon Braket 任務](braket-jobs.md#braket-jobs-use)。

Amazon Braket 可讓您在 ** Amazon Braket PennyLane 外掛程式**或 ** Amazon Braket Python SDK** 和範例筆記本儲存庫的協助下，設定和執行混合式量子演算法。Amazon Braket 範例筆記本以 SDK 為基礎，可讓您在沒有 PennyLane 外掛程式的情況下設定和執行特定混合式演算法。不過，我們建議使用 PennyLane，因為它提供更豐富的體驗。

 **關於混合量子演算法** 

混合量子演算法對現今的產業來說很重要，因為現代量子運算裝置通常會產生雜訊，因此會產生錯誤。新增至運算的每個量子閘道都會提高增加雜訊的機會；因此，長時間執行的演算法可能會因為雜訊而不堪重負，從而導致運算錯誤。

純量子演算法，例如 Shor 的 [（量子階段估算範例）](https://github.com/amazon-braket/amazon-braket-examples/tree/main/examples/advanced_circuits_algorithms/Quantum_Phase_Estimation) 或 Grover 的 [(Grover 範例）](https://github.com/aws/amazon-braket-examples/tree/main/examples/advanced_circuits_algorithms/Grover)，需要數千或數百萬個操作。因此，它們對於現有的量子裝置可能不切實際，通常稱為*雜訊中階量子 *(NISQ) 裝置。

在混合量子演算法中，量子處理單元 (QPUs) 可做為傳統 CPUs 的共同處理器，特別是在傳統演算法中加速特定計算。在現今裝置的功能範圍內，電路執行會縮短許多。

**Topics**
+ [Amazon Braket 搭配 PennyLane](#pennylane-option)
+ [Amazon Braket 範例筆記本中的混合演算法](#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 筆記本中。若要從 PennyLane 存取 Amazon Braket 裝置，請開啟筆記本並使用下列命令匯入 PennyLane 程式庫。

```
import pennylane as qml
```

教學筆記本可協助您快速入門。或者，您可以從您選擇的 IDE 在 Amazon Braket 上使用 PennyLane。
+  **Amazon Braket 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)。

Amazon Braket PennyLane 外掛程式可讓您使用單行程式碼在 PennyLane 中的 Amazon Braket QPU 和內嵌模擬器裝置之間切換。它提供兩個用於 PennyLane 的 Amazon Braket 量子裝置：
+  `braket.aws.qubit` 使用 Amazon Braket 服務的量子裝置執行，包括 QPUs 和模擬器
+  `braket.local.qubit` 使用 Amazon Braket SDK 的本機模擬器執行

Amazon Braket PennyLane 外掛程式是開放原始碼。您可以從 [PennyLane 外掛程式 GitHub 儲存庫](https://github.com/amazon-braket/amazon-braket-pennylane-plugin-python)安裝它。

如需 PennyLane 的詳細資訊，請參閱 [PennyLane 網站上的](https://pennylane.ai)文件。

## Amazon Braket 範例筆記本中的混合演算法
<a name="braket-hybrid-workflow"></a>

Amazon Braket 確實提供各種範例筆記本，這些筆記本不依賴 PennyLane 外掛程式來執行混合式演算法。您可以開始使用任何說明*變化方法*的 [Amazon Braket 混合式範例筆記本](https://github.com/aws/amazon-braket-examples/tree/main/examples/hybrid_quantum_algorithms)，例如 Quantum 近似最佳化演算法 (QAOA) 或變化量 Eigensolver (VQE)。

Amazon Braket 範例筆記本依賴 [Amazon Braket Python SDK](https://github.com/aws/amazon-braket-sdk-python)。SDK 提供框架，可透過 Amazon Braket 與量子運算硬體裝置互動。這是一個開放原始碼程式庫，旨在協助您處理混合工作流程的量子部分。

您可以使用我們的[範例筆記本](https://github.com/aws/amazon-braket-examples)進一步探索 Amazon Braket。

## 具有內嵌 PennyLane 模擬器的混合演算法
<a name="hybrid-alorithms-pennylane"></a>

Amazon Braket 混合任務現在隨附 [PennyLane](https://github.com/PennyLaneAI/pennylane-lightning) 的高效能 CPU 和 GPU 型內嵌模擬器。此系列的內嵌模擬器可以直接內嵌在您的混合任務容器中，並包含快速狀態向量`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 執行個體上執行這些內嵌模擬器。

使用混合任務，您現在可以使用傳統協同處理器和 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)
    ...
```

請參閱[範例筆記本](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 內嵌模擬器搭配混合任務。

## PennyLane 上搭配 Amazon Braket 模擬器的聯結漸層
<a name="adjoint-gradient-pennylane"></a>

使用適用於 Amazon Braket 的PennyLane外掛程式，您可以在本機狀態向量模擬器或 SV1 上執行時，使用並行差異化方法來計算漸層。

 **注意：**若要使用聯合差異化方法，您必須在 `diff_method='device'`中指定 `qnode`，**而不是** `diff_method='adjoint'`。請參閱以下範例。

```
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 的分組索引，並使用它們將 Hamiltonian 分割為多個預期值。如果您想要在從 執行 QAOA 時使用 SV1 的聯結差異化功能PennyLane，則需要移除分組索引來重建 Hamiltonian 的成本，如下所示： `cost_h, mixer_h = qml.qaoa.max_clique(g, constrained=False) cost_h = qml.Hamiltonian(cost_h.coeffs, cost_h.ops)`