mcpField
P
pennylane

pennylane

github.com/kalarislabsその他7340 回インストール3 日前に更新
リポジトリ

pennylane について

PennyLaneは、量子回路の構築と学習に使うPythonライブラリで、量子計算や量子・古典ハイブリッド機械学習に取り組む人向けです。自動微分とデバイス非依存の記述を組み合わせ、シミュレーターと量子ハードウェアで実行できます。

主な機能

  1. 01量子回路の構築
  2. 02自動微分
  3. 03量子・古典ハイブリッドモデル
  4. 04量子化学ワークフロー
  5. 05シミュレーターとハードウェアデバイス
  6. 06回路の最適化とコンパイル

活用シーン

  1. 01変分量子分類器の学習
  2. 02分子の基底状態エネルギー計算
  3. 03シミュレーターでの回路テスト
  4. 04量子ハードウェアでの回路実行

インストール

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

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill pennylane

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

同梱ファイル

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

references/
advanced_features.md
devices_backends.md
getting_started.md
optimization.md
quantum_chemistry.md
quantum_circuits.md
quantum_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 コンパイル、ノイズ

ベストプラクティス

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

リソース

エージェントの作業手順

  1. 環境を確認します。 ライブラリのバージョン、単位、座標系、データ形式(FITS、CIF、HDF5、netCDF)を確認します。
  2. 入力を明確にします。 データまたはユーザーに確認し、形式、識別子、パラメーターを確定します。結果が変わる値については推測せず、質問します。
  3. まず小規模に実行します。 小さなグリッド、領域、またはサブセットで実行し、物理的に妥当か確認します。
  4. 上記の手順と参考資料を使用して、タスク全体を実行します。
  5. 結果を検証します。 単位と次元の整合性、保存則または既知の極限、数値収束を確認します。
  6. 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の点を記載します。
次のような場合実行すること
結果が既知の物理的限界に反する報告する前に、単位、境界条件、ソルバーの許容誤差を確認します。
これらの手順に記載された関数、フラグ、エンドポイントがインストール済みバージョンに存在しないインストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、適宜対応してユーザーに伝えます。API をでっち上げてはいけません。
必須の入力、識別子、またはパラメーターが曖昧ユーザーに質問するか、実行前に前提を明示します。

誠実性に関するルール

  • 結果、パラメーター、識別子、引用、統計を捏造してはいけません。実行または検証できない場合は、その旨を明確に伝えます。
  • 定量的な結果には、必ず不確実性と数値許容誤差を記載します。
  • ここに記載されたバージョン固有の詳細は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認します。
  • 費用が発生する操作、共有 GPU やクラウドクォータを消費する操作、個人データまたは患者データに触れる操作、取り消せない操作を行う前に、ユーザーに確認します。

関連スキル

  • cirq:Google の量子コンピューティングフレームワークです。
  • qiskit:Qiskit と IBM Quantum Runtime を使用して、量子回路を構築、シミュレーション、トランスパイル、実行します。

コメント