pennylane について
PennyLaneは、量子回路の構築と学習に使うPythonライブラリで、量子計算や量子・古典ハイブリッド機械学習に取り組む人向けです。自動微分とデバイス非依存の記述を組み合わせ、シミュレーターと量子ハードウェアで実行できます。
主な機能
- 01量子回路の構築
- 02自動微分
- 03量子・古典ハイブリッドモデル
- 04量子化学ワークフロー
- 05シミュレーターとハードウェアデバイス
- 06回路の最適化とコンパイル
活用シーン
- 01変分量子分類器の学習
- 02分子の基底状態エネルギー計算
- 03シミュレーターでの回路テスト
- 04量子ハードウェアでの回路実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kalarislabs/ research-agent-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 は、ニューラルネットワークのように量子コンピューターをトレーニングできる量子コンピューティングライブラリです。量子回路の自動微分、デバイスに依存しないプログラミング、従来の機械学習フレームワークとのシームレスな統合を提供します。
インストール
PennyLane 0.45.0 には Python 3.11 以降が必要です。再現可能な環境を構築するため、バージョンを固定して uv でインストールします。
uv pip install "pennylane==0.45.0"
量子ハードウェアにアクセスするには、対象のプロバイダーに対応するプラグインをインストールします。Qiskit を追加またはアップグレードする際は、依存関係の構成が厳密なため、クリーンな環境から始めてください。
# IBM Quantum
uv pip install "pennylane-qiskit==0.45.0"
# Amazon Braket
uv pip install "amazon-braket-pennylane-plugin==1.34.1"
# Google Cirq
uv pip install "pennylane-cirq==0.44.0"
# Rigetti Forest
uv pip install "pennylane-rigetti==0.40.0"
# IonQ
uv pip install "pennylane-ionq==0.45.0"
# High-performance local simulators
uv pip install "pennylane-lightning==0.45.0"
# Catalyst JIT compilation
uv pip install "pennylane-catalyst==0.15.0"
クイックスタート
量子回路を構築し、そのパラメーターを最適化します。
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 をご覧ください。
- 単一量子ビットおよび複数量子ビットのゲート
- 制御演算と条件ロジック
- 回路途中の測定と適応型回路
- さまざまな測定タイプ(期待値、確率、サンプル)
- 回路の検査とデバッグ
2. 量子機械学習
量子と古典を組み合わせたモデルを作成します。詳しくは references/quantum_ml.md をご覧ください。
- PyTorch および JAX との統合
- 量子ニューラルネットワークと変分分類器
- データエンコーディング戦略(角度、振幅、基底、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)
- 勾配の計算方法(誤差逆伝播法、パラメーターシフト法、随伴法)
- 変分アルゴリズム(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']
geometry = np.array([[0.0, 0.0, -0.66140414], [0.0, 0.0, 0.66140414]])
molecule = qchem.Molecule(symbols, geometry)
H, n_qubits = qchem.molecular_hamiltonian(molecule)
hf_state = qchem.hf_state(electrons=2, orbitals=n_qubits)
singles, doubles = qchem.excitations(electrons=2, orbitals=n_qubits)
s_wires, d_wires = qchem.excitations_to_wires(singles, doubles)
# 2. Define ansatz
@qml.qnode(dev)
def vqe_circuit(params):
qml.BasisState(hf_state, wires=range(n_qubits))
qml.UCCSD(params, wires=range(n_qubits), s_wires=s_wires, d_wires=d_wires)
return qml.expval(H)
# 3. Optimize
opt = qml.AdamOptimizer(stepsize=0.1)
params = np.zeros(len(singles) + len(doubles), 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
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=4)
dev_hw = qml.device('qiskit.remote', wires=backend.num_qubits, backend=backend)
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
エージェントの作業手順
- 環境を確認します。 ライブラリのバージョン、単位、座標系、データ形式(FITS、CIF、HDF5、netCDF)を確認します。
- 入力を明確にします。 データまたはユーザーに確認し、形式、識別子、パラメーターを確定します。結果が変わる値については推測せず、質問します。
- まず小規模に実行します。 小さなグリッド、領域、またはサブセットで実行し、物理的に妥当か確認します。
- 上記の手順と参考資料を使用して、タスク全体を実行します。
- 結果を検証します。 単位と次元の整合性、保存則または既知の極限、数値収束を確認します。
- 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の点を記載します。
| 次のような場合 | 実行すること |
|---|---|
| 結果が既知の物理的限界に反する | 報告する前に、単位、境界条件、ソルバーの許容誤差を確認します。 |
| これらの手順に記載された関数、フラグ、エンドポイントがインストール済みバージョンに存在しない | インストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、適宜対応してユーザーに伝えます。API をでっち上げてはいけません。 |
| 必須の入力、識別子、またはパラメーターが曖昧 | ユーザーに質問するか、実行前に前提を明示します。 |
誠実性に関するルール
- 結果、パラメーター、識別子、引用、統計を捏造してはいけません。実行または検証できない場合は、その旨を明確に伝えます。
- 定量的な結果には、必ず不確実性と数値許容誤差を記載します。
- ここに記載されたバージョン固有の詳細は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認します。
- 費用が発生する操作、共有 GPU やクラウドクォータを消費する操作、個人データまたは患者データに触れる操作、取り消せない操作を行う前に、ユーザーに確認します。
関連スキル
cirq:Google の量子コンピューティングフレームワークです。qiskit:Qiskit と IBM Quantum Runtime を使用して、量子回路を構築、シミュレーション、トランスパイル、実行します。