PennyLane 搭配 Amazon Braket 使用 - Amazon Braket

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

PennyLane 搭配 Amazon Braket 使用

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

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

關於混合量子演算法

混合量子演算法對現今的產業很重要,因為現代量子運算裝置通常會產生雜訊,因此會產生錯誤。新增至運算的每個量子閘道都會增加增加雜訊的機會;因此,長時間執行的演算法可能會因為雜訊而壓得過重,這會導致運算錯誤。

純量子演算法,例如 Shor 的 (量子階段估算範例) 或 Grover 的 (Grover 範例),需要數千或數百萬個操作。因此,它們對於現有的量子裝置可能不切實際,通常稱為嘈雜的中階量子 (NISQ) 裝置。

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

Amazon Braket 搭配 PennyLane

Amazon Braket 支援 PennyLane,這是以量子可區分程式設計概念為基礎的開放原始碼軟體架構。您可以使用此架構,以訓練神經網路的方式訓練量子電路,以尋找量子化學、量子機器學習和最佳化中運算問題的解決方案。

PennyLane 程式庫提供熟悉的機器學習工具介面,包括 PyTorch 和 TensorFlow,讓訓練量子電路快速且直覺。

  • 程式 PennyLane 庫 PennyLane -- 已預先安裝於 Amazon Braket 筆記本。存取 Amazon 使用下列命令從中啟動裝置 PennyLane、開啟筆記本並匯入 PennyLane 程式庫。

import pennylane as qml

教學筆記本可協助您快速入門。或者,您可以在 PennyLane Amazon 從IDE您選擇的 中擷取。

  • 的 Amazon Braket PennyLane 外掛程式:若要使用您自己的 IDE,您可以安裝 Amazon Braket 手動 PennyLane 外掛程式。外掛程式 PennyLane 會與 Amazon Braket Python SDK連線,因此您可以在 PennyLane Amazon Braket 裝置。若要安裝 PennyLane 外掛程式,請使用下列命令。

pip install amazon-braket-pennylane-plugin

下列範例示範如何設定 的存取權 Amazon 中的 Braket 裝置 PennyLane:

# 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 範例儲存庫

所以此 Amazon Braket PennyLane 外掛程式可讓您在 之間切換 Amazon 在 PennyLane 中使用單行程式碼的 Braket QPU和內嵌模擬器裝置。它提供兩個 Amazon 要使用的剎車量子裝置 PennyLane:

  • braket.aws.qubit 使用 執行 Amazon Braket 服務的量子裝置,包括 QPUs和 模擬器

  • braket.local.qubit 使用 執行 Amazon Braket SDK的本機模擬器

所以此 Amazon Braket PennyLane 外掛程式是開放原始碼。您可以從PennyLane 外掛程式 GitHub 儲存庫安裝它。

如需詳細資訊 PennyLane,請參閱 PennyLane 網站上的 文件。

Amazon Braket 範例筆記本中的混合演算法

Amazon Braket 確實提供各種範例筆記本,這些筆記本不依賴 PennyLane 外掛程式來執行混合式演算法。您可以開始使用任何說明不同方法Amazon Braket 混合式範例筆記本,例如 Quantum 近似最佳化演算法 (QAOA) 或變數 Quantum Eigensolver ()VQE。

Amazon Braket 範例筆記本依賴 Amazon Braket Python SDK。SDK 提供架構,可透過 與量子運算硬體裝置互動 Amazon 煞車。它是一種開放原始碼程式庫,旨在協助您處理混合工作流程的量子部分。

您可以探索 Amazon 使用範例筆記本進一步執行。

具有內嵌 PennyLane 模擬器的混合演算法

Amazon Braket 混合任務現在隨附來自 的高效能 CPU和 GPU型內嵌模擬器PennyLane。此系列的內嵌模擬器可以直接內嵌在您的混合任務容器中,並包含快速狀態向量lightning.qubit模擬器、使用 NVIDIA的程式cuQuantum 庫加速的lightning.gpu模擬器等。這些內嵌模擬器非常適合各種演算法,例如量子機器學習,這些演算法可以從輔助差異化方法等進階方法中受益。您可以在一或多個 或 CPUGPU執行個體上執行這些內嵌模擬器。

使用混合式任務,您現在可以使用傳統協同處理器和 的組合來執行不同的演算法程式碼QPU,Amazon Braket 隨需模擬器,例如 SV1,或直接從 使用內嵌模擬器 PennyLane。

內嵌模擬器已搭配 Hybrid Jobs 容器使用,您只需使用@hybrid_job裝飾器裝飾您的主要 Python 函數。若要使用 PennyLane lightning.gpu模擬器,您也需要在 中指定GPU執行個體InstanceConfig,如下列程式碼片段所示:

import pennylane as qml from braket.jobs import hybird_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) ...

請參閱範例筆記本,以開始使用具有混合任務的 PennyLane 內嵌模擬器。

PennyLane 使用 Amazon Braket 模擬器在 上結合漸層

使用 PennyLane 適用於 Amazon Braket 的外掛程式,您可以在本機狀態向量模擬器或 上執行時,使用並行差異化方法運算漸層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漢密爾頓人運算分組索引,並使用它們將漢密頓人分割為多個預期值。如果您想要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)