Qiskit 是由 IBM 发起的开源量子计算 SDK,基于 Python 编写,提供从量子电路构建、转译优化、本地仿真到真实量子硬件执行的全链路能力。它解决的核心问题:量子算法研究缺乏统一、可验证的工程化工具——你可以用十几行代码构建一个纠缠态电路,先在 Aer 模拟器上验证逻辑正确性,再提交到 IBM Quantum 平台的真机运行,同一套代码、两种执行环境。2024 年发布的 1.0 完成架构重构,将模拟器(qiskit-aer)、IBM 运行时(qiskit-ibm-runtime)及各应用模块拆分为独立包;2025 年发布的 2.0 确立 Primitive(Sampler/Estimator)为唯一执行模型。Qiskit 同时也是量子机器学习(Qiskit Machine Learning)、量子化学(Qiskit Nature)等应用模块的底层框架。本篇按「速览 → 安装 → 上手 → 核心能力 → 生产部署 → 选型与版本 → 应用场景 → 误区 → 面试」组织,读者可按需跳读。
掌握 Qiskit 意味着你具备从量子电路表达、仿真验证到真机执行的完整工程能力——这是量子计算与 AI 交叉领域(量子机器学习、量子优化求解)最稀缺的技能栈之一。
目录
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 Qiskit:让量子算法从「论文公式」变成「可运行程序」
量子算法通常以酉矩阵、张量网络等数学形式描述,研发者手工编写电路极易出错,且缺乏标准的验证手段;各硬件厂商接口各异,算法难以在不同平台上迁移。对 AI 从业者而言,进入量子机器学习(量子核方法、变分量子电路)时第一道坎就是「如何把算法想法变成可执行、可检查的电路代码」。
Qiskit 把这条链路做成了统一 API:用 QuantumCircuit 构建电路,transpile() 自动优化并适配硬件,Aer 在经典计算机上提供含噪声模型的仿真,qiskit-ibm-runtime 对接 IBM 真实量子处理器。开发者在模拟器上验证的逻辑,可以在不改变电路定义的前提下提交到真机运行,这是研究量子算法的效率基础。
与 Cirq 侧重硬件时序控制、PennyLane 侧重可微编程不同,Qiskit 的核心气质是「完整闭环 + 开箱即用」:官方教程与教科书最全、社区量最大、IBM 量子硬件与错误缓解技术直接集成。对于需要快速验证算法想法、再规模化上真机的团队,Qiskit 是最低摩擦的选择。
安装与环境配置:3 步就绪
步骤一,准备 Python 环境。Qiskit 2.x 要求 Python 3.10 及以上,推荐 3.11/3.12;建议使用虚拟环境隔离项目依赖,避免与其他科学计算包冲突。
步骤二,安装核心包。注意 Qiskit 1.0 之后按职责拆包:qiskit 是核心库(电路构建、转译),qiskit-aer 负责本地仿真,qiskit-ibm-runtime 负责访问 IBM 云端量子硬件,三者需要分别安装。交互式学习可追加安装 Jupyter Notebook。
步骤三,验证安装。打印核心库版本号即可确认环境就绪;如需连接 IBM Quantum 平台(真机与云仿真),再执行一次账户配置,API Token 在 quantum.ibm.com 登录后于账户设置中生成。
python -m venv ~/qiskit-envsource ~/qiskit-env/bin/activate # Windows 用 qiskit-env\Scripts\activatepip install --upgrade pippip install qiskit qiskit-aer qiskit-ibm-runtimepython -c "import qiskit; print('Qiskit', qiskit.__version__)"
# 可选:配置 IBM Quantum 访问(真机与云仿真需要)from qiskit_ibm_runtime import QiskitRuntimeServiceQiskitRuntimeService.save_account( channel="ibm_quantum", token="你的_API_TOKEN_请运行前替换", # 在 quantum.ibm.com 账户设置中获取 set_default=True)
快速上手:5 分钟跑通第一个量子程序
最小可用流程:构建一个 2 量子比特电路,制造贝尔纠缠态,在 Aer 模拟器上运行并统计测量分布。该流程覆盖 Qiskit 的四个核心动作——创建电路、加门、测量、执行取结果,后续 VQE、QAOA 等真实算法都是它的扩展:
1. 启动 Jupyter Notebook(或创建 run.py 脚本),确认已激活包含 qiskit 与 qiskit-aer 的虚拟环境。
2. 创建 QuantumCircuit(2, 2):2 个量子比特 + 2 个经典比特。
3. 添加 qc.h(0) 对 q0 施加 Hadamard 门制造叠加态,再添加 qc.cx(0, 1) 以 q0 为控制、q1 为目标施加 CNOT,两比特进入纠缠。
4. 调用 qc.measure([0, 1], [0, 1]) 把两个量子比特的测量结果写入两个经典比特。
5. 以 AerSimulator() 为后端运行 1024 次,打印 counts 统计。
理想情况下结果只出现 00 与 11 且各占约一半——这是纠缠态的特征,也说明电路构建正确。进阶技巧:把同一电路交给 qiskit-ibm-runtime 的 SamplerV2,仅替换执行后端即可切到 IBM 真机,具体做法见「生产部署」一节。
from qiskit import QuantumCircuitfrom qiskit_aer import AerSimulator # 1. 构建电路:|00> → H → CNOT → 贝尔纠缠态qc = QuantumCircuit(2, 2)qc.h(0) # 叠加:q0 变为 (|0> + |1>) / √2qc.cx(0, 1) # 纠缠:q1 随 q0 翻转qc.measure([0, 1], [0, 1]) # 测量两个量子比特 # 2. 用 Aer 本地模拟器运行 1024 次result = AerSimulator().run(qc, shots=1024).result() # 3. 统计结果counts = result.get_counts()print(counts) # 理想结果约 {'00': 512, '11': 512}
核心能力详解:4 大支柱
支柱一·量子电路构建(DSL)。QuantumCircuit 是核心类,支持任意数量的量子比特与经典比特;门库覆盖单比特(H、X、Y、Z、S、T)与多比特(CX、CCX、SWAP)操作。Parameter 参数化电路允许数值绑定,是变分算法(VQE/QAOA)的基础;if_test、for_loop、while_loop 控制流指令提供经典条件执行能力,构成接近通用的量子编程模型。
支柱二·转译器(Transpiler)。transpile() 与 PassManager 负责把逻辑电路编译为硬件可执行的指令集电路(ISA circuit):逻辑比特映射到物理比特、任意门分解为硬件原生门集、插入 SWAP 路由解决拓扑限制、调度门时序。optimization_level 0-3 控制优化深度。转译质量直接影响真机结果保真度,是 Qiskit 工程价值最集中的部分。
支柱三·模拟与执行(Aer + Primitives)。Aer 提供 statevector、matrix_product_state、stabilizer 等多种仿真方法,其中 stabilizer 专用于 Clifford 电路的大规模模拟,并支持 GPU 加速(通过 cuQuantum/cuStateVec)。SamplerV2 与 EstimatorV2 是官方推荐的统一执行接口:Sampler 返回测量分布,Estimator 返回期望值;切换后端只需更换一行,即可从本地模拟器切到 IBM 云端真机。
支柱四·噪声建模与错误缓解。NoiseModel 可注入位翻转、退极化、读取错误等噪声,模拟真实 NISQ 硬件行为;qiskit-experiments 提供随机基准测试(RB)等协议校准门错误率。在生产任务中,Estimator 的 resilience_level 与测量错误缓解选项是获得可靠结果的基础,不可跳过。
生产部署与监控:从上线到运维
部署方式一:本地/私有集群模拟。qiskit-aer 支持多线程与 GPU 加速,适合算法回归与 CI 验证。建议把「电路能成功转译、模拟结果符合预期」做成自动化测试,在流水线中固定后端与 shots 参数,防止转译器升级导致算法结果漂移。
部署方式二:IBM Quantum 平台云端执行。通过 QiskitRuntimeService 对接平台,SamplerV2/EstimatorV2 提交采样与期望值任务。Session 模式适合 VQE/QAOA 这类量子-经典交替迭代的算法,保持会话上下文可避免每轮迭代重新排队;Batch 模式适合批量提交静态电路,提升吞吐。生产任务需按配额选择实例(instance),并根据精度需求设置 shots,平衡成本与统计误差。
可观测性:任务进度通过 job 状态轮询或 IBM Quantum 平台仪表盘跟踪,重点关注队列深度与后端错误率;提交前查看后端 target 与量子比特校准信息,选用错误率低的物理比特;对 Estimator 开启 resilience_level ≥ 1 做错误缓解;记录每次任务的元数据(电路深度、shots、后端名、版本号)用于结果审计与复现。
<p class="para-label">避坑清单:</p>
<ul class="dash-list"><li>Qiskit 1.0 后模拟器已拆分:只装 qiskit 本体无法使用 AerSimulator,必须同时安装 qiskit-aer;同理真机执行需安装 qiskit-ibm-runtime。</li><li>别照搬 0.x 教程:execute()、QuantumCircuit.run()、旧 IBMQ provider 等 API 在 1.x 弃用、2.0 移除,报错后优先查阅官方迁移指南而不是搜索旧帖。</li><li>真机任务必须转译:本地 Aer 会自动转译,但 IBM 真机要求电路匹配硬件门集与拓扑,提交前用 transpile(……, optimization_level=3) 显式转译并检查映射结果。</li><li>模拟结果不能直接等同真机结果:真实硬件存在门错误、读取错误与退相干,对 Estimator 开启错误缓解并结合量子比特校准数据选后端,再解读结果。</li></ul>
| 维度 | Qiskit | Cirq | PennyLane | Q# |
|---|---|---|---|---|
| 定位 | IBM 开源量子 SDK:电路构建、转译、模拟与真机执行一体化 | Google 开源量子框架:侧重 NISQ 硬件电路调度与精确时序 | Xanadu 量子机器学习框架:可微量子编程,深度集成 ML 库 | Microsoft 量子开发套件:Q# 语言 + Visual Studio + Azure Quantum |
| 编排范式 | QuantumCircuit + Transpiler + Primitive | Circuit + Device/Processor 调度器 | QNode 混合自动微分(量子-经典互导) | Q# 量子程序 + QIR + Azure Quantum |
| 类型约束 | Python 动态类型 | Python 动态类型 | Python + 张量(对接 PyTorch/TF) | 强类型语言(编译到 QIR) |
| 学习曲线 | 中等:教程与教科书最全,上手最快 | 中等偏高:文档相对少,偏硬件研究者 | 中等:ML 背景者易上手 | 偏高:需学习 Q# 新语言 |
| 生态集成 | Aer 模拟器、IBM Quantum 平台、应用包(ML/Nature/Optimization/Finance) | Google Quantum AI、OpenFermion、硬件调度 | 与主流 ML 框架无缝集成、Xanadu Cloud | Azure Quantum、Visual Studio 工具链 |
| 生产部署 | qiskit-ibm-runtime Session/Batch、GPU 模拟 | Google 云量子服务(实验性) | Xanadu Cloud + 本地模拟 | Azure Quantum 托管执行 |
| License | Apache 2.0 | Apache 2.0 | Apache 2.0 | MIT |
| 适合谁 | 量子算法研究者、量子-经典混合 ML 团队、企业 PoC | 硬件时序/门级调度研究者、Google 生态用户 | 把量子电路嵌进训练管线的 ML 工程师 | .NET/微软技术栈团队、Azure 用户 |
选型建议:想最快跑通量子-经典混合算法并直接上真实硬件,选 Qiskit;任务本质是「训练模型里嵌入量子层」且已深度使用 PyTorch,PennyLane 更顺滑;目标硬件是 Google 或需要精细时序控制,考察 Cirq;团队强依赖 .NET/Azure 生态,再考虑 Q#。
版本迭代
Qiskit 自 2017 年发布以来,从 0.x 时代的多组件架构(Terra/Aer/Aqua/Ignis)逐步收敛:1.0 将模拟器与应用模块拆为独立包并清理历史 API,2.0 确立 Primitives 为唯一执行模型。截至训练数据,最新正式版为 2.0,可能已有更新小版本。
| 版本 | 时间 | 变化 | 提升 |
|---|---|---|---|
| 0.46(0.x 终版) | 2023-12 | 0.x 系列收尾 | 完成 Primitive 早期落地,为 1.0 大规模 API 清理铺路 |
| 1.0 | 2024-02 | 首个 1.0 稳定版 | 移除多年弃用 API;qiskit-aer、qiskit-ibm-runtime、应用模块拆为独立包;Primitive 成为推荐执行方式 |
| 1.1 | 2024-05 | 1.0 后首个补强版 | 修复 1.0 回归问题;转译器与调度改进;新增电路分析方法 |
| 1.2 | 2024-08 | 功能增强 | 控制流与经典条件执行完善;大电路转译性能提升;新增若干 transpiler passes |
| 1.3 | 2024-11 | 2.0 前奏 | 转译性能持续优化;API 为大版本 2.0 做迁移准备;支持 Python 3.13 |
| 2.0 | 2025-03 | 2.0 大版本 | 移除 QuantumCircuit.run() 等遗留 API;全面转向 Primitives V2;Python 要求提升至 3.10+;依赖精简、性能提升 |
Qiskit 迭代主线是从「多组件拼装」走向「单一 SDK + 独立生态包」:1.0 确立 API 稳定基线,2.0 将 Primitive 定为唯一执行入口。Qiskit 是开发框架而非模型,无 MMLU 类公开评测榜单,其「性能」体现在转译吞吐与模拟规模上,故不提供分数对比。选型建议:新项目直接基于 2.x,并分别管理 qiskit、qiskit-aer、qiskit-ibm-runtime 三个依赖。
AI 应用场景
场景一:混合量子-经典机器学习(QML 研究)
阶段:特征映射与模型训练(参数化量子电路作可微层)
解决的问题:经典模型对高维特征组合的表达成本随维度增长急剧升高;Qiskit Machine Learning 提供的 VQC(变分量子分类器)与 QNN 可将量子电路嵌入 PyTorch 训练循环,实现量子-经典联合反向传播。
具体案例:官方 IRIS 示例将 4 维特征编码到 2 量子比特,VQC 在约 100 轮训练内达到 90% 左右测试准确率,完整训练在普通笔记本上数分钟完成,用于验证「从数据编码到梯度更新」的小规模 QML 管线可行性。
场景二:量子化学与材料模拟(VQE)
阶段:科学计算仿真(量子电路求解哈密顿量基态能量)
解决的问题:分子基态能量的精确求解(如 FCI 方法)随电子数指数增长;Qiskit Nature 的 VQE 用参数化电路逼近基态,把指数级问题转为多项式级变分优化。
具体案例:官方教程计算 H2 分子基态能量,在 Aer 模拟器上运行 VQE,结果与精确对角化误差控制在约 1e-3 Hartree 以内,单次完整计算在单机上数分钟内完成;这是量子化学算法「先在模拟器验证、再上含噪器件」的标准流水线。
场景三:组合优化求解(QAOA)
阶段:决策优化(将目标函数编码为哈密顿量,用浅层量子电路采样近似最优解)
解决的问题:调度、图划分等 NP-hard 问题缺乏多项式时间精确算法;QAOA 把 Max-Cut 等目标映射为 Ising 模型,用 p 层浅电路采样近似解,电路规模随问题规模线性增长。
具体案例:用 qiskit-optimization 在约 10 节点随机图上运行 QAOA,近似比随层数 p 提升并逼近精确解;相比遍历 2^10 种划分的经典暴力枚举,量子电路只需 10 个量子比特 + p 层门操作,在分钟级完成迭代,适合作为大规模组合优化的量子启发式基线。
常见误区
误区我以为 pip install qiskit 之后就能直接使用 AerSimulator 做本地仿真,结果 from qiskit_aer import AerSimulator 一直报 ModuleNotFoundError。
正解Qiskit 1.0 将模拟器拆分为独立包。qiskit 本体只包含电路构建、转译等核心逻辑;本地仿真需 pip install qiskit-aer,访问 IBM 真机需 pip install qiskit-ibm-runtime。三个包接口设计一致(都用 backend / primitive 概念),按需安装即可。
为何常见:0.x 时代 qiskit 是包含 Terra/Aer/Aqua 的一体包,网上大量旧教程仍基于旧安装方式,误导了初学者。
误区我以为在 AerSimulator 上验证通过的电路,直接提交给 IBM 量子处理器就能得到正确结果。
正解真机只有特定门集和受限的量子比特连接(拓扑)。电路必须经过转译:逻辑比特映射到物理比特、任意门分解为硬件原生门、插入 SWAP 路由、调度时序。Aer 模拟器会自动完成这些步骤,而提交真机时需显式调用 transpile 并检查映射结果。
为何常见:模拟器「过于智能」地把转译细节都处理掉了,初学者在模拟环境里完全感知不到这层编译过程。
误区我以为只要把经典问题改写成量子电路部署上线,所有计算任务都会自动变快。
正解量子优势仅在特定问题上有理论保证,如 Shor 算法的大数分解、Grover 算法的非结构化搜索;组合优化与机器学习类问题目前以探索性研究为主。当前 NISQ 硬件噪声大、量子比特数有限,Qiskit 的作用是正确表达与验证算法,而不是「一键加速」,通用加速要等容错量子计算时代。
为何常见:媒体对「量子霸权」实验的简化报道,把特定问题的胜利泛化为通用计算加速,形成普遍误解。
误区我照着 0.x 时代的教程写 execute(qc, backend) 这类代码,在 1.x/2.x 环境里频繁报错,怀疑是环境装错了。
正解Qiskit 1.0 移除了运营多年的弃用 API,2.0 又删除了 QuantumCircuit.run()。新代码应使用 Primitive 接口——SamplerV2 读取测量分布、EstimatorV2 计算期望值。官方文档提供版本选择器与迁移指南,遇到 API 报错应先查迁移说明而不是搜索旧博客。
为何常见:搜索引擎里旧教程排名靠前,而 Qiskit 版本演进极快(2024 年 1.0、2025 年 2.0),教程更新速度跟不上版本节奏。
误区我以为本地模拟结果接近 {'00': 512, '11': 512},IBM 真机也会给出同样漂亮的统计分布。
正解真机受退相干、门错误与读取错误影响,测量分布会偏离理想值且批次间抖动明显。生产级分析应对 Estimator 开启错误缓解(resilience_level),对采样任务开启测量错误缓解,并结合量子比特校准数据选择错误率低的后端,不能直接用模拟结果推断真机行为。
为何常见:初学者先用模拟器验证电路,从未接触过真实噪声模型,低估了理想仿真与实际硬件之间的鸿沟。
面试题
Q1. Qiskit 中用于构建量子电路的核心类是哪一个?
- A.QuantumCircuit← 正确答案
- B.QuantumRegister
- C.AerSimulator
- D.QuantumProgram
答案:A。QuantumCircuit 是承载量子比特、经典比特与门操作的核心类。QuantumRegister 只是量子比特的容器,AerSimulator 是执行后端,Qiskit 中不存在 QuantumProgram 类。
Q2. 在 Qiskit 中,对量子比特执行测量操作后,其状态会发生什么变化?
- A.保持原叠加态不变
- B.坍缩到某一计算基态← 正确答案
- C.自动纠错并恢复原态
- D.变为最大纠缠态
答案:B。测量会使叠加态以一定概率坍缩到某个计算基态(如 |0> 或 |1>),这是 Qiskit 中 measure 操作后的标准行为,也是为什么需要用多次 shots 统计概率分布的原因。
Q3. Qiskit 1.0 之后官方推荐的标准执行接口是?
- A.QuantumCircuit.run()
- B.AerSimulator.run()
- C.Sampler 与 Estimator← 正确答案
- D.OpenQASM 编译指令
答案:C。Primitives(Sampler 返回测量分布、Estimator 返回期望值)是 Qiskit 官方推荐的标准执行接口。QuantumCircuit.run() 在 2.0 中被移除,AerSimulator.run() 仅限本地模拟,OpenQASM 不是执行接口。
Q4. 量子电路转译(transpile)的职责包括哪些?
- A.将逻辑电路映射到目标硬件拓扑← 正确答案
- B.将任意门分解为硬件原生门集← 正确答案
- C.直接执行电路测量并输出结果
- D.优化电路深度与门数提升保真度← 正确答案
答案:ABD。转译的核心职责是拓扑映射、门集分解与电路优化,其目标是匹配硬件约束并提升保真度。执行测量属于运行(run)阶段而非转译阶段,故 C 错误。
Q5. Qiskit 生态中负责在经典计算机上模拟量子电路的组件是?
- A.Qiskit Aer 本地模拟器← 正确答案
- B.Qiskit Nature 化学模块
- C.Qiskit Runtime 云服务
- D.Qiskit Transpiler 转译器
答案:A。qiskit-aer 提供 Statevector、MPS、Stabilizer 等仿真方法,在经典计算机上模拟电路运行。Nature 是量子化学应用模块,Runtime 是云端执行服务,Transpiler 负责编译优化而非模拟。
Q6. 以下哪个 API 在 Qiskit 2.0 中被移除?
- A.SamplerV2 采样接口
- B.QuantumCircuit.run()← 正确答案
- C.transpile() 转译函数
- D.AerSimulator 模拟器
答案:B。Qiskit 2.0 将 Primitives 定为唯一执行入口,移除了 QuantumCircuit.run() 等遗留 API。SamplerV2 是 2.0 主推的新接口,transpile() 与 AerSimulator 仍然保留。
Q7. 要安装 Qiskit 核心库并支持本地仿真,正确的命令组合是?
- A.pip install qiskit 核心库
- B.pip install qiskit-aer 模拟器
- C.pip install qiskit qiskit-aer← 正确答案
- D.pip install qiskit-terra 旧包
答案:C。Qiskit 1.0 之后核心库与模拟器分属两个包,需同时安装 qiskit 与 qiskit-aer 才能「构建 + 仿真」。qiskit-terra 是 0.x 时代的旧包名,D 选项已废弃。
Q8. Qiskit Primitive(Sampler/Estimator)相比直接运行电路的优势包括哪些?
- A.统一接口切换模拟器与真机← 正确答案
- B.内置错误缓解与噪声处理选项← 正确答案
- C.自动生成量子比特配额
- D.可完全消除测量噪声影响
答案:AB。Primitives 只需更换 backend 即可在 Aer 与 IBM 真机间切换,且 Estimator 支持 resilience_level 等错误缓解配置。Qiskit 没有「自动生成配额」功能;错误缓解只能降低而非完全消除噪声影响,故 C、D 错误。
Q9. 关于 Qiskit 转译,下列说法正确的是?
- A.转译后的电路无需测量即可直接读出结果
- B.转译负责匹配硬件门集与拓扑约束← 正确答案
- C.转译器只能作用于模拟器后端
- D.转译会移除所有量子门操作
答案:B。转译的核心职责是把逻辑电路编译为符合目标硬件门集与拓扑约束的指令集电路。测量是读出结果的必要步骤,转译对模拟器与真机都适用,且不会移除逻辑门,故 A、C、D 均错误。
Q10. 下列哪些门是单量子比特门?
- A.H 门(Hadamard 操作)← 正确答案
- B.X 门(Pauli-X 翻转)← 正确答案
- C.CNOT 门(受控非操作)
- D.CCNOT 门(双受控非)
答案:AB。H 门与 X 门都作用于单个量子比特。CNOT 是双量子比特门(控制 + 目标),CCNOT(Toffoli)是三量子比特门,二者都属于多比特门。