mcpField
A
alterlab-pennylane

alterlab-pennylane

github.com/alterlab-ieu开发7867 次安装5 周前更新
代码仓库

关于 alterlab-pennylane

alterlab-pennylane 是面向研究人员和开发者的 PennyLane 量子计算技能,涵盖参数化电路训练、混合量子经典模型及在模拟器和硬件上运行。

主要功能

  1. 01构建并检查量子电路
  2. 02求导并训练参数化电路
  3. 03创建 PyTorch 和 JAX 混合模型
  4. 04运行量子化学与变分算法
  5. 05切换模拟器和量子硬件

适用场景

  1. 01训练量子分类器
  2. 02运行 VQE 或 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 是一个量子计算库,可像训练神经网络一样训练量子计算机。它提供量子电路的自动微分、设备无关编程,以及与经典机器学习框架的无缝集成。

何时使用此技能

用户希望进行以下操作时,请使用此技能:

  • 对参数化电路求导并进行训练(参数移位、反向传播、伴随法)
  • 使用 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);请改用 Amazon Braket 访问 Rigetti QPU。

版本说明(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?请参阅 references/getting_started.md,了解安装、QNode、 设备、梯度以及首个优化循环。

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)
  • 梯度计算方法(反向传播、参数移位、伴随法)
  • 变分算法(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 (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 上设置 shots - 使用 @qml.qnode(dev, shots=N) 或 qml.set_shots;设备级 shots 已弃用
  4. 选择合适的编码方式 - 使数据编码与问题结构相匹配
  5. 谨慎初始化 - 使用较小的随机值,避免贫瘠高原
  6. 监控梯度 - 检查深层电路中是否存在梯度消失
  7. 缓存设备 - 重用设备对象,减少初始化开销
  8. 分析电路 - 使用 qml.specs() 分析电路复杂度
  9. 本地测试 - 提交到硬件前,先在模拟器上验证
  10. 使用模板 - 利用内置模板处理常见电路模式
  11. 尽可能编译 - 对性能关键型代码使用 Catalyst JIT

资源

属于 AlterLab Academic Skills 套件。

评论

支持 Markdown