翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 [量子位相推定] の例)
ハイブリッド量子アルゴリズムでは、特に古典的なアルゴリズムにおける特定の計算を高速化するために、量子処理ユニット (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
PennyLane の詳細については、PennyLane ウェブサイト
Amazon Braket のハイブリッドアルゴリズムのサンプルノートブック
Amazon Braket では、ハイブリッドアルゴリズムの実行に PennyLane プラグインに依存しないさまざまなサンプルノートブックを提供しています。量子近似最適化アルゴリズム (QAOA) や変分量子固有値ソルバー (VQE) などの変分法
Amazon Braket のサンプルノートブックは、Amazon Braket Python SDK
Amazon Braket は、「example
PennyLane シミュレーターが埋め込まれたハイブリッドアルゴリズム
Amazon Braket Hybrid Jobs に、PennyLanelightning.qubit シミュレーターと、NVIDIA の cuQuantum ライブラリlightning.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)