模拟/建模/设计

借助新的量子动力学功能加速 Google 的 QPU 开发

量子动力学描述了复杂的量子系统如何随时间演变并与其周围环境相互作用。模拟量子动力学极其困难,但对于了解和预测材料的基本特性至关重要。这在开发 量子处理单元(QPUs) 中尤为重要,量子动力学模拟使 QPUs 开发者能够了解其硬件的物理特性并改进其硬件。

量子动力学模拟与用于研究未来量子算法运行方式的主流电路模拟有所不同。电路模拟模拟了离散量子逻辑门应用下量子位的演变。这种简化视图将量子位与其周围环境的交互方式进行了理想化,从而排除了对真实噪音和其他因素的考虑。相比之下,量子动力学模拟全面地反映了量子系统如何随时间演变,揭示了量子过程的速度和准确性的基本限制。

为进行经典类比,可以使用应用于晶体管(抽象表示为 0 和 1)的二进制逻辑(AND、OR、XOR)对经典计算机的逻辑进行建模。然而,为了设计速度更快、性能更高的晶体管,电气工程师需要运行能够完全模拟设备物理特性的复杂模型,包括电压、电容和电流的波动。

设计更好的量子位和 QPU 也遵循同样的逻辑,模拟动力学模拟可以完全捕捉 QPU 的物理特性。这是晶体管物理建模的量子等效性。

The dynamics of transistors is a helpful analogy for quantum dynamics.
图 1、经典计算可以作为理解算法和动态模拟之间区别的有用类比。图片来源: Fredrik Brange (右上角) 和 qutip-qip (右下角)

动力学模拟具有极高的计算要求。随着 QPU 规模的增加,它们只有通过 GPU 超级计算加速才可行。

NVIDIA 现在提供的工具可以让所有 QPU 研究人员和开发者使用 GPU 加速的量子动力学模拟。 NVIDIA CUDA-Q 平台 内置的新动力学 API 可与许多预打包求解器(用于求解基础微分方程的工具)结合使用,或者研究人员可以直接利用强大的代码驱动 CUDA-Q 动力学计算,并使用 低级 NVIDIA cuQuantum SDK 库 围绕自己的自定义求解器开发量子动力学模拟器。

本文将探讨 Google 如何使用 CUDA-Q 功能来模拟其 QPU 组件。它还对 CUDA-Q 动力学和 cuQuantum 驱动模拟的性能进行了基准测试,并提供了使用 CUDA-Q 进行动力学计算的入门指南。

加速 Google 的量子计算研发 

Google 与 NVIDIA 合作,加速其求解器运行模拟,以指导其 QPU 开发。准确的模拟可以作为 QPU 的数字表示,并且通常可以避免在设计过程中进行昂贵或不切实际的实验。Google 开发了自己的求解器,并利用了低级 cuQuantum 库提供的动态 API。

Google 和 NVIDIA 已经使用动态模拟来探索两个初始系统。第一个是海森堡模型(Heisenberg model)自旋链,Google QPU 在模拟模式下运行。该系统模拟的准确结果为对 Google 的 QPU 进行基准测试以及确定处于模拟模式时运行的前景广阔的应用程序提供了依据。第二个是与共振器和 Purcell 滤波器合的超导量子位(transmon qubit),这是一个关键子系统,阻碍了超导量子位的测量速度。

利用 cuQuantum Dynamics API 提供的多 GPU、多节点功能,完成了 40 量子位的自旋链模拟(图 2)。该模拟在 NVIDIA Eos AI 超级计算机上使用了 1,024 个 NVIDIA H100 GPU。这是迄今为止执行的规模最大的 QPU 精确动态模拟,为 Google 探索以前难以驾驭的系统打开了大门。

在图 2 中,亮蓝色和黄色点表示应用于单个量子位的测量结果的频率不断增加,从而创建测量引起的相位过渡以及由此产生的局部量子态。

Graph showing that Google was able to simulate a 40 qubit spin-chain with cuQuantum and observe measurement-induced phase transitions.
图 2 、借助 NVIDIA 加速的动态功能,Google 能够以 40 个量子位执行迄今为止规模最大的动态模拟

Google 的研究结果表明,多节点、多 GPU 的功能可以将模拟应用于此前研究人员难以解决的问题规模。随着 GPU 的增加,该软件表现出令人印象深刻的强扩展性。

图 3 显示了主方程评估运行时,用于模拟多达 64 个电平的 transmon 量子比特与多达 256 个电平的共振器以及具有四个电平 (64、256、4) 的 Purcell 滤波器,同时增加 GPU 数量。假设工作流程为 100 个时间步长 (使用 RK4 集成时,每个时间步长 4 个操作,共执行 400 个操作员操作),从使用 Qiskit Dynamics (在双插槽英特尔 Xeon 8480CL 上运行) 时的超过 12 天缩短到使用 cuQuantum (使用八个 GPU 进行最大系统基准测试) 时的 2 分钟。

此模拟的结果直接有利于 Google 的硬件开发周期。通过更快地模拟设备的更大单元,Google 可以在制造前更好地识别出更有前景的设计,从而节省大量的时间和资源。

Graph showing simulation times for a transmon, resonator, and filter system compared to Qiskit Dynamics.
图 3. 主方程评估运行时,用于模拟多达 64 个级别的 transmon 量子位,多达 256 个级别的共振器,以及一个具有四个级别的 Purcell 滤波器(64, 256, 4)

使用 CUDA-Q 加速量子动力学 

CUDA-Q 还提供了额外的功能,可以使用自己的内置求解器完全模拟整个工作流程,包括使用时间积分器求解 Lindblad 主方程。使用 CUDA-Q 在单个 NVIDIA H100 GPU 上提供的求解器,对 N 个量子位 的自旋链进行了单个 GPU 基准测试,最高可达 14 个噪声量子位。

将结果与两个领先的 CPU 模拟器(在英特尔 Xeon Platinum 8480CL 上运行)和一个领先的 GPU 模拟器(图 4)进行比较时,发现 CUDA-Q 的速度提高了近 22 倍,而另一台 CPU 模拟器的速度则随着量子位数量的增加呈指数级下降。

Bar chart showing CUDA-Q speedups for simulating an N qubit spin chain compared to Qiskit Dynamics.
图 4 、与 Qiskit Dynamics 相比, N 量子位自旋链的 CUDA-Q 动力学模拟

构建您自己的加速模拟 

您可以使用 NVIDIA CUDA-Q 的量子动力学功能轻松准备自己的 GPU 加速模拟。本节概述了一个使用 CUDA-Q 来模拟与共振器合的 transmon 量子位的示例,论文名为 Charge Insensitive Qubit Design Derived from the Cooper Pair Box

此模拟的目标是了解系统的粒子数和正交如何随时间演变。正交是用于理解 transmon 量子比特测量过程的关键观察点。以下步骤展示了使用 CUDA-Q 运行量子动力学模拟的简单性,以了解系统的粒子数和正交如何随时间演变。

首先,导入 CUDA-Q 以及必要的辅助包,并将 CUDA-Q 设置为 dynamics 目标。

import cudaq
from cudaq import operators, spin, Schedule, ScipyZvodeIntegrator
from cudaq.operator import coherent_state
import numpy as np
import cupy as cp

cudaq.set_target("dynamics")

接下来,准备好论文中使用的模拟参数。

# Number of cavity photons
N = 20

# System dimensions: transmon + cavity
dimensions = {0: 2, 1: N}

# System parameters
# Unit: GHz
omega_01 = 3.0 * 2 * np.pi  # transmon qubit frequency
omega_r = 2.0 * 2 * np.pi   # resonator frequency

# Dispersive shift
chi_01 = 0.025 * 2 * np.pi
chi_12 = 0.0

然后,使用 CUDA-Q 定义常见的运算符,例如创建、消灭、数字和 Pauli 运算符。代码还为将在此模拟中使用的腔和 transmon 运算符设置别名。

# Alias for commonly used operators
# Cavity operators
a = operators.annihilate(1)
a_dag = operators.create(1)
nc = operators.number(1)
xc = operators.annihilate(1) + operators.create(1)

# Transmon operators
sz = spin.z(0)
sx = spin.x(0)
nq = operators.number(0)
xq = operators.annihilate(0) + operators.create(0)

在指定运算符和参数后,系统的有效哈密顿量 \hat{H}_{\mathrm{eff}} = \frac{\hbar\omega'_{01}}{2}\hat{\sigma}_z + (\hbar\omega'_r +\hbar\chi\hat{\sigma}_z)\hat{a}^\dagger\hat{a} 得到定义。有关此哈密顿量推导的更多信息,请参阅“ 从 Cooper Pair Box 导出的电荷不敏感量子位设计 ”第 3.8 节。

omega_01_prime = omega_01 + chi_01
omega_r_prime = omega_r - chi_12 / 2.0
chi = chi_01 - chi_12 / 2.0
hamiltonian = 0.5 * omega_01_prime * sz + (omega_r_prime + chi * sz) * a_dag * a

此外,还需要准备超导量子比特(transmon)和谐振腔(cavity)的初始状态。在本例中,选择以叠加状态准备两者。

# Transmon in a superposition state
transmon_state = cp.array([1. / np.sqrt(2.), 1. / np.sqrt(2.)],
                          dtype=cp.complex128)

# Cavity in a superposition state
cavity_state = coherent_state(N, 2.0)
psi0 = cudaq.State.from_data(cp.kron(transmon_state, cavity_state))

最后指定日程表。它设置模拟的集成时间步长和捕获的其他参数。

steps = np.linspace(0, 250, 1000)
schedule = Schedule(steps, ["time"])

这提供了使用 evolve 函数运行模拟所需的所有先决条件,该函数将哈密顿量、系统维度、时间表、初始状态和可观测量作为输入。还可以指定用于执行数值时间积分的积分器。此示例使用了 Python 科学计算库 SciPy 中的一个:

evolution_result = cudaq.evolve(hamiltonian,
                          dimensions,
                          schedule,
                          psi0,
                          observables=[nc, nq, xc, xq],
                          collapse_operators=[],
                          store_intermediate_results=True,
                          integrator=ScipyZvodeIntegrator())

模拟完成后,可以提取期望值以检索腔光子数和正交等量。之前代码中定义的 observables 列表可确定计算哪些可观测数据及其索引方式。

get_result = lambda idx, res: [
    exp_vals[idx].expectation() for exp_vals in res.expectation_values()
]
count_results = [
    get_result(0, evolution_result),
    get_result(1, evolution_result)
]

quadrature_results = [
    get_result(2, evolution_result),
    get_result(3, evolution_result)
]

通过在上述模拟中包含折叠运算符,从而使 transmon 和腔体衰减,可以生成噪声结果。过程相同,但在这种情况下,折叠运算符 0.1*a0.1*spin.minus(0) 包含在之前空的 collapse_operators 列表中,并再次调用 evolve 函数。如需查看完整代码以生成有噪声和无噪声的结果,请参阅 NVIDIA/cuda-quantum GitHub 库获取文档。

图 5 显示了腔光子数和透射激发概率的有噪声和无噪声结果。引入噪声会导致更逼真的行为,即腔光子数随时间推移而减少。这一模拟还可得到正交结果,用于更好地理解量子比特在测量期间如何与共振器交互。

Graph showing example simulation results with and without noise.
图 5. 腔光子数与透射激励概率的模拟结果 (有噪声和无噪声)

请参阅 CUDA-Q 文档 ,了解如何模拟其他系统的演示,并详细了解可用于动态模拟的其他功能。其中包括 一个准备模拟的示例 ,该模拟可直接在 QuEra 模拟量子处理器上运行,使用相同的 API 并尽可能减少代码更改。

开始使用 

借助新的 CUDA-Q cuQuantum 动力学功能,研究人员能够以前所未有的速度和规模运行量子动力学模拟。随着 QPU 制造商将其硬件扩展到早期量子纠错机制,具有此功能的工具变得至关重要。

下载 CUDA-Q 开始尝试动态模拟。您可以立即运行代码,利用其内置求解器。要查看一些动态示例笔记本,请访问 GitHub 上的 NVIDIA / cuda-quantum

如果您想构建自己的自定义量子动力学求解器,请 下载 cuQuantum 以将其加速几个数量级。

详细了解 NVIDIA 量子计算

 

标签