执行后端与参数
后端决定状态表示和门运算实现,设备决定在 CPU 或可用 GPU 上执行。相同线路在不同后端上应保持相同的量子语义,但精度、性能和可用功能可能不同。
import numpy as np
from unitarylab import Circuit
qc = Circuit(2)
result = qc.execute(
initial_state=None,
backend="torch",
device="cpu",
dtype=np.complex128,
shots=1,
seed=42,
backend_options=None,
)| 后端与设备 | 适用场景 |
|---|---|
torch + cpu(默认) | 大多数场景 |
torch + gpu | CUDA 或 Apple MPS |
numpy + cpu | 纯 NumPy 环境 |
cpp + cpu | C++ 门核 CPU 加速 |
cpp + gpu | 可选 CUDA C++ 后端 |
tensornet + cpu | 大比特数、低纠缠 MPS 模拟 |
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
initial_state | None | 状态向量或后端支持的初态;默认 $ |
backend | "torch" | torch、numpy、cpp 或 tensornet |
device | "cpu" | cpu 或后端支持的 gpu |
dtype | np.complex128 | 状态和门运算的复数精度 |
shots | 1 | 整条含测量线路的重复执行次数 |
seed | 42 | 线路测量随机种子;None 表示不固定 |
backend_options | None | 后端专属配置字典 |
CUDA C++ 后端通过 pip install "unitarylab[cuda]" 安装,需要兼容的 NVIDIA 驱动,不要求本地 CUDA Toolkit。Apple MPS 不支持 complex128,应使用 np.complex64。
seed=42 使线路内测量可复现;传 None 使用非固定随机采样。TensorNet 的 backend_options 支持 max_bond、cutoff 和 routing(auto、swap、mpo)。
result = qc.execute(
backend="tensornet",
backend_options={"max_bond": 128, "cutoff": 1e-10, "routing": "auto"},
)| TensorNet 选项 | 说明 |
|---|---|
max_bond | MPS 最大键维;越大通常越精确,也越耗内存 |
cutoff | 奇异值截断阈值 |
routing | 双比特门路由策略:auto、swap 或 mpo |
TensorNet 适合一维局域、低纠缠线路;高纠缠线路的键维可能快速增长,不能只凭量子比特数判断性能。
选择与排错
- 首次运行使用默认
torch+cpu,先确认结果正确。 - 需要纯 NumPy 依赖路径时使用
numpy;需要已编译门核时使用cpp。 - GPU 不可用、dtype 不受支持或可选扩展未安装时会在执行阶段报错,不会自动改用其他设备。
complex64占用更少内存但数值误差更大;涉及深线路或误差比较时优先使用complex128。- 比较后端时固定线路、初态、dtype、shots 和 seed。
相关页面
最后更新于