量子模拟器让你无需在硬件排队中等待或按次付费即可测试电路。但目前有六款主流模拟器可免费使用,你该选哪一个呢?以下是一份实用的梳理。
快速答案
| 模拟器 | 最适合 | 最大量子比特数(CPU) | GPU? |
|---|---|---|---|
| Qiskit Aer | 通用场景 | ~30(statevector) | ✅ AerCuda |
| Cirq Simulator | Cirq 电路、密度矩阵 | ~25 | ❌ |
| PennyLane default.qubit | QML、梯度 | ~20 | ✅ lightning.gpu |
| PennyLane lightning.qubit | 快速 CPU 模拟 | ~30 | ✅ lightning.gpu |
| NVIDIA CUDA-Q | 大型电路、速度 | ~34(单 GPU) | ✅ 原生 |
| Braket LocalSimulator | Braket 电路、免费 | ~25 | ❌ |
Qiskit Aer:主力工具
Qiskit Aer 是功能最完备的免费模拟器。它支持多种模拟方法:
- statevector_simulator:精确模拟最多约 30 个量子比特。内存按 2ⁿ 个复数增长(30 个量子比特需要 16 GB RAM)。
- qasm_simulator:基于采样(shot)的抽样,支持噪声模型
- density_matrix:模拟混合态和开放量子系统
- mps:矩阵乘积态(Matrix Product State)——可模拟纠缠受限的电路,最多可达数百个量子比特
- stabilizer:仅限 Clifford 电路,但能以多项式时间扩展到数千个量子比特
from qiskit_aer import AerSimulator
# Default: automatic method selection
sim = AerSimulator()
# Force a specific method
sim_sv = AerSimulator(method='statevector')
sim_dm = AerSimulator(method='density_matrix')
sim_mps = AerSimulator(method='matrix_product_state')
何时使用 Aer: 适用于任何 Qiskit 工作流、噪声建模,或当你希望紧密匹配 IBM 硬件行为时。
PennyLane:量子机器学习的最佳选择
PennyLane 在你需要可微分电路时大放异彩。它的 default.qubit 模拟器通过参数移位规则(parameter-shift rule)计算精确梯度,从而支持对量子电路进行基于梯度的优化:
import pennylane as qml
import numpy as np
dev = qml.device("default.qubit", wires=2)
@qml.qnode(dev)
def circuit(theta):
qml.RX(theta[0], wires=0)
qml.RY(theta[1], wires=1)
qml.CNOT(wires=[0, 1])
return qml.expval(qml.PauliZ(0))
# Automatic gradient computation
grad_fn = qml.grad(circuit)
theta = np.array([0.5, 1.2])
print(grad_fn(theta)) # exact gradient
若需要不带梯度的更快模拟,可使用 lightning.qubit(C++ 后端,比 default.qubit 快约 10 倍):
pip install pennylane-lightning
dev = qml.device("lightning.qubit", wires=20)
何时使用 PennyLane: 变分算法(VQE、QAOA)、量子机器学习,以及任何需要电路梯度的工作流。
NVIDIA CUDA-Q:当速度至关重要时
CUDA-Q 提供 GPU 加速的模拟,对于大型电路,其速度可比 CPU 模拟器快 100 到 10,000 倍。如果你有任何一块 NVIDIA GPU,那么对于 25 个以上量子比特的电路,这就是正确的选择:
import cudaq
@cudaq.kernel
def large_circuit(n: int):
qvec = cudaq.qvector(n)
h(qvec[0])
for i in range(n - 1):
cx(qvec[i], qvec[i + 1])
mz(qvec)
# Run on GPU (specify 'nvidia' target)
cudaq.set_target('nvidia')
counts = cudaq.sample(large_circuit, 30, shots_count=10000)
print(counts)
性能基准测试(GHZ 电路,28 个量子比特,1000 shots):
- Qiskit Aer CPU:约 45 秒
- PennyLane lightning.qubit:约 30 秒
- CUDA-Q(A100 GPU):约 0.8 秒
何时使用 CUDA-Q: 任何 25 个以上量子比特的电路、性能关键的模拟、多 GPU 工作负载。
Cirq:噪声建模与 NISQ 研究
Google Cirq 包含三种模拟器:
import cirq
# Exact statevector simulation
sim = cirq.Simulator()
# Density matrix with noise
noise_model = cirq.ConstantQubitNoiseModel(
cirq.depolarize(p=0.01)
)
noisy_sim = cirq.DensityMatrixSimulator(noise=noise_model)
# Clifford circuits only (but exponentially faster for stabilizer states)
clifford_sim = cirq.CliffordSimulator()
何时使用 Cirq: NISQ 噪声建模、稳定子(stabilizer)电路研究、Google AI Quantum 工作流。
Amazon Braket LocalSimulator:隔离性与可移植性
Braket SDK 包含一个免费的本地模拟器,它精确地镜像云端 API:
from braket.devices import LocalSimulator
from braket.circuits import Circuit
device = LocalSimulator()
circuit = Circuit()
circuit.h(0)
circuit.cnot(0, 1)
circuit.probability()
task = device.run(circuit, shots=1000)
result = task.result()
print(result.measurement_counts)
何时使用 Braket 本地模拟器: 你正在为 AWS 部署做开发,并希望本地开发/测试环境能与云端 API 保持一致。
HLQuantum 捷径
如果你需要在多个模拟器上运行同一个电路以进行基准测试或对比,HLQuantum 让这件事变得轻而易举:
import hlquantum as hlq
import time
qc = hlq.Circuit(28)
qc.h(0)
for i in range(27):
qc.cx(i, i + 1)
qc.measure_all()
for backend in ["qiskit", "pennylane", "cudaq"]:
t0 = time.time()
result = hlq.run(qc, shots=1000, backend=backend)
print(f"{backend}: {time.time() - t0:.2f}s")
一个电路,三个后端,结果可直接对比。