使用 PennyLane 與 Amazon Braket - Amazon Braket

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

使用 PennyLane 與 Amazon Braket

混合算法是包含傳統和量子指令的算法。傳統指令在傳統硬件(EC2 實例或筆記本電腦)上執行,量子指令在模擬器或量子計算機上執行。建議您使用「混合式工作」功能執行混合演算法。如需詳細資訊,請參閱何時使用 Amazon Braket 工作

AmazonBraket 使您能夠在以下位置的協助下設置和運行混合量子算法 Amazon布拉基 PennyLane 插入,或使用 AmazonPython 套件以及範例筆記本儲存庫。Amazon以 SDK 為基礎的 Braket 範例筆記本,可讓您設定和執行某些混合演算法,而無需 PennyLane 插件。但是,我們建議 PennyLane 因為它提供了更豐富的體驗。

關於混合量子演算法

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

純量子算法,例如紹爾(資格派對例子)或格羅弗(格羅弗的例子)需要數千或數百萬次的操作。出於這個原因,對於現有的量子設備來說,它們可能是不切實際的,通常稱為嘈雜的中間量子(NISQ) 裝置。

在混合量子演算法中,量子處理單元 (QPU) 可作為傳統 CPU 的協同處理器,特別是為了加速傳統演算法中的某些計算。在當今設備的功能範圍內,電路執行變得更短。

Amazon Braket PennyLane

Amazon胸針提供支持PennyLane,圍繞以下概念構建的開源軟件框架量子可分化編程。您可以使用此架構來訓練量子電路,就像訓練神經網路尋找量子化學、量子機器學習和最佳化中運算問題的解決方案一樣。

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

  • 該 PennyLane 圖書館- PennyLane 預先安裝在Amazon布拉基特筆記本。若要存取Amazon來自布拉克裝置 PennyLane,開啟記事本並匯入 PennyLane 使用以下範例。

import pennylane as qml

教學課程筆記本可協助您快速入門。或者,您可以使用 PennyLane 上Amazon從您選擇的 IDE 進行個體。

  • 該Amazon布拉基 PennyLane 插入— 若要使用自己的 IDE,您可以安裝Amazon布拉基 PennyLane 手動插件。該外掛程式連接 PennyLane 與Amazon Braket 蛇 SDK,所以你可以運行電路 PennyLane 上Amazon布拉基裝置。若要安裝 PennyLane 插件,使用以下範例。

pip install amazon-braket-pennylane-plugin

以下範例示範如何設置訪問Amazon布拉基裝置 PennyLane:

# to use SV1 import pennylane as qml s3 = ("my-bucket", "my-prefix") sv1 = qml.device("braket.aws.qubit", device_arn="arn:aws:braket:::device/quantum-simulator/amazon/sv1", s3_destination_folder=s3, 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布拉基 PennyLane 插件使您可以在之間切換AmazonBraket QPU 和嵌入式模擬器設備 PennyLane 用一行代碼。它提供了兩個Amazon配合使用的制動器 PennyLane:

  • braket.aws.qubit用於運行Amazon制動服務的量子設備,包括 QPU 和模擬器

  • braket.local.qubit用於運行Amazon布拉科特 SDK 的本地模擬器

該Amazon布拉基 PennyLane 插件是開源。您可以從PennyLane 插件 GitHub 儲存庫

如需更多資訊 PennyLane,以下範例。PennyLane 網站

Amazon Braket 局範例筆記型電腦中的混合式

AmazonBraket 確實提供了各種不依賴的例子筆記本電腦 PennyLane 用於運行混合算法的插件。您可以開始使用以下範例Amazon Braket 混合示例筆記本說明變數方法,例如量子近似優化算法(QAOA)或變分量子特徵求解析器(VQE)。

該Amazon布拉基例筆記本電腦依靠Amazon Braket 蛇 SDK。SDK 提供了一個框架,通過與量子計算硬件設備進行交互Amazon布拉基特。它是一個開放原始碼程式庫,旨在協助您處理混合式工作流程的量子部分。

你可以探索Amazon與我們進一步布拉克特範例筆記本

嵌入式混合算法 PennyLane 模擬器

AmazonBraket 混合作業現在配備了高性能 CPU 和 GPU 的嵌入式模擬器PennyLane。這個嵌入式模擬器系列可以直接嵌入到您的混合式工作容器中,並包含快速狀態向量lightning.qubit模擬器lightning.gpu使用 NVIDIA 的模擬器加速量子圖書館,和其他人。這些嵌入式模擬器非常適合用於變分算法,例如量子機器學習,可以從諸如伴隨分化方法。您可以在一或多個 CPU 或 GPU 執行個體上執行這些內嵌模擬器。

透過混合式工作,您現在可以使用傳統輔助處理器和 QPU 的組合來執行變數演算法程式碼,Amazon布拉克特按需模擬器,例如SV1,或直接使用嵌入式模擬器 PennyLane。

「混合式工作」容器已提供嵌入式模擬器,您只需要指定device(例如device="local:pennylane/lightning.gpu"),如下圖所示。若要使用嵌入lightning.gpu模擬器,您還需要在InstanceConfig如下面的代碼片段所示:

job = AwsQuantumJob.create( device="local:pennylane/lightning.gpu", source_module="algorithm_script.py", instance_config=InstanceConfig(instanceType="ml.p3.8xlarge") )

您還必須使用環境變量在算法代碼中引用設備AMZN_BRAKET_DEVICE_ARN如下範例。

import os import pennylane as qml device_string = os.environ["AMZN_BRAKET_DEVICE_ARN"] prefix, simulator_name = device_string.split("/") device = qml.device(simulator_name, wires=n_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 (https://docs.pennylane.ai/en/stable/code/api/pennylane.device.html#pennylane.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,您將需要通過刪除分組索引來重建成本哈密頓軸,如下所示:cost_h, mixer_h = qml.qaoa.max_clique(g, constrained=False) cost_h = qml.Hamiltonian(cost_h.coeffs, cost_h.ops)