pennylane について
PennyLaneは、量子計算や量子機械学習に取り組む研究者・開発者向けのPythonライブラリです。微分可能な量子回路、デバイス非依存のプログラミング、古典的な機械学習フレームワークとの連携を備えています。
主な機能
- 01量子回路の構築
- 02量子回路の自動微分
- 03量子・古典ハイブリッドモデル
- 04量子化学ワークフロー
- 05シミュレーターとハードウェアのバックエンド
- 06回路の最適化とコンパイル
活用シーン
- 01変分量子分類器の学習
- 02分子の基底状態エネルギーの計算
- 03ハードウェア実行前のシミュレーターでの回路テスト
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ crazymsn/ academic-skills --skill pennylaneインストール後、Claude Code で/pennylaneを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced_features.mddevices_backends.mdgetting_started.mdoptimization.mdquantum_chemistry.mdquantum_circuits.mdquantum_ml.md詳細
PennyLane
概要
PennyLane は、ニューラルネットワークのように量子コンピューターを訓練できる量子コンピューティングライブラリです。量子回路の自動微分、デバイスに依存しないプログラミング、古典的な機械学習フレームワークとのシームレスな統合を提供します。
インストール
uv を使用してインストールします:
uv pip install pennylane
量子ハードウェアにアクセスするには、デバイスプラグインをインストールします:
# IBM Quantum
uv pip install pennylane-qiskit
# Amazon Braket
uv pip install amazon-braket-pennylane-plugin
# Google Cirq
uv pip install pennylane-cirq
# Rigetti Forest
uv pip install pennylane-rigetti
# IonQ
uv pip install pennylane-ionq
クイックスタート
量子回路を構築し、そのパラメーターを最適化します:
import pennylane as qml
from pennylane import numpy as np
# Create device
dev = qml.device('default.qubit', wires=2)
# Define quantum circuit
@qml.qnode(dev)
def circuit(params):
qml.RX(params[0], wires=0)
qml.RY(params[1], wires=1)
qml.CNOT(wires=[0, 1])
return qml.expval(qml.PauliZ(0))
# Optimize parameters
opt = qml.GradientDescentOptimizer(stepsize=0.1)
params = np.array([0.1, 0.2], requires_grad=True)
for i in range(100):
params = opt.step(circuit, params)
主な機能
1. 量子回路の構築
ゲート、測定、状態準備を用いて回路を構築します。以下の内容については references/quantum_circuits.md を参照してください:
- 1 量子ビットおよび複数量子ビットのゲート
- 制御演算と条件付きロジック
- 回路途中での測定と適応型回路
- 各種測定タイプ(期待値、確率、サンプル)
- 回路の検査とデバッグ
2. 量子機械学習
量子と古典を組み合わせたハイブリッドモデルを作成します。以下の内容については references/quantum_ml.md を参照してください:
- PyTorch、JAX、TensorFlow との統合
- 量子ニューラルネットワークと変分分類器
- データエンコーディング手法(アングル、振幅、基底、IQP)
- 誤差逆伝播法によるハイブリッドモデルの訓練
- 量子回路を用いた転移学習
3. 量子化学
分子をシミュレーションし、基底状態エネルギーを計算します。以下の内容については references/quantum_chemistry.md を参照してください:
- 分子ハミルトニアンの生成
- 変分量子固有値ソルバー(VQE)
- 化学計算向けの UCCSD アンザッツ
- 幾何構造最適化と解離曲線
- 分子の物性計算
4. デバイス管理
シミュレーターまたは量子ハードウェア上で実行します。以下の内容については references/devices_backends.md を参照してください:
- 組み込みシミュレーター(default.qubit、lightning.qubit、default.mixed)
- ハードウェアプラグイン(IBM、Amazon Braket、Google、Rigetti、IonQ)
- デバイスの選択と設定
- パフォーマンスの最適化とキャッシュ
- GPU アクセラレーションと JIT コンパイル
5. 最適化
さまざまなオプティマイザーを用いて量子回路を訓練します。以下の内容については references/optimization.md を参照してください:
- 組み込みオプティマイザー(Adam、勾配降下法、モーメンタム、RMSProp)
- 勾配計算手法(backprop、パラメーターシフト、アジョイント)
- 変分アルゴリズム(VQE、QAOA)
- 訓練戦略(学習率スケジュール、ミニバッチ)
- バレンプラトーと局所解への対処
6. 高度な機能
テンプレート、変換、コンパイルを活用します。以下の内容については references/advanced_features.md を参照してください:
- 回路テンプレートとレイヤー
- 変換と回路の最適化
- パルスレベルのプログラミング
- Catalyst JIT コンパイル
- ノイズモデルと誤り緩和
- リソース見積もり
一般的なワークフロー
変分分類器の訓練
# 1. Define ansatz
@qml.qnode(dev)
def classifier(x, weights):
# Encode data
qml.AngleEmbedding(x, wires=range(4))
# Variational layers
qml.StronglyEntanglingLayers(weights, wires=range(4))
return qml.expval(qml.PauliZ(0))
# 2. Train
opt = qml.AdamOptimizer(stepsize=0.01)
weights = np.random.random((3, 4, 3)) # 3 layers, 4 wires
for epoch in range(100):
for x, y in zip(X_train, y_train):
weights = opt.step(lambda w: (classifier(x, w) - y)**2, weights)
分子の基底状態を求める VQE の実行
from pennylane import qchem
# 1. Build Hamiltonian
symbols = ['H', 'H']
coords = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.74])
H, n_qubits = qchem.molecular_hamiltonian(symbols, coords)
# 2. Define ansatz
@qml.qnode(dev)
def vqe_circuit(params):
qml.BasisState(qchem.hf_state(2, n_qubits), wires=range(n_qubits))
qml.UCCSD(params, wires=range(n_qubits))
return qml.expval(H)
# 3. Optimize
opt = qml.AdamOptimizer(stepsize=0.1)
params = np.zeros(10, requires_grad=True)
for i in range(100):
params, energy = opt.step_and_cost(vqe_circuit, params)
print(f"Step {i}: Energy = {energy:.6f} Ha")
デバイスの切り替え
# Same circuit, different backends
circuit_def = lambda dev: qml.qnode(dev)(circuit_function)
# Test on simulator
dev_sim = qml.device('default.qubit', wires=4)
result_sim = circuit_def(dev_sim)(params)
# Run on quantum hardware
dev_hw = qml.device('qiskit.ibmq', wires=4, backend='ibmq_manila')
result_hw = circuit_def(dev_hw)(params)
詳細ドキュメント
特定のトピックを詳しく確認するには、以下のリファレンスファイルを参照してください:
- はじめに:
references/getting_started.md- インストール、基本概念、最初のステップ - 量子回路:
references/quantum_circuits.md- ゲート、測定、回路パターン - 量子 ML:
references/quantum_ml.md- ハイブリッドモデル、フレームワーク統合、QNN - 量子化学:
references/quantum_chemistry.md- VQE、分子ハミルトニアン、化学ワークフロー - デバイス:
references/devices_backends.md- シミュレーター、ハードウェアプラグイン、デバイス設定 - 最適化:
references/optimization.md- オプティマイザー、勾配、変分アルゴリズム - 高度な機能:
references/advanced_features.md- テンプレート、変換、JIT コンパイル、ノイズ
ベストプラクティス
- まずシミュレーターから始める - ハードウェアにデプロイする前に
default.qubitでテストします - ハードウェアにはパラメーターシフトを使用する - バックプロパゲーションはシミュレーターでのみ機能します
- 適切なエンコーディングを選択する - データエンコーディングを問題の構造に合わせます
- 慎重に初期化する - バレンプラトーを避けるため、小さなランダム値を使用します
- 勾配を監視する - 深い回路で勾配消失が起きていないか確認します
- デバイスをキャッシュする - デバイスオブジェクトを再利用して、初期化のオーバーヘッドを減らします
- 回路をプロファイルする -
qml.specs()を使用して回路の複雑さを分析します - ローカルでテストする - ハードウェアに投入する前にシミュレーターで検証します
- テンプレートを使用する - 一般的な回路パターンには組み込みテンプレートを活用します
- 可能な場合はコンパイルする - パフォーマンスが重要なコードには Catalyst JIT を使用します
リソース
- 公式ドキュメント: https://docs.pennylane.ai
- Codebook(チュートリアル): https://pennylane.ai/codebook
- QML デモンストレーション: https://pennylane.ai/qml/demonstrations
- コミュニティフォーラム: https://discuss.pennylane.ai
- GitHub: https://github.com/PennyLaneAI/pennylane