PennyLane と Amazon Braket の併用 - Amazon Braket

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

PennyLane と Amazon Braket の併用

ハイブリッドアルゴリズムは、古典命令と量子命令の両方を含むアルゴリズムです。古典命令は、古典的なハードウェア (EC2 インスタンスまたはノートパソコン) で実行され、量子命令はシミュレーターまたは量子コンピュータ上で実行されます。Hybrid Jobs の機能を使用してハイブリッドアルゴリズムを実行することをお勧めします。詳細については、「Amazon Braket ジョブを使用する時期」を参照してください。

Amazon Braket では、Amazon Braket PennyLane プラグインまたは Amazon Braket Python SDK およびサンプルノートブックリポジトリの助けを借りてハイブリッド量子アルゴリズムを設定および実行できます。SDK に基づく Amazon Braket のサンプルノートブックを使用すると、PennyLane プラグインを使用せずに特定のハイブリッドアルゴリズムを設定および実行できます。しかし、PennyLane を使用した方が、リッチな体験が提供されるため、PennyLane の使用をお勧めします。

ハイブリッド量子アルゴリズムについて

現代の量子コンピューティングデバイスは、一般的にノイズを生成し、このためエラーも生成するため、ハイブリッド量子アルゴリズムは今日の業界にとって重要です。コンピューティングに追加されるすべての量子ゲートにより、ノイズが増える可能性が高くなります。したがって、長時間実行されるアルゴリズムはノイズによって圧倒され、計算エラーが発生する可能性があります。

ショア (Quantum Phase Estimation [量子位相推定] の例) またはグローバー(Grover の例) などの純粋な量子アルゴリズムには、数千または数百万ものオペレーションが必要です。このため、これらは既存の量子デバイスでは実行できない可能性があります。これらの量子デバイスは、一般にノイズの多い中間スケール量子(NISQ) デバイスと呼ばれます。

ハイブリッド量子アルゴリズムでは、特に古典的なアルゴリズムにおける特定の計算を高速化するために、量子処理ユニット (QPU) は古典的 CPU のコプロセッサとして機能します。今日のデバイスの機能によって実現できる範囲において、回路の実行がはるかに短くなります。

PennyLane と Amazon Braket

Amazon Braket は、PennyLane のサポートを提供し、量子微分可能プログラミングのコンセプトを中心に構築されたオープンソースのソフトウェアフレームワークです。このフレームワークは、量子化学、量子機械学習、最適化におけるコンピューティング問題の解を見つけるために、ニューラルネットワークをトレーニングするのと同じ方法で量子回路をトレーニングするのに利用可能です。

PennyLane ライブラリは、PyTorch や TensorFlow など、使い慣れた機械学習ツールへのインターフェースを提供し、量子回路のトレーニングを直感的に簡単に行えます。

  • PennyLane Library - 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 に接続するので、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 examples」リポジトリを参照してください。

Amazon Braket PennyLane プラグインを使用すると、1 行のコードで Amazon Braket QPU と PennyLane のシミュレーターデバイスを切り替えることができます。PennyLane プラグインは、それ自体とともに動作する 2 つの Amazon Braket 量子デバイスを提供しています。

  • braket.aws.qubit: Amazon Braket サービスの量子デバイス (QPU やシミュレーターを含む) を使用して実行するデバイス

  • braket.local.qubit: Amazon Braket SDK のローカルシミュレーターで実行するデバイス

Amazon Braket PennyLane プラグインはオープンソースです。インストールは PennyLane Plugin GitHub リポジトリから行えます。

PennyLane の詳細については、PennyLane ウェブサイトのドキュメントを参照してください。

Amazon Braket のハイブリッドアルゴリズムのサンプルノートブック

Amazon Braket では、ハイブリッドアルゴリズムの実行に PennyLane プラグインに依存しないさまざまなサンプルノートブックを提供しています。量子近似最適化アルゴリズム (QAOA) や変分量子固有値ソルバー (VQE) などの変分法を説明する Amazon Braket ハイブリッドサンプルノートブックのいずれからでも開始できます。

Amazon Braket のサンプルノートブックは、Amazon Braket Python SDK に依存しています。SDK は Amazon Braket を通じて量子コンピューティングハードウェアデバイスを操作するためのフレームワークを提供します。これは、ハイブリッドワークフローの量子部分を支援するために設計されたオープンソースライブラリです。

Amazon Braket は、「example のノートブックで詳しく調べることができます。

PennyLane シミュレーターが埋め込まれたハイブリッドアルゴリズム

Amazon Braket Hybrid Jobs に、PennyLane のハイパフォーマンスの CPU ベースおよび GPU ベースの埋め込みシミュレーターが追加されました。この埋め込みシミュレーターファミリーはハイブリッドジョブコンテナに直接埋め込むことができ、高速状態ベクトルの lightning.qubit シミュレーターと、NVIDIA の cuQuantum ライブラリを使用して高速化された lightning.gpu シミュレーターなどが含まれています。これらの埋め込みシミュレーターは、随伴区別方法などの高度な方法の利点を享受できる量子機械学習などのバリエーションアルゴリズムに最適です。これらの埋め込みシミュレーターは、1 つまたは複数の CPU または GPU インスタンスで実行できます。

Hybrid Jobs により、古典的なコプロセッサと QPU の組み合わせや SV1 などの Amazon Braket オンデマンドシミュレーターを使用したり、PennyLane の埋め込みシミュレーターを直接使用したりすることで、変分アルゴリズムコードを実行できるようになりました。

埋め込みシミュレーターは Hybrid Jobs コンテナでは既に利用可能になっています。利用するには、メインの Python 関数を @hybrid_job デコレータでデコレートしてください。PennyLane lightning.gpu シミュレーターを使用するには、次のコードスニペットに示すように InstanceConfig 内に GPU インスタンスを指定する必要があります。

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) ...

ハイブリッドジョブで PennyLane 埋め込みシミュレーターの使用を開始するには、「example 」のノートブックを参照してください。

Amazon Braket シミュレーターを使用した PennyLane による随伴勾配

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)