首页/博客/免费量子模拟器对比:Qiskit Aer vs Cirq vs PennyLane vs CUDA-Q
SimulatorsPerformanceGPU

免费量子模拟器对比:Qiskit Aer vs Cirq vs PennyLane vs CUDA-Q

对主流免费量子模拟器的实用对比——性能、量子比特上限、GPU 支持,以及各自的适用场景。

FreeQuantumComputing
·· 7 min read

量子模拟器让你无需在硬件排队中等待或按次付费即可测试电路。但目前有六款主流模拟器可免费使用,你该选哪一个呢?以下是一份实用的梳理。

快速答案

模拟器最适合最大量子比特数(CPU)GPU?
Qiskit Aer通用场景~30(statevector)✅ AerCuda
Cirq SimulatorCirq 电路、密度矩阵~25
PennyLane default.qubitQML、梯度~20✅ lightning.gpu
PennyLane lightning.qubit快速 CPU 模拟~30✅ lightning.gpu
NVIDIA CUDA-Q大型电路、速度~34(单 GPU)✅ 原生
Braket LocalSimulatorBraket 电路、免费~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")

一个电路,三个后端,结果可直接对比。