NV cuQ量子模拟实操:1060X极速搞定大型电路

2025-12-17前沿技术

NV cuQ量子模拟实操:1060X极速搞定大型电路

各位跨境实战精英、技术伙伴,大家好!量子计算,这个听起来遥远又神秘的领域,正以超乎想象的速度向我们走来。作为一名扎根中国跨境行业多年的老兵,我深知技术创新是驱动我们前行的核心动力。今天,新媒网跨境获悉,NVIDIA(英伟达,美国公司)在其cuQuantum SDK v25.11版本中,带来了两大利器——cuPauliProp和cuStabilizer,它们将彻底改变我们模拟大型量子电路的方式,为中国量子科技的腾飞注入强大动能。

随着量子处理器(QPU)性能的不断提升,模拟大型量子计算机的难度也水涨船高。确保这些设备超越传统经典模拟极限后,其输出结果依然可信,这成为我们验证量子技术进步的关键。同样,在为各种旨在辅助量子处理器运行的AI模型生成大规模数据集时,我们也需要GPU加速,来在不同规模和抽象层级上提供有用的训练数据。例如,量子纠错(QEC)领域的AI解码器、AI编译器、用于校准和控制的AI智能体,以及设计新型量子器件的模型等,都对模拟能力提出了更高的要求。

cuQuantum SDK正是一套这样的高性能库和工具集,它能将量子计算在电路和器件层面的模拟速度提升几个数量级。最新发布的cuQuantum SDK v25.11版本,更是引入了加速两种全新工作负载的组件:Pauli传播(Pauli propagation)和稳定器模拟(stabilizer simulations)。这两项技术对模拟大型量子计算机至关重要。接下来,我将带领大家深入了解如何利用这些GPU加速的超级计算能力,开启Pauli传播模拟,并加速稳定器模拟的采样过程,从而解决这些前沿难题。

cuQuantum cuPauliProp:洞察量子态演化的新利器

Pauli传播是一种相对较新的方法,能够高效地模拟大型量子电路的观测量,其中甚至可以包含真实量子处理器的噪声模型。它通过将量子态和观测量表示为Pauli张量积的加权和,在模拟过程中动态地舍弃那些对最终期望值贡献不大的项。这种机制使得对传统方法(如矩阵乘积态,Matrix Product States)难以处理的大型电路进行期望值估计成为可能,尤其是在量子变分本征求解器(VQE)和物理动力学量子模拟等应用中,计算期望值是核心任务。

尽管许多精确和近似的经典模拟技术都能计算大型电路的观测量,但在不同场景下,它们的计算成本都可能变得极其昂贵。例如,在电路模拟中非常流行的近似张量网络态方法——矩阵乘积态技术,通常不适用于那些编码二维或三维物理系统动态的大型电路。

Pauli传播是近似电路模拟工具箱中一个有益的补充,适用于纯净电路和含噪声电路。它不仅被证明能高效模拟接近Clifford群的电路和/或噪声较大的电路,还在模拟某些量子自旋系统(通过Trotter化演化)的电路时展现出惊人的性能。这包括了美国IBM(国际商业机器公司)在127量子比特设备上的“效用实验”(utility experiment)中提及的一些“效用电路”。目前,界定哪些电路能被Pauli传播高效模拟,以及优化算法细节,仍然是前沿研究的重点。

cuQuantum 25.11通过发布这一新的cuQuantum库,为在NVIDIA GPU上加速Pauli传播及其衍生方法提供了底层原语(primitives)。这使得开发者和研究人员能够进一步拓展经典电路模拟的边界。接下来,我们将探讨其核心功能。

第一步:准备工作,初始化库环境

在着手任何模拟之前,我们首先需要进行必要的初始化设置,这包括创建库句柄(handle)和工作空间描述符(workspace descriptor)。这就像为我们的实验准备好场地和工具。

import cupy as cp
from cuquantum.bindings import cupauliprop
from cuquantum import cudaDataType

# 创建库句柄和工作空间描述符
handle = cupauliprop.create()
workspace = cupauliprop.create_workspace_descriptor(handle)

# 为工作空间分配GPU内存
ws_size = 1024 * 1024 * 64  # 示例:64兆字节
d_ws = cp.cuda.alloc(ws_size)
cupauliprop.workspace_set_memory(
    handle,
    workspace,
    cupauliprop.Memspace.DEVICE,
    cupauliprop.WorkspaceKind.WORKSPACE_SCRATCH,
    d_ws.ptr,
    ws_size
)

第二步:设定观测目标,明确你的关注点

模拟的起点是定义一个可观测的量。我们需要为Pauli展开(由Pauli算符乘积的加权和表示)分配设备内存,并用初始的可观测值(例如,一个特定的Z算符)来填充输入展开。

# 辅助函数,将Pauli字符串编码为压缩整数(每个量子比特2比特:X和Z掩码)
def encode_pauli(num_qubits, paulis, qubits):
    num_ints = cupauliprop.get_num_packed_integers(num_qubits)
    # 压缩整数格式:[X_ints..., Z_ints...]
    packed = np.zeros(num_ints * 2, dtype=np.uint64)
    x_mask, z_mask = packed[:num_ints], packed[num_ints:]
    for p, q in zip(paulis, qubits):
        idx, bit = divmod(q, 64)
        if p in (cupauliprop.PauliKind.PAULI_X, cupauliprop.PauliKind.PAULI_Y):
            x_mask[idx] |= (1 << bit)
        if p in (cupauliprop.PauliKind.PAULI_Z, cupauliprop.PauliKind.PAULI_Y):
            z_mask[idx] |= (1 << bit)
    return packed

# 1. 分配设备缓冲区
# 定义容量(Pauli字符串的最大数量)并分配缓冲区
max_terms = 10000
num_packed_ints = cupauliprop.get_num_packed_integers(num_qubits)
d_pauli = cp.zeros((max_terms, 2 * num_packed_ints), dtype=cp.uint64, order="C")
d_coef = cp.zeros(max_terms, dtype=cp.float64, order="C")

# 2. 填充初始可观测值 (Z_62)
encoded_pauli = encode_pauli(num_qubits, [cupauliprop.PauliKind.PAULI_Z], [62])
# 分配第一个项
d_pauli[0] = cp.array(encoded_pauli)
d_coef[0] = 1.0

# 3. 创建Pauli展开
# 输入展开:预先填充我们的可观测值
expansion_in = cupauliprop.create_pauli_expansion(
    handle,
    num_qubits,
    d_pauli.data.ptr,
    d_pauli.nbytes,
    d_coef.data.ptr,
    d_coef.nbytes,
    cudaDataType.CUDA_R_64F,
    1,  # num_terms=1
    1,  # is_sorted=True
    1   # is_unique=True
)

# 输出展开:初始为空 (num_terms=0),需要自己的缓冲区
d_pauli_out = cp.zeros_like(d_pauli)
d_coef_out = cp.zeros_like(d_coef)
expansion_out = cupauliprop.create_pauli_expansion(
    handle,
    num_qubits,
    d_pauli_out.data.ptr,
    d_pauli_out.nbytes,
    d_coef_out.data.ptr,
    d_coef_out.nbytes,
    cudaDataType.CUDA_R_64F,
    0,  # num_terms=0
    0,  # is_sorted=False
    0   # is_unique=False
)

第三步:构造操作符,实现量子门逻辑

接下来,我们需要定义量子门或操作符,例如一个Pauli旋转门,它将用于演化我们的量子系统。

# 在量子比特0上创建一个Z旋转门
paulis = [cupauliprop.PauliKind.PAULI_Z]
qubits = [0]
gate = cupauliprop.create_pauli_rotation_gate_operator(
    handle,
    theta,
    1,      # num_qubits
    qubits,
    paulis
)

第四步:应用操作符,推动系统演化

通过将操作符(可以是量子门或噪声信道)应用到Pauli展开上,我们便能模拟量子系统的演化。需要注意的是,在海森堡绘景(Heisenberg picture)中,电路中的门是逆序应用于观测量上的,因此在应用操作符时, adjoint 参数需设为 True。

# 获取输入展开中当前项的视图
num_terms = cupauliprop.pauli_expansion_get_num_terms(handle, expansion_out)
view = cupauliprop.pauli_expansion_get_contiguous_range(
    handle,
    expansion_in,
    0,          # start_index
    num_terms   # num_terms
)

# 应用门:in_expansion -> gate -> out_expansion
cupauliprop.pauli_expansion_view_compute_operator_application(
    handle,
    view,
    expansion_out,
    gate,
    True,       # adjoint? (是否为伴随算符)
    False,      # make_sorted? (是否排序)
    False,      # keep_duplicates? (是否保留重复项)
    0,          # num_truncation_strategies (截断策略数量)
    None,       # Truncation strategies (可选)
    workspace
)

第五步:计算期望值,提取有用信息

最后,我们来计算期望值,这通常是通过与零态(zero state)进行迹运算来完成的。

import numpy as np

result = np.zeros(1, dtype=np.float64)

# 计算迹
cupauliprop.pauli_expansion_view_compute_trace_with_zero_state(
    handle,
    view,
    result.ctypes.data,
    workspace
)

将这些方法整合起来,我们会发现NVIDIA DGX B200 GPU相比基于CPU的代码提供了显著的速度提升。对于小系数截断(coefficient cutoffs)的情况,在NVIDIA DGX B200 GPU上对美国IBM 127量子比特效用电路进行模拟时,cuQuantum cuPauliProp可以实现数个数量级的加速,相比于在最新双路数据中心CPU上运行的单线程Qiskit Pauli-Prop,其速度提升高达55到177倍。这充分展示了GPU在量子模拟领域的强大潜力。
Bar chart showing cuQuantum cuPauliProp 55x to 177x speedup for varying coefficient cutoff values, 0.0001, 0.00005, 0.000025 respectively, for GPU simulations of pi/4 rotations of the 127 qubit IBM Utility Circuit, when leveraging NVIDIA DGX B200 GPU compared to Qiskit PauliProp on Intel Xeon Platinum 8570 CPU.

图1. 对美国IBM 127量子比特效用电路进行π/4旋转模拟时,cuQuantum GPU模拟在NVIDIA DGX B200上相对于在英特尔(Intel,美国公司)至强铂金8570 CPU上运行的Qiskit PauliProp,对于一系列截断方案均显示出数个数量级的加速效果。

cuQuantum cuStabilizer:量子纠错与AI数据生成的加速引擎

稳定器模拟(Stabilizer simulations)源自Gottesman-Knill定理,该定理指出Clifford群(Pauli群的归一化子)内的量子门可以在经典计算机上以多项式时间高效模拟。Clifford群由CNOT、Hadamard和Phase门(S)组成。因此,稳定器模拟对于大规模量子纠错(QEC)码的资源评估和测试至关重要。稳定器模拟器有多种构建方式,从tableau模拟器到帧模拟器。cuStabilizer目前专注于提高帧模拟器中的采样吞吐量。

帧模拟主要关注量子噪声对量子态的影响。由于量子器件并非完美无缺,我们可以通过在电路中插入随机的“噪声”门来模拟这些不完善之处。如果我们已知无噪声情况下的结果,那么要获得含噪声的结果,只需跟踪差异,即噪声门如何改变电路输出。事实证明,这种效应的计算比完整的电路模拟要简单得多。

噪声门插入方式的可能组合数量随电路规模的增加而迅速增长,这意味着为了可靠地模拟纠错算法,我们需要大量的采样(shots)。对于那些对开发量子纠错码、测试新型解码器或为AI解码器生成数据感兴趣的用户来说,帧模拟是理想选择。cuQuantum SDK的cuStabilizer库提供了C API和Python API,旨在利用NVIDIA GPU提升采样率并加速任何帧模拟。虽然C API能提供更好的性能,但Python API更灵活,能为用户处理内存分配,因此是入门的最佳选择。

第一步:创建电路并进行帧模拟

cuStabilizer主要涉及两个核心类:Circuit(电路)和FrameSimulator(帧模拟器)。电路可以接受包含电路指令的字符串,其格式类似于Stim CPU模拟器所用的格式。要创建一个FrameSimulator,您需要指定电路的相关信息,以便分配足够的资源。

import cuquantum.stabilizer as cust

# 电路信息
num_qubits = 5
num_shots = 10_000
num_measurements = 2

# 在GPU上创建电路
circ = cust.Circuit("""
H 0
1
X_ERROR(0.1) 1
2
DEPOLARIZE2(0.5) 2
3
CX 0 1
2 3
M 0 3
""")

sim = cust.FrameSimulator(
    num_qubits,
    num_shots,
    num_measurements
)

sim.apply(circ)

您可以在不同电路之间重复使用同一个模拟器,只要模拟器拥有足够的量子比特资源即可。下面这段代码将把一个新电路应用到已经被第一个电路circ修改过的量子态上。

circ2 = cust.Circuit("""
Z_ERROR(0.01) 1
4
""")

sim.apply(circ2)

第二步:解读模拟结果,获取关键数据

模拟器的状态由三个比特表组成:
(1) x_bits
(2) z_bits
(3) measurement_bits

前两个表存储Pauli帧(类似于cuPauliProp的Pauli展开,但布局不同且不含权重)。第三个表存储的是每次采样中无噪声测量与有噪声测量之间的差异。为了最高效地存储比特,它们被编码成整数值,这被称为“比特打包”(bit-packed)格式,其中内存中的每个字节存储八个有效比特。尽管这种格式效率最高,但操作单个比特需要在程序中额外处理。比特打包格式不易与常见的“数组”概念集成,因为数组通常被认为包含多个字节的值,例如int32。为了方便在NumPy中表示,cuStabilizer支持bit_packed参数,可以在不同格式之间切换。如果bit_packed=False,每个比特被编码为一个uint8值,因此会使用8倍的内存。在指定输入比特表时,其格式对性能也很重要,具体可查阅cuQuantum文档。

# 获取测量翻转
m_table = sim.get_measurement_bits(bit_packed=False)
print(m_table.dtype)
# uint8
print(m_table.shape)
# (2, 10000)
print(m_table)
# [[0 0 0 ... 0 0 0]
# [1 0 0 ... 0 1 1]]

x_table, z_table = sim.get_pauli_xz_bits(bit_packed=True)
print(x_table.dtype)
# uint8
print(x_table.shape)
# (5, 1252)

为了方便访问底层的Pauli帧,cuStabilizer提供了一个PauliTable类,可以通过采样索引进行访问。

# 获取Pauli表
pauli_table = sim.get_pauli_table()
num_frames_print = 5
for i in range(num_frames_print):
    print(pauli_table[i])
    # ...XZ
    # ZXX..
    # ...Z.
    # .....
    # ...Z.

当我们利用采样API时,会发现与谷歌(Google,美国公司)Stim(在最新的数据中心CPU上运行的顶尖代码)相比,吞吐量有了显著提升。

实战演练:表面码模拟

cuStabilizer可以接受Stim电路作为输入,这意味着您可以用它来模拟表面码(surface code)电路,这是量子纠错领域的核心研究方向。

import stim

p = 0.001
circ_stim = stim.Circuit.generated(
    "surface_code:rotated_memory_z",
    distance=5,
    rounds=5,
    after_clifford_depolarization=p,
    after_reset_flip_probability=p,
    before_measure_flip_probability=p,
    before_round_data_depolarization=p,
)

circ = cust.Circuit(circ_stim)

sim = cust.FrameSimulator(
    circ_stim.num_qubits,
    num_shots,
    circ_stim.num_measurements,
    num_detectors=circ_stim.num_detectors,
)

sim.apply(circ)

pauli_table = sim.get_pauli_table()
for i in range(num_frames_print):
    print(pauli_table[i])

需要注意的是,最高效的模拟是在大规模采样和大量量子比特数下实现的。此外,当结果比特表保留在GPU上时(例如通过使用cupy包),性能最佳。图2展示了cuStabilizer在NVIDIA B200 GPU和英特尔至强铂金8570 CPU上的最佳使用场景和预期性能。它表明,对于距离为31的表面码,最佳性能在大约一百万次采样时实现。在处理大型代码距离时,用户可以获得1060倍的速度提升,这无疑是量子纠错研究和应用领域的巨大飞跃。
When comparing stim on Intel Xeon Platinum 8570 CPU to stim plus cuStabilizer on NVIDIA DGX B200 GPU for surface code from distance 2 to 75 each with 1 million shots, we see significantly better runtime scaling and performance. Users can expect to see between 6.7x and 1060.7x faster speedups at code distance 2 and 30 respectively.

图2. 在不同距离(2到75)和一百万次采样下,表面码的运行性能对比。此图比较了在NVIDIA DGX B200 GPU上运行Stim加上cuStabilizer与在英特尔至强铂金8570 CPU上运行Stim的性能。

实战专家提醒:风险前瞻与时效性

作为走在科技前沿的实战派,我们不仅要掌握最新的技术,更要对潜在的风险和变化保持警惕。量子计算领域发展日新月异,今天的先进工具可能明天就会有新的迭代。因此,持续学习、关注官方更新是确保技术栈时效性的关键。

同时,在利用这些工具进行大规模模拟时,数据的安全性与合规性也是我们必须重视的方面,尤其是在跨境数据流通日益严格的当下,确保您的模拟环境和数据处理流程符合相关法规至关重要。新媒网跨境认为,拥抱前沿技术的同时,风险管理和合规意识是不可或缺的。

开启你的量子探索之旅

cuQuantum SDK的最新功能持续突破GPU驱动的量子计算机模拟的边界,开辟了两大类全新的工作负载。这些工作对中大型量子器件的量子纠错、验证、确认以及算法工程至关重要。

想要立即体验cuQuantum cuPauliProp的强大功能吗?只需运行 pip install cupauliprop-cu13 即可。要了解更多细节,请查阅cuPauliProp的官方文档。
同样,对于cuQuantum cuStabilizer,您可以通过 pip install custabilizer-cu13 进行安装。更多信息,请参考cuStabilizer的详细文档。

新媒网(公号: 新媒网跨境发布),是一个专业的跨境电商、游戏、支付、贸易和广告社区平台,为百万跨境人传递最新的海外淘金精准资讯情报。

本文来源:新媒网 https://nmedialink.com/posts/nv-cuq-quantum-sim-1060x-boost-large-circuits.html

评论(0)
暂无评论,快来抢沙发~
NVIDIA cuQuantum SDK v25.11发布,cuPauliProp加速量子态演化模拟,尤其适用于含噪声电路。cuStabilizer加速量子纠错和AI数据生成,表面码模拟性能提升显著。GPU在量子模拟领域展现强大潜力,但需关注技术迭代和数据合规。
发布于 2025-12-17
查看人数 87
人民币汇率走势
CNY
亚马逊热销榜
共 0 SKU 上次更新 NaN:NaN:NaN
类目: 切换分类
暂无数据
暂无数据
关注我们
NMedia
新媒网跨境发布
本站原创内容版权归作者及NMedia共同所有,未经许可,禁止以任何形式转载。