资讯动态

Cirq 量子硬件集成实战:设备抽象、校准选比特与多服务商真机运行

发布时间:2026/9/9 20:06:58 来源:尧图企业网站定制
Cirq 量子硬件集成实战设备抽象、校准选比特与多服务商真机运行【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills本文是面向量子程序员的 Cirq 硬件接入指南聚焦于如何在 Cirq 中表示真实量子处理器、利用校准数据挑选最优量子比特并打通 Google Quantum AIcirq-google、IonQ、Azure Quantum、AQT 与 Pasqal 等多家云服务商的真机/模拟器提交链路。读完你将掌握device.validate_circuit校验、基于标定误差的选比特策略、面向目标门集的编译优化以及一套可直接复制的多厂商作业提交模板。本主题是 Cirq skill 六大核心能力中的 Hardware Integration 分支安装、版本与供应商信息以 skills/cirq/SKILL.md 与依赖清单 tests/skill-requirements.toml 为准。一、为什么需要硬件集成这一层Cirq 电路默认在理想量子比特如cirq.LineQubit上描述算法逻辑上并不关心执行载体。但当目标切换为真实处理器时会遇到三类在模拟中不存在的问题处理器物理量子比特的连接拓扑受限两比特门只能施加在连通边上、原生门集受限任意旋转门必须先编译成设备的 native gates、以及每个量子比特错误率各不相同且随时间漂移。硬件集成层的任务就是用统一的抽象把这些不理想封装起来——用device描述拓扑与门集、用calibration提供实时错误率、用sampler/service屏蔽各厂商 API 差异。从 SKILL.md 可知Cirq 官方按供应商拆分为cirq-google、cirq-ionq、cirq-aqt、cirq-pasqal与azure-quantum[cirq]五个分发包它们共享同一套circuit → sampler/run → result接口哲学。二、设备表示层Device、DeviceMetadata 与校验协议2.1 自定义设备类硬件集成的基础是设备抽象。Cirq 中的设备既要携带拓扑信息也要能对电路逐操作做合法性裁决。下面的最小设备实现维护一份量子比特集合与一张连通表并在validate_operation中强制两比特门的两端必须物理相连import cirq # Define device with connectivity class MyDevice(cirq.Device): def __init__(self, qubits, connectivity): self.qubits qubits self.connectivity connectivity property def metadata(self): return cirq.DeviceMetadata( self.qubits, self.connectivity ) def validate_operation(self, operation): # Check if operation is valid on this device if len(operation.qubits) 2: q0, q1 operation.qubits if (q0, q1) not in self.connectivity: raise ValueError(fQubits {q0} and {q1} not connected)cirq.DeviceMetadata的作用是把设备长什么样量子比特集合 邻接关系结构化地暴露出去使下游的选比特、路由与校验代码不必针对某一家硬件写死。真实处理器一般不用手工继承Device而是直接使用供应商封装好的设备对象。2.2 读取真实设备的拓扑与校验电路Google Quantum AI 处理器Sycamore、Weber、Willow 等在 Cirq 中可直接通过cirq_google.Sycamore等静态设备对象访问其元数据包含完整 qubit 集与一张 networkx 图可遍历邻居、统计连通度并对整条电路做提交前校验# Check device metadata device cirq_google.Sycamore # Get qubit topology qubits device.metadata.qubit_set print(fAvailable qubits: {len(qubits)}) # Check connectivity for q0 in qubits: neighbors device.metadata.nx_graph.neighbors(q0) print(f{q0} connected to: {list(neighbors)}) # Validate circuit against device try: device.validate_circuit(circuit) print(Circuit is valid for device) except ValueError as e: print(fInvalid circuit: {e})device.validate_circuit(circuit)是提交前的最后一道防线它会沿电路逐操作调用validate_operation凡出现不在 qubit 集合上的操作、施加在非连通边上的两比特门、或设备不支持的门都会抛出ValueError。这与模拟/编译阶段的用法一致——simulation.md 中 QVM 虚拟设备同样通过device.validate_circuit(circuit)保证仿真遵守真实拓扑。2.3 设备能力自检面对一个未知设备对象时可以用统一的反射式工具一次性打印出关键约束def print_device_info(device): Print device capabilities and constraints. print(fDevice: {device}) print(fNumber of qubits: {len(device.metadata.qubit_set)}) # Gate support print(\nSupported gates:) if hasattr(device, gateset): for gate in device.gateset.gates: print(f - {gate}) # Connectivity print(\nConnectivity:) graph device.metadata.nx_graph print(f Edges: {graph.number_of_edges()}) print(f Average degree: {sum(dict(graph.degree()).values()) / graph.number_of_nodes():.2f}) # Duration constraints if hasattr(device, gate_durations): print(\nGate durations:) for gate, duration in device.gate_durations.items(): print(f {gate}: {duration})输出中的三个维度对应三类编译输入门集决定用什么 Transformer 做原生门分解连通图决定是否需要插入 SWAP 完成路由门时长用于估算整体深度是否落在退相干T1/T2可容忍范围内。对 Sycamore 这类GridQubit网格芯片print_device_info还能自然扩展为按 row/col 排布的错误率热力图类似 noise.md 中的plot_noise_heatmap。三、量子比特选择从能用到好用处理器上并非所有量子比特质量相同标定数据揭示了巨大的错误率差异。选比特的两条实用路线分别是单比特保真度优先与拓扑连通优先。3.1 基于标定错误率的 Top-N 选比特通过 Quantum Engine 拉取处理器实时标定按单比特门随机基准RB平均错误率排序挑出错误率最低的 N 个比特import cirq_google # Get calibration metrics import os import cirq_google as cg engine cg.Engine(project_idos.environ[GOOGLE_CLOUD_PROJECT]) processor engine.get_processor(weber) calibration processor.get_current_calibration() # Find qubits with lowest error rates def select_best_qubits(calibration, n_qubits): Select n qubits with best single-qubit gate fidelity. qubit_fidelities {} for qubit in calibration.keys(): if single_qubit_rb_average_error_per_gate in calibration[qubit]: error calibration[qubit][single_qubit_rb_average_error_per_gate] qubit_fidelities[qubit] 1 - error # Sort by fidelity best_qubits sorted( qubit_fidelities.items(), keylambda x: x[1], reverseTrue )[:n_qubits] return [q for q, _ in best_qubits] best_qubits select_best_qubits(calibration, n_qubits10)single_qubit_rb_average_error_per_gate是 Google 标定指标名含义为每次单比特门操作的平均错误率。把保真度定义为1 - error后降序取前 N即可在保证质量的前提下物色候选。同一思路可延伸到两比特门指标如two_qubit_..._error因为两比特门通常才是错误主导项。3.2 拓扑感知的连通选比特只追求低错误率可能选出一堆互不相邻的比特导致两比特门无法放置。select_connected_qubits从设备连通图中任意节点出发用 networkx 的 ego-graph 扩展出一片能容纳 N 个且互相连通的比特区域def select_connected_qubits(device, n_qubits): Select connected qubits forming a path or grid. graph device.metadata.nx_graph # Find connected subgraph import networkx as nx for node in graph.nodes(): subgraph nx.ego_graph(graph, node, radiusn_qubits) if len(subgraph) n_qubits: return list(subgraph.nodes())[:n_qubits] raise ValueError(fCould not find {n_qubits} connected qubits)nx.ego_graph(graph, node, radiusn_qubits)返回以该节点为中心、距离不超过 radius 的诱导子图对网格型芯片而言这通常能圈出一块近似方形或条形的连通区域。工程上推荐先按 3.1 过滤出错误率可接受的白名单再在由白名单导出的子图上运行 3.2从而同时满足质量与连通两个约束。四、服务商接入与真机提交Cirq 的供应商包统一把执行器抽象成sampler/servicerun(circuit, repetitions...)返回带histogram的Result因此同一份电路可以低改动地迁移到不同后端。各供应商 token 均建议通过环境变量注入避免密钥硬编码进脚本——这一点与仓库安全审计结论一致安全报告确认 cirq skill 只通过环境变量引用官方供应商端点。4.1 Google Quantum AIcirq-googleGoogle 硬件访问权限受限需要已开通 Quantum Engine API 的 GCP 项目并配置 Application Default CredentialsADC提交前建议阅读官方 Access and authentication 的审批要求。import cirq_google as cg # Authenticate via Application Default Credentials: # gcloud auth application-default login # Set your GCP project ID: # export GOOGLE_CLOUD_PROJECTyour-project-id import os project_id os.environ[GOOGLE_CLOUD_PROJECT] engine cg.Engine(project_idproject_id) # List available processors (also visible in Cloud Console) for processor in engine.list_processors(): print(fProcessor: {processor.processor_id})拿到有权限的 processor例如 weber、sycamore、willow后完整链路为取设备 → 在设备比特上建电路 → 设备校验 → 经get_sampler真机运行import cirq import cirq_google as cg import os project_id os.environ[GOOGLE_CLOUD_PROJECT] engine cg.Engine(project_idproject_id) # Select a processor you have access to (e.g. weber, sycamore, willow) processor_id weber processor engine.get_processor(processor_id) device processor.get_device() # Create circuit on device qubits qubits sorted(device.metadata.qubit_set)[:5] circuit cirq.Circuit( cirq.H(qubits[0]), cirq.CZ(qubits[0], qubits[1]), cirq.measure(*qubits, keyresult) ) # Validate and run via sampler device.validate_circuit(circuit) sampler engine.get_sampler(processor_idprocessor_id) result sampler.run(circuit, repetitions1000) print(result.histogram(keyresult))要点说明处理器选择get_processor的 processor_id 必须是当前项目被授权使用的处理器未授权会报权限错误。device-qubit 电路直接sorted(device.metadata.qubit_set)[:5]取真机物理比特保证后续validate_circuit通过。device对象只负责校验真正的执行入口是engine.get_sampler(...)。模拟兜底Google 亦可通过cirq.Simulator先本地验证语义正确性再上真机这与 SKILL 中先在模拟器上测试的最佳实践一致。4.2 IonQcirq-ionqIonQ 是离子阱方案逻辑比特采用通用编号LineQubit无需匹配物理拓扑。通过IONQ_API_KEY环境变量初始化 serviceimport cirq_ionq as ionq # Set API key via environment variable (recommended): # export IONQ_API_KEYyour_api_key service ionq.Service() # reads IONQ_API_KEY from environment同一 service 既可作为模拟器也可作为 QPU 后端仅通过target参数区分便于先在simulator上验证再切到qpuimport cirq import cirq_ionq as ionq service ionq.Service() # uses IONQ_API_KEY from environment # Create circuit (IonQ uses generic qubits) qubits cirq.LineQubit.range(3) circuit cirq.Circuit( cirq.H(qubits[0]), cirq.CNOT(qubits[0], qubits[1]), cirq.CNOT(qubits[1], qubits[2]), cirq.measure(*qubits, keyresult) ) # Run on simulator result service.run( circuitcircuit, repetitions1000, targetsimulator ) print(result.histogram(keyresult)) # Run on hardware result service.run( circuitcircuit, repetitions1000, targetqpu )IonQ 同时提供显式的作业job对象管理适合需要排队监控的场景# Create job job service.create_job(circuit, repetitions1000, targetqpu) # Check job status status job.status() print(fJob status: {status}) # Wait for completion job.wait_until_complete() # Get results results job.results()此外 IonQ service 暴露当前校准数据可直接读取全链路的门保真度与计时信息作为选比特与误差分析的依据# Get current calibration calibration service.get_current_calibration() # Access metrics print(fFidelity: {calibration[fidelity]}) print(fTiming: {calibration[timing]})4.3 Azure Quantumazure-quantum[cirq]Azure Quantum 通过工作区的 resource ID 与 location 连接两者可直接从 Azure Portal 的工作区概览页复制。依赖以azure-quantum[cirq]安装见 SKILL.md 安装清单测试依赖清单同步收录于 skill-requirements.tomlfrom azure.quantum.cirq import AzureQuantumService import os # Create service from workspace resource ID and location service AzureQuantumService( resource_idos.environ[AZURE_QUANTUM_RESOURCE_ID], locationos.environ[AZURE_QUANTUM_LOCATION], )提交前先用service.targets()列出该工作区实际可用的 target——Azure 的 target 名称因工作区配置而异直接硬编码极易失效# List available targets targets service.targets() for target in targets: print(fTarget: {target.name}) # Run on IonQ simulator result service.run( circuitcircuit, repetitions1000, targetionq.simulator ) # Run on IonQ QPU result service.run( circuitcircuit, repetitions1000, targetionq.qpu )Honeywell/Quantinuum 后端的接入方式相同仅 target 名不同# Target names are workspace-specific; list available targets first result service.run( circuitcircuit, repetitions1000, targethoneywell.hqs-lt-s1-apival # example; use service.targets() to list ) target_info service.get_target(honeywell.hqs-lt-s1-apival) print(fTarget info: {target_info})实际开发中应始终先执行service.targets()打印可用 target 再选取避免把示例名当作长期有效的稳定标识。4.4 AQTAlpine Quantum Technologiescirq-aqtAQT 提供AQTSamplertoken 与远程网关地址均可在构造时指定。提交接口同样通过target切换模拟器与真实设备import os import cirq_aqt # Set API token via environment variable: # export AQT_TOKENyour_token service cirq_aqt.AQTSampler( remote_hosthttps://gateway.aqt.eu, access_tokenos.environ[AQT_TOKEN] )# Create circuit qubits cirq.LineQubit.range(3) circuit cirq.Circuit( cirq.H(qubits[0]), cirq.CNOT(qubits[0], qubits[1]), cirq.measure(*qubits, keyresult) ) # Run on simulator result service.run( circuit, repetitions1000, targetsimulator ) # Run on device result service.run( circuit, repetitions1000, targetdevice )注意AQTSampler.run的第一参数直接传circuit位置参数这与service.run(circuit..., ...)关键字调用风格略有差异迁移代码时需留意。4.5 Pasqalcirq-pasqalPasqal 为中性原子方案。先以设备抽象表达原子阵列再构造携带 token、远程主机与设备对象的 Samplerimport cirq_pasqal # Create Pasqal device device cirq_pasqal.PasqalDevice(qubitscirq.LineQubit.range(10))# Create sampler (requires PASQAL token in environment) import os sampler cirq_pasqal.PasqalSampler( remote_hosthttps://api.pasqal.cloud, access_tokenos.environ[PASQAL_TOKEN], devicedevice ) # Run circuit result sampler.run(circuit, repetitions1000)与 Google 路径对照可以看出设计一致性Pasqal 把device显式注入 Sampler使其在校验与编译阶段就能感知原子阵列约束Google 则由engine.get_sampler(processor_id...)隐式绑定设备。理解这一设备从属于 sampler 或显式注入的差别是跨供应商迁移的关键。五、认证与访问控制速查各供应商凭证的推荐获取与注入方式总结如下统一使用环境变量避免出现在源码与提交历史中# Google Cloud # 1) 安装 gcloud CLI # 2) 使用 Application Default Credentials 认证 gcloud auth application-default login # 3) 在项目中启用 Quantum Engine API然后设置项目 ID export GOOGLE_CLOUD_PROJECTyour-project-idGoogle 硬件还额外要求获得 Quantum AI 审批相关准入要求见官方 Access and authentication 页面。# IonQ在 IonQ 云平台 keys 设置页创建 API Key export IONQ_API_KEYyour_api_key # Azure Quantum从 Azure Portal 量子工作区头部复制资源 ID 与位置 export AZURE_QUANTUM_RESOURCE_ID/subscriptions/.../providers/Microsoft.Quantum/Workspaces/... export AZURE_QUANTUM_LOCATIONeastus # AQT向 AQT 申请访问令牌 export AQT_TOKENyour_token # Pasqal向 Pasqal 申请 API 访问令牌 export PASQAL_TOKENyour_token令牌应通过.env配合export、CI Secret 或密钥管理系统注入切勿提交到版本库。若服务返回认证错误优先检查环境变量名、过期时间与所在区域配额。六、面向硬件的电路优化与编译真机只支持有限的 native gatesGoogle 的 Sycamore 以 √iSWAP 家族为主部分设备支持 CZ 家族因此提交前必须把通用门集编译为设备门集。与 transformation.md 中系统化讲解的 Transformer 框架一致推荐按合并 → 丢弃 → 门集编译三步流水线处理def optimize_for_hardware(circuit, device): Optimize circuit for specific hardware. from cirq.transformers import ( optimize_for_target_gateset, merge_single_qubit_gates_to_phxz, drop_negligible_operations ) # Get device gateset if hasattr(device, gateset): gateset device.gateset else: gateset cirq.CZTargetGateset() # Default # Optimize circuit merge_single_qubit_gates_to_phxz(circuit) circuit drop_negligible_operations(circuit) circuit optimize_for_target_gateset(circuit, gatesetgateset) return circuit各步骤的语义与底层实现merge_single_qubit_gates_to_phxz把连续的单比特门合并为单个PhasedXZ形式减少电路深度drop_negligible_operations删除幅值低于atol默认约 1e-8的近似恒等旋转清理数值噪声optimize_for_target_gateset(circuit, gateset...)执行最终的 native gate 分解——设备自带gateset属性如cirq_google.SycamoreTargetGateset时优先采用否则回退到通用CZTargetGateset()。真实 Google 场景的等价编译在 transformation.md 中写作optimize_for_target_gateset(circuit, gatesetcirq_google.SycamoreTargetGateset())再device.validate_circuit(compiled)。编译完成后建议对比原始与优化后的深度len(circuit)与按门类型的计数作为优化收益的直接证据。七、误差缓解与真实噪声评估7.1 读取误差缓解readout error mitigation读取measurement阶段存在比特翻转错误通用做法是用校准电路测量真实状态 → 观测结果的混淆矩阵再对原始计数做逆矩阵校正。硬件指南给出思路框架def run_with_readout_error_mitigation(circuit, sampler, repetitions): Mitigate readout errors using calibration. # Measure readout error cal_circuits [] for state in range(2**len(circuit.qubits)): cal_circuit cirq.Circuit() for i, q in enumerate(circuit.qubits): if state (1 i): cal_circuit.append(cirq.X(q)) cal_circuit.append(cirq.measure(*circuit.qubits, keym)) cal_circuits.append(cal_circuit) # Run calibration cal_results [sampler.run(c, repetitions1000) for c in cal_circuits] # Build confusion matrix # ... (implementation details) # Run actual circuit result sampler.run(circuit, repetitionsrepetitions) # Apply correction # ... (apply inverse of confusion matrix) return result其原理对每个基态|s⟩制备并测量统计被误读为其他状态的比例汇总成混淆矩阵随后对真实电路的观测分布施加inv(confusion_matrix) measured_probs得到修正分布。noise.md 提供了这一思路的完整数值实现mitigate_readout_errors(results, confusion_matrix)可直接移植回硬件路径其中的ReadoutNoiseModel(p0_given_1, p1_given_0)也可以先在模拟端验证校正算法是否正确收敛。7.2 用标定噪声模型评估硬件表现在把昂贵真机额度消耗完之前更稳妥的做法是用 Google 标定数据构造噪声模型做含噪预演。simulation.md 的 QVM 小节展示了从 processor 拉取设备噪声属性并注入DensityMatrixSimulator的标准写法其结论是NoiseModelFromGoogleNoiseProperties能把真实的两比特错误率、T1/T2、读取错误等映射成噪声通道使模拟结果逼近真机——这也解释了为何硬件章节反复强调先在模拟器上验证。八、作业管理与批处理提交真机请求昂贵且有配额限制推荐以批量异步提交 → 统一等待 → 汇总结果的方式组织作业避免逐条串行等待造成配额空转def submit_jobs_in_batches(circuits, sampler, batch_size10): Submit multiple circuits in batches. jobs [] for i in range(0, len(circuits), batch_size): batch circuits[i:ibatch_size] job_ids [] for circuit in batch: job sampler.run_async(circuit, repetitions1000) job_ids.append(job) jobs.extend(job_ids) # Wait for all jobs results [job.result() for job in jobs] return results这里的run_async与job.result()构成异步编程模型提交后立刻返回 job 句柄需要结果时再阻塞获取。结合 4.2 中 IonQ 的create_job → status() → wait_until_complete() → results()作业对象可归纳出通用最佳实践——先用status()轮询/监听确认完成后再取结果避免在作业排队阶段无意义阻塞。九、硬件编程最佳实践清单综合硬件指南全文与 SKILL.md 的工程建议真机运行应遵守以下十条纪律提交前校验电路使用device.validate_circuit()捕获拓扑与门集违规面向目标硬件优化用optimize_for_target_gateset分解到设备原生门集基于标定数据选比特用单/两比特门 RB 错误率排序而不是固定沿用上次的比特映射监控作业状态获取结果前确认 job 已完成避免空等或读取未就绪数据实施误差缓解至少做读取误差校正混淆矩阵求逆高效批处理批量提交多电路并异步等待控制 batch_size 以免超出平台并发限制遵守限流配额遵循各供应商的 API rate limit必要时在批次间退避立即保存结果昂贵的真机数据在拿到的瞬间就落盘防止后续流程崩溃造成丢失先模拟后真机所有电路先在 simulator/QVM 上验证正确性与期望分布再消耗真机额度保持电路浅硬件退相干时间T1/T2有限优先用编译优化压缩深度与门数。如需在同一篇流水线中处理多厂商目标可直接复用 SKILL.md 的 Hardware Execution Template——它把google / ionq / azure三种 provider 封装进统一的run_on_hardware(circuit, provider..., processor_id..., repetitions...)函数是本文各供应商接入代码的工程化汇总。十、相关资源导航Cirq SKILL 总览安装版本当前为 1.6.1 系列、供应商分发包安装命令、六类能力的定位simulation.mdQVM 虚拟设备、基于 Google 标定噪声属性的含噪预演transformation.mdTransformer 框架、门集编译、SWAP 路由与变换流水线noise.md噪声通道建模、读取误差缓解的完整实现、RB/XEB 表征skill-requirements.tomlcirq 技能组依赖声明cirq、cirq-google、cirq-ionq、cirq-aqt、cirq-pasqal、azure-quantum、sympy、networkx 等。依赖安装遵循 SKILL 中的建议开发期可省略版本号获取最新特性生产与真机运行务必把cirq与各分发包锁定到同一发布版本如uv pip install cirq1.6.1 cirq-google1.6.1保证供应商包与核心库 API 完全匹配规避跨版本不兼容风险。【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价