mcpField
A
alterlab-pennylane

alterlab-pennylane

github.com/alterlab-ieu開発7867 回インストール5 週間前に更新
リポジトリ

alterlab-pennylane について

alterlab-pennylane は、PennyLane による量子計算ワークフローを扱うスキルです。研究者や開発者向けに、パラメーター化回路の学習、量子・古典ハイブリッドモデル、シミュレーターや実機での実行を支援します。

主な機能

  1. 01量子回路の構築と確認
  2. 02パラメーター化回路の微分と学習
  3. 03PyTorch・JAXのハイブリッドモデル作成
  4. 04量子化学と変分アルゴリズムの実行
  5. 05シミュレーターと量子ハードウェアの切り替え

活用シーン

  1. 01量子分類器の学習
  2. 02VQEやQAOAの実験
  3. 03分子の基底状態エネルギーのモデル化

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-pennylane

インストール後、Claude Code で/alterlab-pennylaneを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
evals.json
references/
advanced_features.md
devices_backends.md
getting_started.md
optimization.md
quantum_chemistry.md
quantum_circuits.md
quantum_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)

ベストプラクティス

  1. シミュレーターから始める - ハードウェアにデプロイする前に、default.qubit でテストします
  2. ハードウェアではパラメーターシフトを使用する - 誤差逆伝播法はシミュレーターでのみ機能します
  3. QNode にショット数を設定する - @qml.qnode(dev, shots=N) または qml.set_shots を使用します。デバイスレベルでのショット数の設定は非推奨です
  4. 適切なエンコーディングを選択する - データのエンコーディングを問題の構造に合わせます
  5. 慎重に初期化する - バレンプラトーを避けるため、小さなランダム値を使用します
  6. 勾配を監視する - 深い回路で勾配消失が起きていないか確認します
  7. デバイスをキャッシュする - デバイスオブジェクトを再利用して、初期化のオーバーヘッドを削減します
  8. 回路のプロファイルを取る - qml.specs() を使用して、回路の複雑さを分析します
  9. ローカルでテストする - ハードウェアに送信する前に、シミュレーターで検証します
  10. テンプレートを使用する - よく使われる回路パターンには、組み込みのテンプレートを活用します
  11. 可能な場合はコンパイルする - パフォーマンスが重要なコードには、Catalyst の JIT を使用します

リソース

AlterLab Academic Skills スイートの一部です。

コメント