关于 qiskit-hardware
面向 Qiskit 开发者的硬件操作指南,介绍在真实 IBM Quantum 后端运行量子算法、分析噪声及控制脉冲。内容还涉及硬件感知转译和误差缓解。
主要功能
- 01使用 Runtime Primitives 执行任务
- 02按硬件拓扑转译电路
- 03应用误差缓解方法
- 04定义自定义微波脉冲
- 05测量 T1、T2 等硬件特性
适用场景
- 01在 IBM Quantum 后端运行算法
- 02分析硬件噪声与校准数据
- 03为特定拓扑优化电路
- 04通过脉冲定义实验信号
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tondevrel/ scientific-agent-skills --skill qiskit-hardware安装后在 Claude Code 中输入/qiskit-hardware确认已加载。
详细介绍
Qiskit - 真实硬件与脉冲控制
从模拟器转向真实硬件,需要转变思维方式。你不再使用完美的“理想”量子比特,而是要面对会受到退相干、读出错误和串扰影响的超导电路。本指南介绍如何充分利用含噪中等规模量子(NISQ)设备开展科学研究。
适用场景
- 在真实的 IBM Quantum 后端上执行量子算法。
- 表征硬件噪声(T1、T2 弛豫时间)。
- 实施错误缓解以提高结果准确性。
- 使用 Qiskit Pulse 定义自定义微波脉冲(OpenPulse)。
- 针对特定硬件拓扑(耦合映射)优化电路。
- 在真实条件下评估量子优势。
参考文档
- IBM Quantum 学习资源:https://learning.quantum.ibm.com/
- Qiskit Runtime 文档:https://docs.quantum.ibm.com/run
- Qiskit Pulse 指南:https://docs.quantum.ibm.com/build/pulse
- 搜索模式:
QiskitRuntimeService、Sampler、Estimator、transpile、InstructionScheduleMap
核心原则
1. Qiskit Runtime(原语)
与硬件交互的现代方式。你无需发送原始电路,而是使用原语:
- Sampler:返回准概率(比特串)。
- Estimator:返回可观测量的期望值(例如能量)。
2. 转译(硬件映射)
物理后端只支持一小组“基门”(例如 rz、x、sx、ecr)。转译器会将抽象数学运算改写为这些特定指令,并根据错误率将虚拟量子比特映射到物理量子比特。
3. 错误缓解
与需要数千个量子比特的错误纠正不同,错误缓解使用统计技巧(例如 TREX 或 ZNE),在执行后“清理”结果。
快速参考:连接硬件
安装
pip install qiskit-ibm-runtime
设置和作业执行
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
# 1. Initialize service (requires API key from quantum.ibm.com)
# service = QiskitRuntimeService(channel="ibm_quantum", token="YOUR_TOKEN")
service = QiskitRuntimeService() # Uses saved credentials
# 2. Select backend
backend = service.least_busy(operational=True, simulator=False)
# 3. Run job using Primitives
sampler = Sampler(backend=backend)
job = sampler.run([my_circuit])
result = job.result()
重要规则
✅ 应该做
- 检查校准数据 - 后端每天都在变化。选择量子比特前,务必检查
backend.properties()中的最新错误率。 - 使用“会话” - 将多个相关作业放入一个
RuntimeSession中,以缩短队列等待时间。 - 设置 optimization_level - 在硬件上使用等级 3,以启用高级路由和门融合。
- 应用读出缓解 - 读出(将 0 测为 1)是最大的错误来源。在原语中使用
resilience_level=1。 - 使用动态解耦(DD) - 为“空闲”的量子比特添加脉冲,防止它们在等待其他门时丢失状态。
❌ 不应该做
- 不要使用 execute() - 旧的
qiskit.execute已不再用于硬件。请使用Sampler和Estimator。 - 不要运行过深的电路 - NISQ 设备的相干性有限。如果电路深度 > 50-100,结果很可能只是纯噪声。
- 不要忽略耦合映射 - 如果强制对两个物理上未连接的量子比特执行 CNOT,转译器会添加许多“SWAP”门,从而增加错误。
- 不要使用 qasm_simulator 进行硬件准备 - 请使用
FakeBackend对象(例如FakeManilaV2),它们能在本地调试时模拟真实硬件噪声。
面向硬件的转译
映射到物理量子比特
from qiskit import transpile
# Basis gates for a specific backend
basis_gates = backend.operation_names
coupling_map = backend.coupling_map
# Optimized transpilation
optimized_circ = transpile(my_circuit,
backend=backend,
optimization_level=3,
initial_layout=[0, 2, 4]) # Manual qubit selection
高级错误缓解
Estimator 中的弹性等级
from qiskit_ibm_runtime import EstimatorV2 as Estimator, EstimatorOptions
options = EstimatorOptions()
# resilience_level 0: No mitigation
# resilience_level 1: Readout mitigation (TREX)
# resilience_level 2: ZNE (Zero Noise Extrapolation) - expensive but accurate
options.resilience_level = 1
estimator = Estimator(backend=backend, options=options)
低层级:Qiskit Pulse(OpenPulse)
定义自定义微波信号
from qiskit import pulse
from qiskit.circuit import Parameter
# Define a Gaussian pulse
amp = Parameter('amp')
with pulse.build(backend=backend, name='custom_pulse') as schedule:
pulse.play(pulse.Gaussian(duration=160, amp=amp, sigma=40), pulse.drive_channel(0))
# Attach pulse to a gate
my_circuit.add_calibration('my_gate', [0], schedule, params=[amp])
实用工作流
1. 在设备上寻找“最佳”量子比特
def get_best_qubits(backend, n_qubits):
"""Finds a linear chain of qubits with lowest error rates."""
props = backend.properties()
# Logic to parse gate_error and readout_error from props
# and find a connected subgraph with minimal noise.
pass
2. 使用 Runtime 在硬件上运行 VQE
from qiskit_ibm_runtime import Session, EstimatorV2 as Estimator
def run_hardware_vqe(ansatz, hamiltonian, backend):
with Session(backend=backend) as session:
estimator = Estimator(session=session)
# Standard optimization loop (using SciPy)
# Each 'step' runs a job within the same session
pass
3. 测量 T1 时间(弛豫)
def t1_experiment(qubit, delay_times):
circuits = []
for t in delay_times:
c = QuantumCircuit(qubit + 1)
c.x(qubit) # Flip to |1>
c.delay(t, qubit, unit='us') # Wait
c.measure_all()
circuits.append(c)
# Execute on hardware and fit decay curve
性能优化
1. 作业批处理
在单次 run() 调用中提交多个电路,以避免重复初始化开销。
2. 转译器 Pass Manager
创建自定义转译阶段,以精确控制电路的修改方式。
from qiskit.transpiler import PassManager
from qiskit.transpiler.passes import Unroller, BasicSwap
# custom_pm = PassManager([Unroller(['u3', 'cx']), BasicSwap(coupling_map)])
常见问题与解决方案
队列等待时间
真实硬件需求旺盛。
# ✅ Solution:
# 1. Use the 'least_busy' helper.
# 2. Check your IBM Quantum dashboard for reservation windows.
# 3. Use Runtime Sessions to group your jobs.
“退极化”结果
你的直方图看起来像一条平线(随机噪声)。
# ✅ Solution:
# 1. Reduce circuit depth.
# 2. Use 'optimization_level=3'.
# 3. Apply Error Mitigation (resilience_level=1+).
# 4. Check if the backend is currently undergoing maintenance/calibration.
频率冲突
两个相邻的量子比特频率相近,导致“串扰”。
# ✅ Solution:
# Select qubits that are physically separated or have
# significantly different frequencies in backend.properties().
Qiskit Hardware 是量子理论与严酷的物理现实交汇之处。掌握这些工具,你就能在当今充满噪声的设备上突破可能性的边界,为容错时代铺平道路。
评论
支持 Markdown