

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

# PennyLane と Amazon Braket の併用
<a name="hybrid"></a>

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

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

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

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

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

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

**Topics**
+ [PennyLane と Amazon Braket](#pennylane-option)
+ [Amazon Braket のハイブリッドアルゴリズムのサンプルノートブック](#braket-hybrid-workflow)
+ [PennyLane シミュレーターが埋め込まれたハイブリッドアルゴリズム](#hybrid-alorithms-pennylane)
+ [Amazon Braket シミュレーターを使用した PennyLane による随伴勾配](#adjoint-gradient-pennylane)
+ [Hybrid Jobs と PennyLane を使用した QAOA アルゴリズムの実行](braket-jobs-run-qaoa-algorithm.md)
+ [PennyLane 埋め込みシミュレーターを使用したハイブリッドワークロードの実行](pennylane-embedded-simulators.md)

## PennyLane と Amazon Braket
<a name="pennylane-option"></a>

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

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](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 examples](https://github.com/aws/amazon-braket-examples/tree/main/examples/pennylane)」リポジトリを参照してください。

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](https://github.com/amazon-braket/amazon-braket-pennylane-plugin-python) GitHub リポジトリから行えます。

PennyLane の詳細については、[PennyLane ウェブサイト](https://pennylane.ai)のドキュメントを参照してください。

## Amazon Braket のハイブリッドアルゴリズムのサンプルノートブック
<a name="braket-hybrid-workflow"></a>

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

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

Amazon Braket は、「[example](https://github.com/aws/amazon-braket-examples) のノートブックで詳しく調べることができます。

## PennyLane シミュレーターが埋め込まれたハイブリッドアルゴリズム
<a name="hybrid-alorithms-pennylane"></a>

Amazon Braket Hybrid Jobs に、[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)方法などの高度な方法の利点を享受できる量子機械学習などのバリエーションアルゴリズムに最適です。これらの埋め込みシミュレーターは、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 ](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)」のノートブックを参照してください。

## Amazon Braket シミュレーターを使用した PennyLane による随伴勾配
<a name="adjoint-gradient-pennylane"></a>

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