KY1, Bertran Shao2, Adam Sun
Amazon HERO;2.开发者生态负责人;3.Solutions Architect2022.11.17,启科量子正式开源其内部团队研发的量子线路模拟器:QuSprout 软件。结合早前其开源的启科量子编程框架 QuTrunk,开发者可以基于启科的量子计算平台实现真正的量子编程。因为 QuSprout 的性能水平直接影响量子编程计算的效率,而 QuSprout 本身又严重依赖硬件平台。众所周知亚马逊云科技是全球著名云计算服务提供商,提供了丰富的硬件平台,故如何将 QuSprout 与亚马逊云科技高性能服务实现有机的融合,将变得非常有意义。今天我们会将 QuSprout 部署在亚马逊云科技高性能计算(HPC)平台上,并对比分析 QuSprout 在 CPU 以及 GPU 两种不同硬件平台的计算效率。
1、QuSprout 简介
QuSprout 是启科量子自主研发的一款免费、开源的量子计算模拟后端,用户在 QuTrunk 量子编程框架生成量子线路后,需要连接到 QuSprout 计算后端来进行模拟计算。
同时,QuSprout 支持多个量子线路的任务管理、MPI 多进程并行计算。目前支持 Kylin,Ubuntu,CentOS 操作系统,支持在 x86,arm64 体系上编译部署,(建议使用 KylinV10,Ubuntu22.04,CentOS7.9)
量子模拟方面,QuSprout 通过 RPC 与 QuTrunk 量子编程框架连接,主要负责量子线路的任务管理、
QuSprout 使用 C++ 作为宿主语言,目前已经实现40+个量子门,包括 H, CH, P, CP, R, CR, Rx, Ry, Rz等,为量子线路的计算提供了更高的性能和更强大的灵活性。
QuSprout 已经支持 CPU 和 GPU 两种类型的硬件平台,目前开源的版本为 CPU 版本,GPU 版本目前还在内测中,相信不久也会实现开源。
2、关于 Amazon HPC 平台
P3 实例:
Amazon EC2 P3 类型实例基于 NVIDIA Tesla V100 Tensor Core GPU,最多支持8 GPUs,可为用户提供高性能计算平台,支持基于CUDA的加速程序,通常用于 HPC 程序、机器学习等场景。
本文采用 p3.2xlarge 实例作为 QuSprout 底层 GPU 的硬件平台,它为单 GPU 显卡实例,显卡型号为 NVIDIA Tesla V100-SXM2,拥有640 Tensor Cores,5120 CUDA Cores,其双精度浮点(FP64)运算性能可达7TFLOPS,单精度(FP32)可达14TFLOPS,具体实例的详细参数如下表所示:
M5 实例:
M5 家族的实例属于计算、内存、带宽相对均衡的一种资源类型,可以用来作为 web 服务器,计算集群,游戏服务器等。拥有 Intel Xeon Platinum 8000 以及 AMD EPYC 7000 系列的 CPU 可供选择。
本文采用 m5.8xlarge 类型的实例作为 QuSprout 底层 CPU 的硬件平台,它的 CPU 类型为 Intel® Xeon® Platinum 8259CL CPU @ 2.50GHz,具体实例的详细参数如下表所示:
3、部署 QuSprout
首先在 Amazon Console 中申请创建 m5.8xlarge和p3.2xlarge 实例,待实例初始化成功后,可通过 SSH 远程连接到对应的 EC2 实例。然后从 Github 拉取最新的 QuSprout 代码, 根据 README 文档,进行编译和安装即可,整个过程通过脚本执行,简单方便。
最后安装 QuTrunk,因为 QuSprout 是后端的量子线路模拟器,需要与前端量子编程框架 QuTrunk 联合使用。同样从 Github 拉取最新的 QuTrunk 代码,根据 README 文档,通过脚本安装即可。
注:本文测试为了避免网络带宽对计算效率的影响,选择将 QuTrunk 与 QuSprout 部署在同一个 EC2 实例上。通过在 QuTrunk 中配置 QuSprout 服务程序的 IP 和端口,即可实现两者的通信。
4、测试 QuSprout 性能
QuTrunk 和 QuSprout 部署完成后,就可以进行量子编程的开发了。此处我们以 grover 搜索算法为例,记录 QuSprout 分别在 m5.8xlarge(CPU)以及p3.2xlarge(GPU)两个平台上的运行效率,通过模拟不同数量的量子比特,统计相应平台的计算时间和资源消耗信息。具体内容如下所示:
4.1 grover 搜索算法源码:
"""Grover's search algorithm."""
import math
import random
from numpy import pi
from qutrunk.circuit import QCircuit
from qutrunk.circuit.gates import Measure, All
from qutrunk.circuit.ops import PLUS, QAA
def run_grover(qubits=10, backend=None):
# Quantum qubits
num_qubits = qubits
# Number of amplitudes
num_elems = 2**num_qubits
# Count of iteration
num_reps = math.ceil(pi / 4 * math.sqrt(num_elems))
print("num_qubits:", num_qubits, "num_elems:", num_elems, "num_reps:", num_reps)
# Choose target state randomly
sol_elem = random.randint(0, num_elems - 1)
print(f"target state: |{str(sol_elem)}>")
# Create quantum circuit with local python simulator
circuit = QCircuit(backend=backend, resource=True)
# Allocate quantum qubits
qureg = circuit.allocate(num_qubits)
# Set inital amplitudes to plus state
PLUS * qureg
# Apply quantum operator(gates)
QAA(num_reps, sol_elem) * qureg
# Measure for all qubits
All(Measure) * qureg
# Run circuit in local simulator
res = circuit.run()
# Get measure result and print as int
out = res.get_outcome()
print("measure result: " + str(int(out, base=2)))
# Print quantum circuit resource information
circuit.show_resource()
# Print quantum circuit execution information
print(res.excute_info())
return circuit
if __name__ == "__main__":
# Run locally
circuit = run_grover()
4.2 计算结果:
表1(CPU(Intel® Xeon® Platinum 8259CL CPU @ 2.50GHz)
表2(GPU(NVIDIA Tesla V100-SXM2):
根据表1和表2中的时间与量子比特数,绘制如下图:
从图表中可以看出,在量子比特模拟数量相同的情况下 GPU 相对于 CPU 的计算速度有6~8倍的提升。当然不同实例的价格也不尽相同,在实际开发过程中,开发者可以根据自身的计算任务特点选择合适的实例类型,从而实现最大化的资源利用。
5、一键式部署
AMI 是亚马逊云科技提供和维护的镜像,它包含 EC2 实例创建时需要的所有信息。在启动实例时,需指定 (AMI)。也可以用同一个 AMI 配置启动多个实例。
用户通常可以将生产或者开发环境在 Amazon EC2 实例中进行部署,然后可以创建 EBS-backed AMI,这样就将完整的环境制作成了镜像,后续再次需要相关环境的 EC2 实例时,就可以直接选择相应的 AMI 即可。
AMI 的管理也非常方便,可以将其用于启动新实例,也可以在同一 Amazon Region 中复制 AMI,也可以跨 Region 复制,不再需要某个 AMI 时,还可以将其注销。
后续可以将 QuSprout 以及其它相关工具制作成 AMI,并投入 Marketplace,这样量子开发者就可以基于亚马逊云科技更加方便快捷的部署启科量子的软件开发环境,最大程度简化量子编程环境的搭建流程,为开发者提供更友好开发体验,让量子编程变得不再遥不可及。
作者介绍:
Keith Yan(丘秉宜)中国首位亚马逊云科技 Community Hero。
Bertran Shao(邵伟),启科量子开发者关系负责人,国内首个开源量子计算社区发起者
Adam Sun(孙海洋),启科量子解决方案架构师,GPU量子线路模拟项目负责人编辑文章