软件栈与量子云:你最熟悉的那一层
10.1 量子软件栈和云计算的对应关系
这一章从你熟悉的云计算切入。量子软件栈可以借助 IaaS、SDK、作业调度等概念理解,但这只是职责类比,不是产品能力的一一对应:你不能把一个未知量子态像虚拟机一样随意快照、复制和热迁移。
| 量子计算层次 | 包含什么 | 云计算类比 |
|---|---|---|
| 应用层 | 量子化学软件、金融优化工具、行业解决方案 | SaaS |
| 算法与库 | 算法库、纠错库、行业算法模板 | 中间件、算法库 |
| 开发框架(SDK) | Qiskit、Cirq、PennyLane、本源 pyQPanda 等 | 云 SDK、开发框架 |
| 编译器 | 把逻辑线路翻译成硬件原生门,适配比特拓扑 | 编译器、JIT |
| 云接入与调度 | 任务排队、资源分配、计费、API | 云控制台、作业调度 |
| 控制系统 | 脉冲生成、校准、实时反馈 | 固件、驱动 |
| 硬件 | 量子芯片、制冷机、测控设备 | IaaS 底层硬件 |
10.2 你的第一个量子程序
下面用 IBM 开源的 Qiskit 写一个制造贝尔态的程序。即使你没有量子计算机,也可以在自己电脑上用模拟器运行。
安装(需要 Python 环境):
pip install qiskit qiskit-aer
代码:
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
qc = QuantumCircuit(2, 2) # 2 个量子比特,2 个经典比特
qc.h(0) # 对第 0 号比特做 H 门:制造叠加
qc.cx(0, 1) # CNOT:0 号控制,1 号目标,制造纠缠
qc.measure([0, 1], [0, 1]) # 测量,结果写入经典比特
sim = AerSimulator()
job = sim.run(transpile(qc, sim), shots=1000)
print(job.result().get_counts())
# 输出大约是:{'00': 500 左右, '11': 500 左右}
逐行理解:
- 创建一个包含 2 个量子比特和 2 个经典比特的线路;
- h(0):对 0 号量子比特做 Hadamard 门;
- cx(0, 1):做 CNOT 门;
- measure:把量子比特的测量结果存入经典比特;
- transpile:把线路「编译」成模拟器或硬件支持的形式;
- shots=1000:运行 1000 次并统计结果。
在这个理想模拟器中,结果只会出现 00 和 11,各占约一半。你完成的是纠缠态的经典数学模拟,并没有在 PC 上物理制造量子纠缠;而且仅凭这一组 Z 基测量计数不能独立验证纠缠(见第 4 章)。代码示例使用 QuantumCircuit、AerSimulator 的接口形式;安装时请记录实际 Python、qiskit、qiskit-aer 版本,不能把未锁定版本的安装命令当作永久兼容保证。
先避开一个常见坑:Qiskit 的比特顺序
第 5 章手算线路按「控制比特在左、目标比特在右」书写。Qiskit 默认线路图中 q0 在上,但在这里 measure([0,1], [0,1]) 映射产生的计数字符串中,c1 在左、c0 在右;状态向量的标签同样通常写成 |q1 q0>。这不是物理定律改变,而是软件的显示约定。[R2]
| 操作(从两个零开始) | q0 | q1 | Qiskit 计数字符串 |
|---|---|---|---|
| 只做 qc.x(0) | 1 | 0 | 01 |
| 只做 qc.x(1) | 0 | 1 | 10 |
| x(0) 后做 cx(0,1) | 1 | 1 | 11 |
贝尔态的 00、11 左右对称,恰好会掩盖位序错误。调试时先运行不对称的 x(0) 测试,再解释复杂线路;额外经典寄存器及不同结果数组接口也可能改变展示方式,不要凭界面上下位置猜字符串位序。
再做一个实验:把相位变成可读的概率
把上面代码里创建 qc 到测量前的部分,分别换成下面三个小线路;每次都从新建的 |0⟩ 出发,经典寄存器也改为 1 位,最后调用 qc.measure(0,0):
# 实验 A:两次 H,中间没有测量
qc = QuantumCircuit(1, 1)
qc.h(0)
qc.h(0)
# 理想最终测量:100% 为 0
# 实验 B:H、Z、H,把相对相位翻转变成比特翻转
qc = QuantumCircuit(1, 1)
qc.h(0)
qc.z(0)
qc.h(0)
# 理想最终测量:100% 为 1
# 实验 C:中间测量破坏相干,再做 H
qc = QuantumCircuit(1, 1)
qc.h(0)
qc.measure(0, 0)
qc.h(0)
# 最后再次 qc.measure(0,0):最终 0/1 各约一半
上面 A、B、C 三段是独立实验,不是一起顺序粘贴的完整程序;应一次选一段,再接上测量与模拟器运行部分。实验 C 最后的测量会覆盖同一个经典位,因此这里统计的是最终结果,而非两次测量历史。
本轮代码实测(2026-10-27):Python 3.13.12、Qiskit 2.6.1、qiskit-aer 0.18.2,使用理想 Aer 模拟器。上方完整贝尔态程序的 1000 shots 得到 00:504 次、11:496 次。另以 10000 shots、seed_simulator=42 校验:H-H 全为 0,H-Z-H 全为 1,H-中间测量-H 得到 0:5080 次、1:4920 次;只做 x(0) 的两比特线路全为 01,贝尔态得到 00:4932 次、11:5068 次。这些是指定软件环境下的模拟结果,不是真机性能指标,也不要求换版本后随机计数逐项相同。
10.3 量子编译器在做什么
你写的线路是「逻辑层」的,真实硬件有两个限制:
- 原生门集有限:比如某台硬件只支持特定的旋转门和某种双比特门,H 门要拆成它们的组合;
- 连接拓扑受限:超导芯片上不是任意两个比特都能直接做 CNOT,不相邻时要插入额外的 SWAP 操作「搬运」状态。
编译器还要做优化:合并、消去冗余的门,尽量缩短线路深度,因为线路越长,噪声累积越多。这和经典编译器做指令调度、寄存器分配、死代码消除的思路很相似。
10.4 量子云:不用买机器也能用量子计算机
和云计算一样,绝大多数用户不会自己买量子计算机,而是通过云平台按需使用:
| 平台 | 提供方 | 特点 |
|---|---|---|
| IBM Quantum Platform | IBM | Qiskit 生态;后端可用性、访问资格及额度以当期平台说明为准 |
| Amazon Braket | AWS | 多硬件接入,可调用多家厂商的量子计算机 |
| Azure Quantum | Microsoft | 接入多家硬件,和 Azure 云生态整合 |
| Google Quantum AI | 以研究合作为主,Cirq 框架 | |
| 本源量子云 | 本源量子 | 国产超导量子计算机,如本源悟空系列 |
| 天衍量子计算云平台 | 中电信量子集团 | 运营商体系,天衍系列整机 |
使用流程基本是:注册账号 → 获取 API Token → 用 SDK 写线路 → 选择后端(模拟器或真机)→ 提交任务排队 → 获取结果。是不是和调用任何一个云 API 差不多?
10.5 模拟器 vs 真机
| 对比项 | 模拟器 | 真实量子计算机 |
|---|---|---|
| 运行在哪 | 你的电脑或云服务器(经典) | 真实量子硬件 |
| 规模约束 | 稠密态向量随 2^n 增长;稳定子、张量网络等方法对适配的线路可模拟更多比特,不能给所有模拟器一个固定上限 | 同时受物理规模、连接、错误率、可运行深度与可访问资源限制 |
| 噪声 | 此处示例无噪声;可选择噪声模型,但不能完整复刻设备所有漂移 | 包含真实噪声、漂移及读出误差 |
| 适合做什么 | 学习、调试、小规模算法与数学验证 | 真实实验、设备性能及噪声测试 |
| 成本 | 小规模通常低;大规模精确模拟也可能昂贵 | 按后端、任务、时长或采样次数计费,需查实际服务条款 |
建议学习路径:先在模拟器上把概念跑通,再去真机上体验噪声的影响。
10.6 从一段代码到一次可复现的云实验
从云工程视角,量子作业更接近带排队和设备约束的批处理任务,而不是一个实时返回的普通 Web API:
- 固定输入:保留原始线路、参数、测量基和随机种子;模拟器种子只固定伪随机采样,不代表真机能固定测量结果。
- 选择后端:说明是理想模拟器、含噪模拟器还是物理设备;记录目标门集、连接图和校准信息。
- 编译留痕:保存编译后的物理比特映射、双比特门数和线路深度,同一逻辑线路在不同后端的代价可能完全不同。
- 执行留痕:记录 shots、作业标识、提交时间、排队时间、执行时间以及失败/重试次数。访问令牌保存在安全的凭据管理位置,不写进共享教材或代码。
- 统计留痕:输出计数、期望值和误差范围;说明是否做误差缓解、丢弃了多少样本,不能只展示处理后最好的一次。
- 对照实验:同等精度、同样输入,与合适的经典方法比较总时长和总成本,而不只比较 QPU 上的几微秒。
建议的最小实验记录是一行:软件版本 + 原始/编译线路 + 后端与校准时间 + shots + 结果统计 + 不确定度 + 处理方法。这相当于把机器学习实验的可复现习惯迁移到量子编程中。
本章小结
- 量子软件栈可以借助云计算分层理解,但量子态不能像虚拟机或内存一样任意复制与迁移。
- 用 Qiskit 可以模拟纠缠线路;这不等于在 PC 上制造物理纠缠。读计数前要核对经典位映射和字符串位序。
- 量子编译器负责适配原生门集和比特拓扑,并缩短线路深度。
- 量子云让用户无需购买硬件即可按需使用量子计算机。
- 模拟器适合学习,真机适合体验真实噪声。
本章自测(5 题)
本章共 14 道练习题(含多选与计算题),去微我刷题完整练习 ›