mcpField
Q
qiskit-hardware

qiskit-hardware

github.com/tondevrel开发2444 次安装38 周前更新
代码仓库

关于 qiskit-hardware

面向 Qiskit 开发者的硬件操作指南,介绍在真实 IBM Quantum 后端运行量子算法、分析噪声及控制脉冲。内容还涉及硬件感知转译和误差缓解。

主要功能

  1. 01使用 Runtime Primitives 执行任务
  2. 02按硬件拓扑转译电路
  3. 03应用误差缓解方法
  4. 04定义自定义微波脉冲
  5. 05测量 T1、T2 等硬件特性

适用场景

  1. 01在 IBM Quantum 后端运行算法
  2. 02分析硬件噪声与校准数据
  3. 03为特定拓扑优化电路
  4. 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)。
  • 针对特定硬件拓扑(耦合映射)优化电路。
  • 在真实条件下评估量子优势。

参考文档

核心原则

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