3. 混合量子-经典架构设计

混合量子-经典架构的核心问题不是“量子处理器能不能算”,而是“哪些计算应该交给量子处理器、哪些必须留在经典侧,以及两侧如何交换数据与控制信号”。量子处理器(QPU)擅长处理希尔伯特空间中的态制备、纠缠演化与测量采样,但受限于相干时间、门保真度、测量次数和量子比特数;经典处理器(CPU/GPU)擅长参数更新、梯度估计、数据预处理、优化器迭代与结果统计。二者分工的本质,是把一个训练任务拆成“量子可执行子程序”和“经典可执行子程序”,再通过明确的接口把它们串起来。

一、分工模式:谁负责什么

在典型的变分量子机器学习(VQML)中,量子侧通常承担参数化量子电路(PQC)的态制备与测量,输出的是关于可观测量 ⟨O⟩ 的期望值或采样计数;经典侧则负责损失函数计算、梯度估计、参数更新、收敛判断以及数据编码前的特征工程。以一个小型分类任务为例:经典侧先把 4 维特征归一化并编码为旋转角,量子侧执行 3 层 RY-CNOT 电路并测量 Z 基,经典侧根据测量结果计算交叉熵损失,再用梯度下降更新 12 个旋转参数。这里量子侧不保存参数历史,经典侧不直接操作量子态,二者通过“参数向量—测量结果”这一对接口耦合。

分工模式可以进一步细分为三类:量子主计算型(量子侧完成大部分态演化,经典侧只做后处理)、经典主控型(经典侧决定电路结构、参数和测量基,量子侧作为可调用加速器)、交替迭代型(两侧在每一轮训练中反复交换信息,最常见)。选择哪种模式,取决于任务对量子资源的需求、经典侧可用的优化算法以及硬件是否支持批量提交。

二、数据流与控制流

数据流描述“数据从哪里来、经过什么变换、到哪里去”。在混合训练中,数据流通常为:经典数据集 → 特征预处理 → 角度编码/振幅编码 → 量子态演化 → 测量采样 → 期望值/概率分布 → 损失与梯度 → 参数更新。控制流描述“谁在什么时候决定下一步做什么”,包括:经典侧判断是否继续迭代、选择下一组参数、决定测量基或电路深度、触发量子任务提交、处理超时与重试。

一个容易被忽略的细节是:量子测量具有随机性,单次采样不能直接作为损失输入。工程上通常采用 shots 次重复测量取均值,例如 shots=4096 时,期望值估计的标准误差约为 1/√shots。这意味着数据流中必须包含“采样—统计—估计”这一层,否则梯度会被噪声淹没。控制流则要决定:是每轮都重新提交量子任务,还是把多组参数打包成批任务一次提交。

混合量子-经典训练流水线:数据流与控制流 经典处理器侧(CPU/GPU) 数据加载与特征预处理 归一化 / 降维 / 编码角计算 参数初始化与优化器 θ ← θ - η·∇L(SPSA/Adam) 损失函数与梯度估计 交叉熵 / MSE / 参数移位 收敛判断与任务调度 |ΔL|<ε / 最大轮数 / 超时重试 结果统计与模型评估 准确率 / F1 / 混淆矩阵 量子处理器侧(QPU) 量子态制备 角度编码 / 振幅编码 / 基态 参数化量子电路演化 RY / RZ / CNOT / 纠缠层 测量与采样 Z基 / X基 / shots=4096 期望值估计 ⟨O⟩ = Σ λᵢ pᵢ / 标准误差 硬件执行与排队 编译 / 校准 / 队列延迟 量子-经典接口 参数向量 θ → 电路 测量结果 → 期望值 控制信号:提交 / 等待 / 重试 执行策略 同步:逐轮阻塞等待 异步:批量提交 + 回调 编码参数 / 电路配置 测量计数 / 期望值 控制流:迭代 / 停止 / 重试 梯度反馈 实线:数据流(参数与测量结果) 虚线:控制流(迭代、停止、重试、梯度反馈)

三、同步与异步执行策略

同步执行是最直观的策略:经典侧提交一组参数,阻塞等待量子侧返回测量结果,再计算损失并更新参数,然后进入下一轮。它的优点是逻辑简单、状态一致、易于调试;缺点是量子硬件排队和编译延迟会直接拖慢整个训练循环。假设单次量子任务提交到返回需要 2 秒,训练 200 轮就需要约 400 秒,其中大部分时间经典侧处于空闲。

异步执行则把“提交”和“消费”解耦:经典侧维护一个参数队列,量子侧以批任务方式并行执行多组电路,结果通过回调或轮询写入结果缓冲区,经典侧从缓冲区取结果继续优化。例如,把 8 组不同参数打包成一个 batch 提交,量子侧一次编译执行,经典侧在等待期间可以准备下一批参数或做数据增强。异步策略能显著提升吞吐,但引入了新的问题:结果与参数的对应关系必须严格标记,否则会出现“参数—结果错配”;同时,异步梯度可能基于稍旧的参数计算,需要控制滞后步数。

选择同步还是异步,可以看两个指标:量子任务延迟占总训练时间的比例,以及经典侧是否有可并行的准备工作。若延迟占比高且经典侧有活可干,优先异步;若任务短、轮数少、调试优先,同步更稳妥。

四、一个可参考的配置样例

下面给出一个混合训练循环的伪代码配置,展示参数打包、批量提交与结果回收的基本结构。示例参数为教学假设,不代表真实硬件实测值。

# 混合训练循环(异步批量提交示例)
shots = 4096
batch_size = 8          # 每批提交8组参数
max_iter = 200
lr = 0.05
tol = 1e-4

params = init_params(n_layers=3, n_qubits=4)   # 12个旋转参数
buffer = {}             # key: task_id, value: (params, expectation)

for step in range(max_iter):
    batch = sample_neighbors(params, batch_size)   # 生成候选参数
    task_ids = qpu.submit_batch(circuit, batch, shots)  # 非阻塞提交

    # 经典侧在等待期间做数据准备或下一批参数生成
    prepare_next_batch()

    results = qpu.collect(task_ids, timeout=30)    # 回收结果
    grads = estimate_gradient(results, batch)      # 参数移位或SPSA
    params = params - lr * grads

    loss = compute_loss(results)
    if abs(loss - prev_loss) < tol:
        break
    prev_loss = loss

在这段流程中,submit_batch 与 collect 的分离是异步的关键;task_ids 保证结果可追溯;timeout 用于处理量子任务超时。若改为同步,只需把 submit_batch 和 collect 合并为一次阻塞调用,逻辑更简单但吞吐下降。

五、设计时需要检查的几个点

  • 接口一致性:参数向量的顺序、维度、编码方式必须与量子电路中的门序列严格对应,任何错位都会导致训练不收敛。
  • 测量噪声与 shots:shots 越大,期望值估计越稳,但单轮耗时越长;需要在方差和延迟之间取平衡。
  • 梯度估计方法:参数移位规则精确但需要 2N 次电路执行;SPSA 只需 2 次但方差较大,适合量子资源紧张的场景。
  • 异步滞后控制:若使用异步梯度,应限制参数版本落后不超过 1~2 步,否则优化方向可能失真。
  • 失败重试:量子任务可能因校准、排队或硬件错误失败,控制流中应包含重试与降级策略。

总体而言,混合量子-经典架构设计的关键,是把量子侧当作一个“有延迟、有噪声、可批量调用”的加速器,把经典侧当作“调度、优化与统计”的主控。数据流决定信息如何流动,控制流决定训练如何推进,同步与异步则决定这套流水线在实际硬件上的吞吐与稳定性。