5月26日腾讯量子实验室正式发布开源了高性能量子线路和量子算法模拟框架 TensorCircuit。本文将进一步介绍分析 TensorCircuit 作为量子软件产品的优势和特色,并展示 TensorCircuit 助力量子科技发展创新和落地的真实场景和具体案例。我们欢迎量子计算相关的科研人员加入 TensorCircuit 开源社区,共筑面向未来的量子生态。
01 背景
NISQ 时代
20 世纪 80年代以来,量子计算的概念兴起并迅速严格化,相应的学科快速发展。在量子硬件还没有成熟的背景下,计算机辅助的量子计算模拟,也即量子软件是进行量子计算相关研究和应用的最重要的工具和平台。
量子硬件在近十多年有突破性进展,但离大规模容错量子计算仍有一定距离。在这个中间阶段,Preskill 在 2018 年提出了中等规模含噪声量子硬件(NISQ)的概念。业内也非常希望在有应用价值问题上实现量子优势,这变成了近期量子计算研究和落地的重要课题。量子计算领域的研究范式也在 NISQ 的主题下发生了一定的变化,量子软件也需要相应地满足 NISQ 时代的新需求和新想法,特别是对变分量子算法的高效支持。
图 1. 量子计算的发展阶段和 NISQ 时代的特色与研究范式迁移
产业应用赋能
变分量子算法如量子变分本征求解器(VQE)和量子机器学习等量子经典混合计算方案,在近些年得到广泛关注。由于与深度学习的架构和变分优化问题的通用框架类似,这些不需要完整纠错的量子计算方案在近期显得颇具吸引力,也是在有价值问题上展示量子优势最有潜力的方向。除了科研价值,变分量子算法提供了更好更快地解决各个行业实际问题的一个新思路,这些算法的研究模拟也是赋能产业实践、推动量子技术落地的的重要环节。
图 2. 变分量子算法框架与量子经典混合计算范式的特点和应用
量子软件发展
参与到量子计算领域的大型公司多数都拥有自己的量子开源软件,比如 IBM 的 Qiskit、Google 的 Cirq 等。
这些第一代传统量子软件的主要问题包括:
1. 缺乏自动微分支持,求解量子梯度完全依赖于参数平移,对于 n 个变分参数的线路,需要测量 2n 个不同线路;
2. 和机器学习库融合不好,没有自然简洁的交互界面;
3. 多数不支持 GPU 模拟,模拟效率和硬件的灵活性存在瓶颈。
而更加适应 NISQ 时代科研和应用需求的的下一代量子软件至少应相应地满足:
1. 支持自动微分;
2. 支持和机器学习库的交互;
3. 具有异构硬件如 GPU 的支持。
面向这些需求的下一代量子软件产品已经出现了一些,但是都存在诸多缺陷,比如自动微分支持不完整,支持的机器学习界面和后端固定不通用,不支持 GPU 模拟,模拟运行效率差和线路模拟核心功能支持不完整等。
腾讯量子实验室推出的 TensorCircuit 作为下一代量子模拟软件,很好地解决了以上核心痛点 ,并有如下特色。(参见:TensorCircuit: 腾讯发布高效量子模拟开源软件)
1. 支持自动微分,包括很多高级的自动微分技巧。针对数值稳定的 QR 分解,复数 SVD 分解等高级线路模拟出现的操作算子,市面上只有 TensorCircuit 可以支持正确的反向传播,其正确的反向传播公式来自 TensorCircuit 作者的学术文章。同时TensorCircuit 支持更多高级的自动微分接口,包括同时支持前向、反向自动微分,支持 vjp、jvp、jacobian和hessian 等多种计算接口。
2. 完美支持 TensorFlow、PyTorch 和 JAX 三大最主流的机器学习库,接口灵活,零额外开销。设计理念先进,量子模拟部分原生支持自动微分、即时编译、向量并行化等现代深度学习的高效工程实践。
3. 支持异构硬件 GPU 模拟和 TPU 模拟。
4. 基于张量网络的模拟引擎,拥有与市面上绝大多数量子软件完全不同的特色,可以突破态模拟器内存需求的局限性。
因此 TensorCircuit 是新一代量子软件的集大成者,也是首款比较完美全面地解决 NISQ 量子计算模拟痛点的软件框架。
02 优势
性能数量级跨越
- 时间性能
借助深度学习的先进工程实践和张量网络模拟引擎,TensorCircuit 在多样的量子模拟任务上相较其他产品有数量级的效率提升。我们这里列举几个具体任务上的加速表现(以下 benchmark 数据均来自白皮书文章,相应细节可参考白皮书)。
1. 物理模型哈密顿量期望计算:物理模型和化学分子的模拟评估,是量子计算机发挥作用的最重要领域之一,有望引领新材料和新能源的发现和创新。在最基础的格点模型能量评估上,我们引入了创新的算法和数据结构,实现了最高达数千倍的加速。
表 1. 20 格点横场伊辛模型能量计算:不同方案的时间比较
MPO 为 TensorCircuit 特有的方案
2. 量子机器学习分类问题:量子机器学习利用变分量子线路作为判别器进行训练,有望实现较传统经典神经网络更加强大的泛化性能,从而体现量子优势。在量子机器学习模型训练这一任务上,TensorCircuit 效率大幅提升。以下数据中 Pennylane 软件的数据,也利用了 TensorCircuit 最新的设计理念和方法论。
表 2. 输入数据不同 batch 尺寸下的量子机器学习判别器训练单步时长比较
TensorCircuit 可以实现相较 TensorFlow Quantum 近百倍加速
3. 贫瘠高原现象梯度方差计算:贫瘠高原描述了典型参数化量子线路上的梯度消失现象,是量子变分算法领域的科研热点和工程难题。准确而高效地计算随机线路上的梯度方差,是解决和理解这一现象的基础。在这一任务上,TensorCircuit 表现出了 500 倍以上的速度提升。
表 3. 计算100个10量子比特随机线路参数梯度方差的性能比较
- 空间性能
张量网络引擎和创新的缩并路径查找算法,在大幅提升量子线路模拟的时间效率,更能大幅优化模拟的空间效率,从而实现传统态模拟器无法完成的超大规模量子线路计算。TensorCircuit 可在单 GPU 上跑通 600 量子比特(4200个双比特门)完整的一维 VQE 工作流。
具体案例可参考:
对于该 600 比特系统,单步计算能量和全部线路梯度的耗时仅在 18s 左右,而主流量子模拟软件无法实现对该规模系统的能量和梯度的计算。TensorCircuit 变分优化算法的模拟规模是有文献参考的世界纪录。
功能支持丰富
在保证了下一代量子软件的先进设计范式的同时,TensorCircuit 支持的量子模拟功能丰富全面。很多功能组件和量子模拟器的底层紧密关联,无法通过用户层的代码实现,这些支持在大多数现有量子软件的缺失阻碍了通过其他软件产品进行相应的量子研究的可能性。下图 3 包含了一些 TensorCircuit 支持的部分核心功能在其他软件支持情况的对比。容易看出 TensorCircuit 在重要功能支持的丰富性上远远超过其他软件。
表格中包含的一些 TensorCircuit 支持的特色功能包括如:
- Input state in MPS form:TensorCircuit 支持线路输入波函数是任意张量网络的形式。对于张量数值方法计算基态后接量子模块做处理的流水线,这一功能是不可或缺的。
- Nonunitary gate:TensorCircuit 支持非幺正门的直接模拟,这对于很多量子物理方向的研究非常有帮助,且几乎所有其他量子软件都不支持。
图 3. 部分量子模拟功能对比:绿色表示完整支持,橙色表示部分支持但存在明显缺陷,红色表示不支持
接口设计简洁
TensorCircuit 坚持简洁和优雅的 API 设计。同时努力避免无意义的过度封装和抽象,防止 API 设计像某些量子软件一样存在过多的概念嵌套和复杂的底层逻辑。在用户侧实现底层透明和简洁易用的完美平衡,真正做到让用户像写普通 Python 函数一样进行量子编程,降低用户的学习成本和负担。
下图展示了用不同的软件实现相同的标准任务所需要的代码行数,其中 VQE 子任务对应计算参数化线路的哈密顿量期望和线路梯度,而 QML 子任务对应构造变分线路分类器对应的 keras 层。两个子任务均是变分量子算法中的基础组件。除了下图显示的代码行数对比,TensorCircuit 在需要显式导入的包上也表现出了经济性。完成上述任务,TensorFlow Quantum 需要导入 5 个 Python 包,而 TensorCircuit 只需一个包即可自洽地完成相应功能。任务和实现细节可以参考:
图 4. 不同量子软件对于一些标准量子计算任务实现需要的代码行数
(tfq: TensorFlow Quantum, tc: TensorCircuit)
框架灵活可扩展
TensorCircuit 的软件架构概况图 5 所示。我们通过封装机器学习的算子构造了统一的 TensorCircuit 算子层,实现了多机器学习后端的统一。灵活的接口和插件设计,使得动态调整机器学习后端、机器学习界面、模拟数值精度和张量网络缩并引擎都可以用一行代码完成。
图 5. TensorCircuit 软件架构概览
TensorCircuit 软件原型开发和开源开始于 2020 年 4 月,我们一直脚踏实地开发迭代,不跟风,不盲从,不取巧。研发从一开始设计理念就是面向开源,面向社区的,因此无论是代码可读性,插件的支持,扩展的灵活性上,都非常先进。现在 TensorCircuit 已具有极高的软件完成度和坚实的开源基础设施建设。TensorCircuit 支持中英双语文档和教程,具有 20 多个完整的 Jupyter 案例教学和 30 多个展示软件使用不同侧面和流水线的 Python 实例脚本。且随软件发布了超过 40 页的白皮书文章。同时我们软件积极拥抱开源,拥有代码格式检查、类型检查、测试覆盖率检查等完整的持续集成基础设施。支持直接通过 pip 安装且有官方 GPU 支持的 docker 镜像。下图展示了 TensorCircuit 的产品优势和特色。
图 6. TensorCircuit 产品优势特色概览
03 科研案例
TensorCircuit 先进的设计理念和出色的性能表现已经在真实情景助力量子科研发展,下面我们简要列举三项量子算法领域的创新性工作,这些算法的设计实现和分析离不开 TensorCircuit 的特色功能和超高效率。
TensorCircuit 打造无缝的量子-神经网络流水线
在 Variational Quantum-Neural Hybrid Eigensolver 这一工作中,我们构造了相比之前 IBM 研究工作指数加速的量子线路和神经网络结合的实验方案,实现了在多个系统上能量优化精度的跨数量级提升。这一算法的实现和数值模拟需要构造从参数化量子线路到对输出波函数进行神经网络调幅的完整流水线,且可以通过梯度下降对量子和经典参数进行联合更新优化。这类量子-神经网络混合的工作流的实现,是 TensorCircuit 的典型应用。而 TensorCircuit 的高效率,保证了我们有足够的的算力和自由度来进行算法迭代和超参数调优,从而更好地近似能量基态。
这一工作已发表在物理学顶刊 Physical Review Letters,具体细节可以参考之前的报道文章:腾讯量子研究最新进展:实现变分量子线路和神经网络融合的指数加速
TensorCircuit 实现不同线路结构的向量批处理
在 Differentiable Quantum Architecture Search 这一工作中,我们在国际上首次提出和总结了量子结构搜索的概念及其外延。在这一工作中,每次结构搜索迭代,需要对取样到的多个不同结构的线路上的目标函数进行评估,这一算法的常见实现是利用简单的 for 循环或多进程。但其效率在取样线路数目较大的时候都不理想。利用 TensorCircuit 可以直接构建“超级线路”,使得线路的不同结构也可以通过连续的张量参数来控制。由此我们可以通过向量并行化该结构参数,来实现不同线路结构的并行化模拟,其可以在模拟单个线路的时间模拟上百个不同线路,加速远远超过多进程多线程方案,实现更加简单且与硬件平台解耦。
该工作可参考:
TensorCircuit 加速简化变分量子虚时间控制演化
在 Variational quantum simulation of the imaginary-time Lyapunov control for accelerating the ground-state preparation 这一工作中, 我们首次将 Lyapunov 控制算法应用于量子虚时间演化,实现基态求解的指数加速。并且结合变分算法将此量子虚时间控制算法在量子线路上高效实现。其中变分线路参数的更新取决于量子虚时间控制演化的动力学过程。这一过程的实现,具体来说需要搭建多个参数微分电路,测量后再解线性方程组获得更新参数,电路深度取决于系统复杂度,测量量取决于参数数量。而利用 Tensorircuit 的高级自动微分功能,可以完全避免辅助电路的搭建,全部虚时演化方程中的元素的求解时间压缩到和单一线路测量同一量级,从而实现更大比特数目的虚时间变分线路的参数更新。
该工作可参考:
04 开始使用
安装和文档
pip install tensorcircuit 即可开始在 Python 生态中体验 TensorCircuit 的完整功能。
Hello world
我们以最简单的横场伊辛模型 VQE 作为 Hello world 案例,快速了解 TensorCircuit 的 API 概貌。
import tensorcircuit as tc
import tensorflow as tf
K = tc.set_backend("tensorflow")
nwires, nlayers = 4, 2
def vqe_forward(param):
c = tc.Circuit(nwires)
for i in range(nwires):
c.H(i)
for j in range(nlayers):
for i in range(nwires - 1):
c.exp1(i, i + 1, theta=param[2 * j, i], unitary=tc.gates._zz_matrix)
for i in range(nwires):
c.rx(i, theta=param[2 * j + 1, i])
e = sum(
[-1.0 * c.expectation_ps(x=[i]) for i in range(nwires)]
+ [1.0 * c.expectation_ps(z=[i, i + 1]) for i in range(nwires - 1)]
)
return K.real(e)
vgf = K.jit(K.value_and_grad(vqe_forward))
param = K.randn([2 * nlayers, nwires])
opt = K.optimizer(tf.keras.optimizers.Adam(1e-2))
for i in range(200):
energy, grad = vgf(param)
param = opt.update(grad, param)
if i % 10 == 0:
print(K.numpy(energy))
我们通过 set_backend 设定了该脚本利用 TensorFlow 作为模拟后端,vqe_forward 函数定义了输入线路参数,输出能量作为目标函数。线路结构如下图所示。
图 7. VQE 参数化线路结构
通过 K.value_and_grad,我们可以自动生成求线路梯度的函数;再通过 K.jit 可以直接生成即时编译版本的函数,其具有更快的模拟速度。
最后主优化循环优化的能量曲线历史如下图所示。
图 8. VQE 能量优化曲线
协作和参与
如果对该软件有兴趣,请在 GitHub 为代码库点亮 Star。如果 TensorCircuit 帮助到了您的科研工作,欢迎引用我们的白皮书文章。
点亮 Star:
白皮书文章:
如果您想在教学或活动中使用 TensorCircuit,非常欢迎直接和我们联系。
相关链接:
欢迎转载和引用本文内容。
(TensorCircuit: 腾讯发布高效量子模拟开源软件)[/news/2022/0526_1215]
(量子电路编译最新进展:探索软硬件联合编译方式对抗量子计算机过程中的串扰噪声)[/news/2022/0309_1720]
(腾讯量子研究最新进展:首次实现量子开放系统的绝热演化捷径)[/news/2022/0114_1542]
(腾讯量子计算最新研究进展:高效超导量子比特初始化方案)[/news/2021/1027_1616]
(腾讯公布量子计算机体系结构最新研究进展,探索高并行性架构)[/news/2021/0902_1109]