代码
MindSpore Quantum 0.12.0 发布:张量网络模拟、量子启发式算法族与量子硬件抽象层全面升级

MindSpore Quantum 0.12.0 发布:张量网络模拟、量子启发式算法族与量子硬件抽象层全面升级

MindSpore Quantum 0.12.0 发布:张量网络模拟、量子启发式算法族与量子硬件抽象层全面升级

MindSpore Quantum 是一款开源的混合量子-经典编程框架,依托于 MindSpore 深度学习框架,在量子算法模拟、训练与实现方面展现卓越性能。

0.12.0 版本以“扩展边界”为核心,聚焦三大方向:

  • 引入 MPS 张量网络模拟器,突破量子比特数限制;
  • 丰富量子启发式优化算法族工具箱;
  • 打通从模拟器到真实量子硬件的路径。

这些特性助力研究者从理论验证到硬件部署的高效跨越。

本次版本核心亮点:

BETA mqmps 张量网络模拟器:新增矩阵乘积态(MPS)后端,在中等纠缠线路上以远少于态矢量方法的内存模拟更多量子比特。

STABLE QAIA 算法族扩展:QAIA 模块新增 TSB/USB/LSB 三种量化模拟分叉变体,为组合优化问题提供更丰富的求解工具。

BETA QPU 硬件抽象层:发布 QPU 抽象基类,调用风格与 Simulator 高度一致,大幅降低从模拟器迁移到真实硬件的成本。开发者仅需实现一个采样方法,即可将算法无缝对接任意量子硬件。

01 mqmps:矩阵乘积态模拟器,突破量子比特数限制

全振幅态矢量模拟器的内存需求随量子比特数呈指数增长(2nX16字节,complex128)—— 模拟 30 个量子比特就需要约 16 GiB 内存,而 40 个量子比特则需要超过 16 TiB。这一”内存墙”严重制约了量子算法的规模化验证。

MindSpore Quantum 0.12.0 引入了全新的矩阵乘积态(Matrix Product State, MPS)模拟器后端 mqmps。MPS 以张量网络的形式表示量子态,其内存消耗主要取决于线路的纠缠度(由键维度 χ 控制),而非量子比特数本身。当线路纠缠度适中时,mqmps 可以用远少于态矢量方法的内存模拟更多的量子比特。

性能对比:

下图展示了在一个深度为 5 的低纠缠线路(相邻比特 CNOT + 单比特 RY 门)上,以 max_bond_dimension=0(精确模式)运行 apply_circuit 的单次耗时对比:

在 24 个量子比特时,mqvector 需要约 1.1 秒,而 mqmps 仅需 0.005 秒,差距显著。随着比特数增长,态矢量的指数开销使其耗时急剧上升,而 MPS 的耗时仅线性增长。

在更大的比特数下(测试覆盖至 100 量子比特),mqmps 仍可在毫秒级完成线路执行。

需要强调的是,MPS 的性能优势与线路纠缠度密切相关。对于高度纠缠的线路(如深层随机线路),键维度会快速增长,MPS 的优势将减弱甚至消失。 mqmps 最适合的场景包括:浅层变分线路、一维近邻结构的量子多体模拟、以及中等纠缠度的 VQE 线路等。

mqmps 后端的核心技术特点:

  • 高性能 C++ 内核:底层基于 BLAS/LAPACK 实现,确保张量运算的数值稳定性和计算效率。
  • 支持单比特和双比特门:非相邻量子比特上的双比特门会自动插入 SWAP 门进行路由。
  • 完整功能支持:支持测量、采样、约化密度矩阵计算以及 Pauli 期望值估计。
  • 可调键维度:通过 max_bond_dimension 参数控制精度与效率的平衡。设为 0 时为精确模拟(无截断),设为正整数时可在精度与效率之间权衡。

快速上手:

使用 mqmps 后端只需在创建模拟器时指定后端名称,其余代码与 mqvector 完全一致。

from mindquantum.simulator import Simulator
from mindquantum.core.circuit import Circuit
from mindquantum.core.gates import H, X, RY
from mindquantum.core.operators import Hamiltonian, QubitOperator

# 创建 MPS 模拟器(100 个量子比特)
sim = Simulator('mqmps', 100, max_bond_dimension=64)

# 构建量子线路:线性连接的变分结构
circ = Circuit()
for i inrange(100):
  circ += RY(0.1* i).on(i)
for i inrange(99):
  circ += X.on(i +1, i)

sim.apply_circuit(circ)

# 计算 Pauli 期望值
ham = Hamiltonian(QubitOperator('Z0 Z1') + QubitOperator('Z50 Z51'))
exp = sim.get_expectation(ham)
print(f"期望值: {exp}")

# 也支持约化密度矩阵(保留比特数不宜过多)
rho = sim.get_reduced_density_matrix([0, 1])
print(f"约化密度矩阵:\n{rho}")

02 QAIA 算法族扩展:量化模拟分叉算法 TSB/USB/LSB

组合优化是量子计算最具近期实用价值的应用方向之一。MindSpore Quantum 0.12.0 为 QAIA(量子退火启发式算法)模块新增了三种量化模拟分叉(Quantized Simulated Bifurcation)变体:

三种新算法均支持 CPU,源自论文 1。其中 TSB 通过三元量化将乘累加运算简化为加减法,USB 和 LSB 则分别采用均匀量化和对数量化策略。论文指出,量化引入的随机性有助于系统跳出局部最优,在长搜索中获得更高质量的解,同时在短搜索中加速能量收敛。

在全连接图 MaxCut 基准测试中,TSB 的 Time-to-Solution(TTS)相比 DSB 最高可达 2 倍加速,且随问题规模增大优势更加显著。

示例代码:

import numpy as np
from scipy.sparse import csr_matrix
from mindquantum.algorithm.qaia import TSB, USB, LSB

# 构建组合优化问题(随机对称耦合矩阵)
np.random.seed(42)
N =1024
J = csr_matrix(np.random.randn(N, N).astype(np.float32))
J = (J + J.T) /2
J.setdiag(0)

# 使用三元量化模拟分叉 (TSB)
solver = TSB(J, n_iter=500, batch_size=10, backend='cpu-float32',strategy='linear')
# 支持 linear/exponential/logarithmic

solver.update()
best_energy = solver.calc_energy().min()
print(f"TSB 最优能量: {best_energy:.2f}")

03 QPU:硬件抽象层,便捷对接真实量子计算机

将量子算法从模拟器部署到真实硬件,往往意味着大量的代码重构。为了降低这一迁移成本,MindSpore Quantum 0.12.0 推出了QPU 抽象基类 —— 一套与 Simulator 接口风格统一的硬件抽象层。

  • 仅需实现 sampling() 方法:开发者只需编写一个调用目标硬件 SDK 的采样函数,即可将 MindSpore Quantum 与该硬件打通。期望值估计和梯度计算均由基类自动完成。
  • 基于采样的期望值估计:get_expectation() 自动执行 Pauli 基旋转并从测量结果中进行统计估计,用户无需手动处理测量基变换。
  • 基于采样的梯度估计:get_expectation_with_grad() 返回与模拟器完全兼容的 GradOpsWrapper,支持参数平移规则(Parameter-Shift Rule)和中心有限差分,覆盖 RX、RY、RZ、U3、Rxx、Ryy、Rzz 等 10+ 种参数化门族,并能智能地为每个参数选择最优策略。
  • 批量优化接口:可选择性重写 _sampling_batch() 以实现批量任务提交,进一步提升硬件利用率。

在基于 Pauli Hamiltonian 的无测量变分线路等常见 VQE/QAOA 场景中,用户只需将 Simulator 替换为 QPU 子类实例,即可将算法迁移到真实量子硬件上运行。

需要注意的是,当前 QPU 仅支持 QubitOperator 构建的 Hamiltonian,且不支持 circ_left/simulator_left 等高级用法;硬件拓扑约束和原生门编译需在子类中处理。

快速上手:对接 Quafu 超导量子云平台

以下示例对接北京量子信息科学研究院的 Quafu 平台,展示如何用 QPU 将 MindSpore Quantum 算法部署到真实量子硬件。整个对接只需实现一个 sampling() 方法,核心逻辑不到 20 行:

from mindquantum.device import QPU
from mindquantum.core.circuit import Circuit
from mindquantum.core.gates import Measure
from mindquantum.core.gates.measurement import MeasureResult
from mindquantum.core.operators import QubitOperator, Hamiltonian
from quafu import QuantumCircuit as QuafuCircuit, Task
import numpy as np

class QuafuQPU(QPU):    
"""对接 Quafu 超导量子云平台的 QPU 子类。"""
  def__init__(self, n_qubits, backend="ScQ-P136", default_shots=4000, **kwargs): 
    super().__init__(n_qubits=n_qubits, default_shots=default_shots, **kwargs)
    self.backend = backend 
    self._task = Task()
    self._task.config(backend=backend, shots=default_shots, compile=True)   

  def sampling(self, circuit, pr=None, shots=1, seed=None):        
  # MindQuantum 线路 → OpenQASM → Quafu 线路 → 提交真机       
    circ = circuit.apply_value(pr) if pr isnotNoneelse circuit     
    if not circ.has_measure_gate: 
       circ = circ + Circuit([Measure(f'q{i}').on(i) for i inrange(circ.n_qubits)]) 
       qc = QuafuCircuit(circ.n_qubits)  
       qc.from_openqasm(circ.to_openqasm())
       self._task.config(backend=self.backend, shots=shots, compile=True) 
       res =self._task.send(qc) 

       # Quafu 计数结果 → MindQuantum MeasureResult(注意端序翻转) 
       mr = MeasureResult()
       mr.add_measure([g for g in circ ifisinstance(g, Measure)]) 
       samples = []
       for bitstr, count in res.counts.items(): 
       samples.extend([[int(b) for b inreversed(bitstr)]] * count)    
       mr.collect_data(np.array(samples)) 
 return mr

使用 QuafuQPU,在真实量子芯片上运行 Bell 态实验与使用模拟器几乎没有区别:

# 创建 QPU 实例,连接 Quafu 136 比特超导芯片
qpu = QuafuQPU(n_qubits=2, backend="ScQ-P136", default_shots=4000)

# Bell 态线路
circ = Circuit().h(0).x(1, 0)
ham = Hamiltonian(QubitOperator('Z0 Z1'))

# 一行代码获得真机期望值 —— 接口与 Simulator 完全一致
exp = qpu.get_expectation(ham, circ)
print(f"真机={exp}")  
# 理论值 1.0,实际值因硬件噪声略有偏差

# 同样支持参数化线路的梯度计算,可直接用于变分优化
param_circ = Circuit().ry('theta', 0).x(1, 0)
grad_ops = qpu.get_expectation_with_grad(ham, param_circ)
f, g = grad_ops(np.array([0.5]))
print(f"期望值: {f}, 梯度: {g}")

MindSpore Quantum 通过 OpenQASM 作为中间表示与 Quafu 对接,无需手动转换线路格式。这一模式同样适用于其他支持 OpenQASM 的量子硬件平台 —— 只需替换sampling()中的 SDK 调用即可。

04 安装与升级指南

安装MindSpore Quantum 0.12.0:

pip install mindquantum==0.12.0

从旧版本升级:

pip install --upgrade mindquantum==0.12.0

温馨提示:

  • 使用 mqmps 后端无需额外依赖,开箱即用。
  • 使用 QPU 需要安装目标量子硬件平台的 SDK。

05 结语

MindSpore Quantum 0.12.0 在模拟能力、算法丰富度和硬件对接三方面迈出重要一步:

  • mqmps 为低纠缠、大比特数场景提供全新解决方案;
  • QAIA 量化模拟分叉算法为组合优化提供更灵活的工具;
  • QPU 接口为真实硬件部署提供统一编程入口。

本版本还包含多项改进与问题修复(子模块导入错误提示优化、MQSABRE 映射修复、OpenQASM 增强等)。

衷心感谢所有贡献代码与建议的开发者!欢迎广大用户下载体验新版本,并随时通过社区向我们反馈宝贵的意见和建议。

点击【阅读原文】查阅完整 Release Notes。

参考文献 1 T. Zhang and J. Han, “Quantized Simulated Bifurcation for the Ising Model,” in 2023 IEEE 23rd International Conference on Nanotechnology (NANO), Jeju City, Korea, 2023, doi: 10.1109/NANO58406.2023.10231308.