alterlab-pennylane について
alterlab-pennylane は、PennyLane による量子計算ワークフローを扱うスキルです。研究者や開発者向けに、パラメーター化回路の学習、量子・古典ハイブリッドモデル、シミュレーターや実機での実行を支援します。
主な機能
- 01量子回路の構築と確認
- 02パラメーター化回路の微分と学習
- 03PyTorch・JAXのハイブリッドモデル作成
- 04量子化学と変分アルゴリズムの実行
- 05シミュレーターと量子ハードウェアの切り替え
活用シーン
- 01量子分類器の学習
- 02VQEやQAOAの実験
- 03分子の基底状態エネルギーのモデル化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-pennylaneインストール後、Claude Code で/alterlab-pennylaneを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/advanced_features.mddevices_backends.mdgetting_started.mdoptimization.mdquantum_chemistry.mdquantum_circuits.mdquantum_ml.md詳細
PennyLane
概要
PennyLane は、ニューラルネットワークのように量子コンピューターをトレーニングできる量子コンピューティングライブラリです。量子回路の自動微分、デバイスに依存しないプログラミング、従来の機械学習フレームワークとのシームレスな統合を提供します。
このスキルを使用する場面
ユーザーが次のことを希望する場合に、このスキルを使用します。
- パラメーター化された回路を微分してトレーニングする(parameter-shift、バックプロパゲーション、随伴法)
- PyTorch(
qml.qnn.TorchLayer)または JAX を使ってハイブリッド量子・古典モデルを構築する - 微分可能な VQE/QAOA または量子化学ワークフロー(
qml.qchem)を実行する - デバイスに依存しない回路を記述し、シミュレーター(default.qubit、lightning)をプラグインハードウェア用に切り替える
対象外
| シナリオ | 代わりに使用 |
|---|---|
| IBM 固有のトランスパイル、Runtime セッション/バッチ、またはエラー緩和オプション | alterlab-qiskit |
| Google Quantum AI ハードウェア、Cirq ネイティブ回路、または XEB/RB 特性評価 | alterlab-cirq |
| Lindblad マスター方程式、デコヒーレンス、または空洞 QED ダイナミクス | alterlab-qutip |
| 量子回路を使用しない従来のディープラーニング | alterlab-pytorch-lightning |
インストール
uv を使ってインストールします(PennyLane ≥ 0.43。2026-09 時点の現行バージョン 0.45.x には Python ≥ 3.11 が必要です)。
uv pip install pennylane
量子ハードウェアにアクセスするには、デバイスプラグインをインストールします。
# IBM Quantum (0.45 pins qiskit<=2.3 and qiskit-ibm-runtime~=0.45 — use its own env
# if you also run the latest Qiskit directly)
uv pip install pennylane-qiskit
# Amazon Braket (IonQ, IQM, Rigetti, AQT QPUs and managed simulators)
uv pip install amazon-braket-pennylane-plugin
# Cirq simulators
uv pip install pennylane-cirq
# IonQ
uv pip install pennylane-ionq
pennylane-rigetti はメンテナンスされていません(pyquil<4、networkx<3 に固定されています)。Rigetti QPU には、代わりに Amazon Braket 経由でアクセスしてください。
バージョンに関する注意(v0.42~0.45): TensorFlow は削除されています(qml.qnn.KerasLayer は v0.42 で削除され、tf インターフェースは v0.44 で廃止されました)。また、shots は QNode に設定します。@qml.qnode(dev, shots=1000) または qml.set_shots(qnode, shots=...) を使用してください。qml.device(..., shots=...) および呼び出し時の circuit(x, shots=...) は、v0.43 以降非推奨です。
クイックスタート
量子回路を構築し、そのパラメーターを最適化します。
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)
主な機能
PennyLane を初めて使用する場合は、インストール、QNode、デバイス、勾配、および最初の最適化ループについて、references/getting_started.md を参照してください。
1. 量子回路の構築
ゲート、測定、状態準備を使って回路を構築します。詳しくは references/quantum_circuits.md を参照してください。
- 単一量子ビットゲートおよび複数量子ビットゲート
- 制御演算および条件ロジック
- 回路途中の測定および適応型回路
- さまざまな測定タイプ(期待値、確率、サンプル)
- 回路の検査およびデバッグ
2. 量子機械学習
ハイブリッド量子・古典モデルを作成します。詳しくは references/quantum_ml.md を参照してください。
- PyTorch および JAX との統合(TensorFlow/Keras のサポートは v0.44 で終了)
- 量子ニューラルネットワークおよび変分分類器
- データエンコーディング戦略(角度、振幅、基底、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)
- 勾配計算手法(バックプロパゲーション、parameter-shift、随伴法)
- 変分アルゴリズム(VQE、QAOA)
- トレーニング戦略(学習率スケジュール、ミニバッチ)
- barren plateau および局所最小値への対処
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 (returns the qubit Hamiltonian and qubit count).
# Coordinates default to Bohr — state the unit, or H2 at "0.74" is badly compressed.
symbols = ['H', 'H']
coords = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.74]) # Å
mol = qchem.Molecule(symbols, coords, unit="angstrom")
H, n_qubits = qchem.molecular_hamiltonian(mol)
# 2. Set up UCCSD ansatz from the excitations
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)
dev = qml.device('default.qubit', wires=n_qubits)
@qml.qnode(dev)
def vqe_circuit(params):
qml.UCCSD(params, wires=range(n_qubits),
s_wires=s_wires, d_wires=d_wires, init_state=hf_state)
return qml.expval(H)
# 3. Optimize (one parameter per excitation)
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")
デバイスの切り替え
# Define the circuit body once, bind it to a device on demand.
def circuit_body(params):
qml.AngleEmbedding(params, wires=range(4))
return qml.expval(qml.PauliZ(0))
def make_qnode(dev, shots=None):
return qml.qnode(dev, shots=shots)(circuit_body)
# Test on simulator
dev_sim = qml.device('default.qubit', wires=4)
result_sim = make_qnode(dev_sim)(params)
# Run on quantum hardware (IBM, via Qiskit Runtime)
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(channel='ibm_quantum_platform') # requires saved IBM Cloud credentials
backend = service.least_busy(operational=True, simulator=False)
dev_hw = qml.device('qiskit.remote', wires=4, backend=backend)
# Hardware needs finite shots; for gradients use diff_method='parameter-shift'.
result_hw = make_qnode(dev_hw, shots=1024)(params)
ベストプラクティス
- シミュレーターから始める - ハードウェアにデプロイする前に、
default.qubitでテストします - ハードウェアではパラメーターシフトを使用する - 誤差逆伝播法はシミュレーターでのみ機能します
- QNode にショット数を設定する -
@qml.qnode(dev, shots=N)またはqml.set_shotsを使用します。デバイスレベルでのショット数の設定は非推奨です - 適切なエンコーディングを選択する - データのエンコーディングを問題の構造に合わせます
- 慎重に初期化する - バレンプラトーを避けるため、小さなランダム値を使用します
- 勾配を監視する - 深い回路で勾配消失が起きていないか確認します
- デバイスをキャッシュする - デバイスオブジェクトを再利用して、初期化のオーバーヘッドを削減します
- 回路のプロファイルを取る -
qml.specs()を使用して、回路の複雑さを分析します - ローカルでテストする - ハードウェアに送信する前に、シミュレーターで検証します
- テンプレートを使用する - よく使われる回路パターンには、組み込みのテンプレートを活用します
- 可能な場合はコンパイルする - パフォーマンスが重要なコードには、Catalyst の JIT を使用します
リソース
- 公式ドキュメント:https://docs.pennylane.ai
- Codebook(チュートリアル):https://pennylane.ai/codebook
- QML デモ:https://pennylane.ai/demonstrations
- コミュニティフォーラム:https://discuss.pennylane.ai
- GitHub:https://github.com/PennyLaneAI/pennylane
- 非推奨および削除:https://docs.pennylane.ai/en/stable/development/deprecations.html
AlterLab Academic Skills スイートの一部です。