持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
导读 在处理某些规模庞大和复杂的数据与计算时,量子计算独有的叠加和纠缠特性在算力方面相比于经典计算表现出强大优势。现阶段,由于量子计算机的研发受限于有效的量子比特数、相干时间长度、量子门操作精度等,对量子计算机的研究焦点进而转向量子模拟器,量子模拟器也因此成为发挥量子优越性和研究量子算法的有效途径。采用具有超强算力的计算机模拟量子计算过程,是目前研究量子计算、辅助量子计算机执行任务的一种方式。本文将从量子计算模拟、异构计算系统、NVIDIA Linux GPU内核模块开源等几个方面介绍量子模拟的相关研究情况。5月11日,英伟达宣布正式开源其Linux GPU内核模块,且具有GPL和MIT双重许可证。开发者可以在GitHub上的英伟达Open GPU Kernel Modules repo 中查找内核模块的相关源码。GitHub 地址:github.com/NVIDIA/open…
0 1 量子计算模拟
量子计算模拟器
量子计算机侧重于计算功能,量子模拟器侧重于比对模拟功能。从理论上讲,量子计算机能计算各类材料的性质,包括如催化剂、药物、太阳能电池和蓄电池,帮助研究人员省去很多费时费力的探索性实验。
在NISQ时代(即含噪声的中型量子,NISQ全称:Noisy Intermediate-Scale Quantum)高量子噪声是量子计算机的研发难点。尽管量子比特性能强大,但量子位的数量尚不过百,极其容易受到外界环境干扰而导致其状态遭到破坏。
量子模拟器可以实现在不受量子噪声的影响下开发量子应用程序,且可执行的量子程序规模不会受到物理量子计算机保真度的制约。因此,量子模拟器(Quantum simulators)是量子计算机研究中的一种很好的替代方案。量子模拟器是在经典计算机上实现对量子计算机的模拟,其运行完全遵照量子计算机的规律,也可称其为量子虚拟机。
经典-量子混合计算
经典的计算机更擅长于处理传统的代码语句,如条件判断语句等;而量子计算机则更擅长于处理各种量子逻辑门的操作。因此在使用经典计算机实现一段量子算法时,传统的代码块将返回给经典计算机处理,而量子逻辑门等操作则返回给量子计算机处理。在可通用量子计算机问世之前,经典-量子混合计算将是一个很好的发展方向。其中的量子模拟器可以替代量子计算机,模拟完成理论中量子比特的全部状态并返回最后的真实结果。
通用的量子模拟器
但对于量子系统而言,经典计算机由于没有足够的空间来存储和操作量子系统所含的信息,并不能有效地模拟其性质,因此经典计算机并不适用于模拟量子系统。而通用型量子模拟器则具有先天的优势,可以利用人工可控量子系统来比对模拟宇宙与自然界中各种不同量子及经典现象。
另一方面通用型量子模拟器可以实现任意的量子态演化, 和通用型量子计算机具有完全同样的功能。基于量子计算原理,国内外有许多公司设计和开发了大量的量子模拟器,如IBM公司开发的QisKit、微软的QDK、启科量子QuSprout等。
基于超算集群的量子计算模拟
计算机集群是由一组相互独立的计算机通过高速的网络组成一个计算机系统,各计算机之间通过高度紧密地协作完成计算工作。从整体上看,计算机集群系统可被看作一台计算机,集群系统中的单个计算机则通常被称为节点。
通常计算机集群具有性能高、性价比高、可伸缩性强、可用性高等特点。通常一套系统的集群架构只需要两位数以内的服务器主机即可,与动则上百万的专用超级计算机相比具有更高的性价比和性能。集群系统中的结点数目可以增长至几千甚至上万个,其伸缩性远超过单台超级计算机。在计算机集群中,当一个模块失败时,模块上提供的服务可迁移到其他模块,可用性极强。
计算机集群通常可分为负载均衡集群(Load balancing clusters,简称LBC)、高可用性集群(High-availability clusters,简称HAC)、高性能计算集群(High-perfomance clusters,简称HPC)三类。
高性能计算集群即HPC采用将计算任务分配到集群的不同计算节点的方式提高计算能力,主要应用于数据量大或计算需求大的领域,特别适合于各计算节点之间发生大量数据通讯的计算作业。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算,这种集群配置通常被称为Beowulf集群。Beowulf集群通常会运行特定的程序以发挥HPCcluster的并行能力。
超级计算集群(Super Computing Cluster,SCC)使用高速RDMA网络互联的CPU及GPU等异构加速设备,大幅提升网络性能,提高大规模集群加速比。超级计算集群主要用于高性能计算和人工智能、机器学习、科学计算、工程计算、数据分析、音视频处理等场景。在集群内,各节点间通过RDMA(远程直接数据存取)网络互联,提供高带宽低延迟网络,可以保证高性能计算和人工智能、机器学习等应用的高度并行需求。同时,RoCE(RDMA over Convergent Ethernet)网络速度达到InfiniBand网络级的性能,且能支持更广泛的基于Ethernet(以太网)的应用。
基于超级计算集群的量子计算模拟主要涉及任务拆分和通信优化两项影响性能的关键问题。拆分任务即拆分量子线路为多个子线路,并将其分配至不同的节点进行计算。通信优化即节点间通信次数以及单次通信传输数据量的优化,不合理的通信策略可能造成节点间带宽拥堵、通信延时增加、节点数据饥饿等问题。
02 启科量子编程框架QuTrunk
启科量子自主研发一款量子编程框架QuTrunk,为量子编程开发提供了一个通用的软件环境。 QuTrunk使用Python作为宿主语言,利用Python的语法特性实现针对量子程序的DSL(领域专用语言),所有支持Python编程的IDE均可安装使用QuTrunk。
QuTrunk基于量子逻辑门、量子线路等概念提供量子编程所需的各类API。这些API分别由相应的模块实现,比如QCircuit实现量子线路功能,Qubit实现量子比特,Qureg实现量子寄存器,Command对应每个量子门操作的指令, Backend代表运行量子线路的后端模块,gate模块实现了各类基础量子门操作。同时QuTrunk还可以作为其他上层量子计算应用的基础,比如:量子算法、量子可视化编程、量子机器学习等。
以下为QuTrunk主要优势:
-
灵活扩展:当选择与Qubox连接进行模拟计算时,量子线路当所有状态都由后端 Qubox 维护,极少占用本地资源,QuTrunk只提供量子编程api;当选择本地模拟是(计划第二版实现),QuTrunk成为量子编程+量子模拟的全栈框架
-
各种量子门操作,这些门操作的主要特点是通过重载 | 运算符,提供一种近似物理表达式的运算操作,给从事量子编程/计算的工作者一种更为直观的表现形式
-
提供经典与量子混合编程,当经典算法与量子算法产生依赖交互时,QuTrunk通过量子线路分段执行机制,立刻将当前线路发送给后端,让后端运行然后获取运行结果
-
提供calulator模块,运行在不改变整个状态矢量当情况下获取线路的状态取值,比如计算某种状态的出现概率,计算所有状态的概率振幅等
-
整个量子算法结束时,需要调用量子线路QCircuit的flush方法,将QuTrunk生成的所有操作全部推送后端,并通知后端释放计算资源
-
量子线路初始化时,可以指定线路的初始化状态,目前支持设置零态和加态
-
量子线路支持噪声模型,可以在量子线路初始化时设置
-
支持量子线路打印,在终端以字符串方式打印
-
支持量子线路运行统计功能,统计:量子比特,量子门,运行耗时等
-
支持全振幅量子模拟
03 异构计算技术
异构计算,实际上就是在一个系统里整合多种架构,希望通过发挥不同架构的特点,以实现系统整体上更高的效率。在异构计算系统上进行的并行计算通常称为异构计算,是一种特殊形式的并行和分布式计算。异构计算系统是一套可支持异构计算的系统,由一组异构机器、将各异构机器连接起来的高速网络和相应的异构计算支撑软件三部分组成。
并行计算一般指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。并行计算的基本思路是将许多指令同时进行计算,并将计算过程分解成多个阶段,之后以并发的方式来加以处理。相比串行计算,并行计算可以划分为时间并行和空间并行。并发计算方式是按一个时间轮交替处理多个任务。异构计算可以提高算力和性能,降低功耗和成本,又具备多类型任务的处理能力。在介绍异构计算前需要了解串行计算和并行计算的相关概念。以下将简要介绍和对比串行计算与并行计算的概念和特点。
3.1串行计算与并行计算
串行计算
串行计算(Serial Computing)不将任务做拆分,有一个处理器按顺序依次处理被分解问题的指令。只有一个任务执行完成以后才会进入下一个任务处理阶段。一般而言,软件是为串行计算方式编写的。串行计算的问题处理过程如下:
-
首先将一个问题分解为一系列具体的指令;
-
这些指令将按顺序被执行;
-
串行计算只有一个处理器按顺序执行以上步骤种被分解的指令;
-
在任意时间点,串行计算都只执行一个指令。
并行计算
并行计算(Parallel Computing)又称平行计算,是指同时使用多种计算资源解决计算问题的过程,可分为时间并行和空间并行。时间并行在并行性概念中引入了时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。空间并行,在并行概念中引入空间因素,通过增加多个处理器大幅提高计算机的处理速度,大规模和超大规模集成电路是实现并行处理的一个主要途径。并行计算主要优势在于可以加快求解问题的速度和增大求解问题的规模。 简单来讲,并行计算是同时使用多个计算资源解决一个计算问题。并行计算的问题处理过程如下:
- 首先将问题分解为可同时处理的几个部分;
- 每一部分将被分解为一系列的指令集;
- 并行计算中,被分解的各部分都有对应的处理器,每部分的指令可在对应的处理器上依次执行;
- 并行计算采用整体机制或协调机制。
3.2CPU+GPU式异构计算系统
随着计算领域的高速发展和GPU可编程性的不断增强,GPU可应用范围远远超出图形渲染,部分GPU被用于图形渲染以外的计算领域。GPU逐渐“反客为主”,被用于原本应由CPU处理的通用计算任务。那么GPU的发展会完全取代CPU吗?业界认为未来的计算架构将会是CPU+GPU的异构运算体系。例如,OpenCL(简称,Open Computing Language)就是第一个为异构系统的通用并行编程而产生的统一的免费标准,广泛适用于多核心处理器(CPU)和图形处理器(GPU)。
近年来,很多超级计算集群使用异构计算的解决方案,即借助图形处理器GPU(graphics processing unit)等计算设备的运算能力、性能-功耗比、性能-芯片面积比等优势发展高性能计算。目前,国内外主流的高性能计算集群中,有许多超级计算机采用CPU+GPU的异构集群方案。
凭借GPU设备的大规模多核并行架构和高吞吐量的浮点计算能力和低功耗特点,GPU异构集群发展成为高性能计算集群的主流。目前异构计算的几个发展方向有集群计算(传统高性能计算的领域)、单机计算(CPU+GPU异构计算)、移动计算、嵌入式计算。
3.2.1CPU、GPU与QPU
GPU
GPU全称为Graphics Processing Unit(简称:GPU)。GPU即图形处理器又称为显示芯片,是一种做图像和图形运算相关工作的微处理器,通常包括图形显存控制器、压缩单元、BIOS、图形和计算整列、总接线口、电源管理单元、视频管理单元、显示界面。据2021年3月方正证券研究报告显示,全球GPU市场表现为寡头垄断下的高增长,年复合增长率超30%,主要市场份额被英伟达等美系企业占领。
QPU
QPU(Quantum Processing Unit)是指量子处理单元,利用量子叠加性快速遍历问题的各种可能性并找到正确答案。QPU算力随比特数n的增长呈幂指数2n增长。
CUDA
CUDA英文全称为Compute Unified Device Architecture,是显卡厂商NVIDIA在2006年推出的通用并行计算架构,为解决GPU编程的复杂度问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎,CUDA利用NVIDIA GPU中的并行计算引擎,可以使GPU解决复杂的计算问题。
CUDA还附带一个软件环境,允许开发人员使用C++作为高级编程语言。支持其他语言、应用程序编程接口或基于指令的方法,例如 FORTRAN、DirectCompute、OpenACC。
CUDA包含组件有:PTX ISA(并行计算核、函数)、用户态驱动(设备级API)、OS内核级支持(负责硬件初始化、配置等,为本次开源的Linux版GPU内核驱动)、GPU中的并行计算引擎。
CUDA架构中的两类接口分别是device-level编程接口和language integration编程接口,与启科自研QuSoil、QuRoot、QuSprout等的关系类似。Device-Level编程接口可直接配置GPU、发射核;Language integration编程接口可用C写计算函数,C Runtime for CUDA处理配置GPU和执行计算函数。
图为 CUDA组件
3.2.2CPU+GPU式异构计算
2020年IBM发布了首个发展量子计算技术的三年计划路线图“草图”,也可称为发展路线图。近日IBM更新了前述线路图,计划将QPU(量子处理单元)、CPU(中央处理器)和GPU(图像处理单元)编织到一个计算结构中,以解决超出传统资源范围的问题。最新路线图的目标是建造以量子为中心的超级计算机。它将结合量子计算机、经典计算机、量子通信网络和经典网络并使其协同工作,以彻底改变计算方式。
多年来,以CPU为中心的超级计算机一直是主要的计算处理器,而在过去几年里,以人工智能为中心的超级计算机出现,CPU和GPU可以在庞大系统中协同工作,解决人工智能繁重的工作负载。GPU的出现使计算机减少了对CPU的依赖,并解放了部分原本为CPU的工作。
在软件生态方面,GPU无法单独工作,必须由CPU进行控制调用才能工作,而CPU在处理大量类型一致的数据时则可调用GPU进行并行计算。GPU与CPU在功能上的差异是因为它们的设计目标不同。虽然CPU旨在以尽可能快的速度执行一系列称为线程的操作,并且可以并行执行数十个这样的线程。但GPU却能并行执行成千上万个(摊销较慢的单线程性能以实现更大的吞吐量),专门用于高度并行计算,因此设计时更多的晶体管是用于数据处理而不是数据缓存和流量控制。
在相同的价格和功率范围内,GPU可以比CPU提供更高的指令吞吐量和内存带宽。许多应用程序利用GPU的高指令吞吐量和内存带宽能力,在GPU上运行的速率远大于在CPU上运行的运行速率。
尽管GPU是为图像处理设计的,但GPU的架构并没有专门的图像处理算法,仅仅是对CPU的架构进行了优化。因此GPU不仅在图像处理中应用广泛,还在科学计算、密码破解大数据处理和金融分析等需要并行计算的领域中广为应用。
在实际计算问题中,CPU采用“串行”计算,将一个问题的若干部分按照顺序依次进行运算;GPU采用“并行”计算,即将一个问题拆成若干小问题后,同时对每个小问题的一部分进行运算;QPU利用量子叠加特性快速遍历问题的各种可能性并找到正确答案。CPU算力随比特数n的增长呈线性增长、QPU随n的增长呈n的平方次增长;QPU随n的增长呈幂指数2^n增长。
图为 CPU、GPU、QPU概念及原理对比
GPU与CPU核心设计思路对比
- CPU是以低延迟为导向的计算单元,通常由专为串行处理而优化的几个核心组成,而GPU是以吞吐量为导向的计算单元,由数以千计、更高效的核心组成,专为并行多任务而设计。
- CPU和GPU设计思路的不同导致微架构的不同。CPU的缓存大于GPU,但在线程数上、寄存器数目和SIMD(单指令多数据流)方面GPU远强于CPU。
- 微架构的不同最终导致CPU中大部分的晶体管用于构建控制电路和缓存,只有少部分的晶体管完成实际的运算工作。而GPU的流处理器占据了绝大部分晶体管,而控制器相对简单,擅长对大量数据进行简单操作,拥有远胜于CPU的强大浮点计算能力。
图为CPU与GPU芯片资源分布
4.NVIDIA Linux GPU内核
在异构并行计算的大潮中,显卡巨头NVIDIA(英伟达)的研发团队宣布NVIDIA进军量子计算领域为量子开发者构建开发工具。NVIDIA的愿景是开发出一种混合计算模型,其中量子计算机和经典计算机可以协同工作,分别处理各自最擅长的问题。在经典-量子混合计算研究中有一个极具潜力的发展方向——经典计算机可以调用一个相对较小的量子“协处理器”做一些关键计算,其作用类似于图形处理单元GPU。研究人员期望将QPU当作一类强大的加速器,使经典和量子系统连接成混合量子计算机。混合量子计算机首先需要在GPU和QPU之间建立快速、低延迟的连接,GPU负责电路优化、校正和纠错一类传统工作,以缩短GPU执行时间。其次,量子计算行业需要一个统一且高效易用的编程模型和一个编译器工具。英伟达对提高带宽、降低延迟的设计处理等为QPU的研发提供了思路和启发,这方面最近的革新包括:第四代NVLINK和第三代NVSWITCH、InfiniBand、自研Grace CPU等。
NVLINK和NVSWITCH——更高宽带与更低延迟
NVLINK和NVSWITCH可支持服务器内和服务器间实现高级多GPU通信的基础模组。第四代NVIDIA NVLink 技术可为多GPU系统配置提供高于以往1.5倍的带宽,以及增强的可扩展性。第三代NVIDIA NVSwitch基于NVLink的高级通信能力构建,可为计算密集型工作负载提供更高带宽和更低延迟。为了支持高速集合运算,每个NVSwitch都有64个NVLink端口,并配有NVIDIA SHARP引擎,可用于网络内归约和组播加速。NVLINK与NVSWITCH协同工作,NVLink是一种GPU之间的直接互连,可扩展服务器内的多GPU输入/输出 (IO)。NVSwitch可连接多个NVLink,在单节点内和节点间实现以NVLink能够达到的最高速度进行多对多GPU通信。
InfiniBand——加快通信速度
InfiniBand和以太网是超算领域较常用的互连方式和协议。以太网设计的初衷是解决各种各样设备之间的连接问题,其核心特性是通用性强;而InfiniBand的设计初衷是解决同一个系统中不同设备之间的连接问题,主要目的是加快通信速度。对于高性能超级计算机来说,为了提高数据交换速度,一般会采用InfiniBand技术。英伟达并购Mellanox后,充分挖掘InfiniBand技术,使网络交换速度得到保证,并开发出了 NVIDIA Mellanox InfiniBand交换器系统。
目前的NVIDIA Mellanox长距互连系统可以无缝连接InfiniBand远程数据中心、存储或其他InfiniBand远程平台。MetroX-2和MetroX扩展了InfiniBand网络的高数据吞吐量、原生RDMA通信以及其它先进功能的应用场景,可支持远程数据中心之间或数据中心与远程存储基础设施之间的原生InfiniBand连接,实现了异地高可用性和灾难恢复,可通过整合多个远程数据中心的计算能力实现更高的整体性能和更大的计算规模。
Bluefield芯片——降低延迟,减少CPU工作量,提高数据交互性能
Mellanox的主要产品就是Bluefield芯片,英伟达也将名为Bluefield芯片称为DPU(Data Processing Unit,数据处理单元)。所谓DPU实际是一个高级网卡,基于DPU的智能网卡是云数据中心设备中的核心网络部件,逐渐承担原本为CPU执行的网络数据处理和分发任务。为了解决云游戏服务器的延迟问题,英伟达云游戏平台Geforce Now采用Bluefield架构。Bluefield芯片可分担CPU的网络、存储和安全等任务,大大减少CPU的工作量、提高数据交互性能。
自研Grace CPU——解决GPU读取内存数据带宽瓶颈问题
NVIDIA Grace CPU超级芯片通过NVLink-C2C技术带来144个Arm v9核心以及1TB/s内存带宽,采用ARM v9指令集,主要应用场景为数据中心领域。NVIDIA Grace CPU 率先通过纠错码(ECC)等机制,利用具有服务器级可靠性的LPDDR5x内存来满足数据中心需求的服务器CPU,其内存带宽为当今常规服务器内存的2倍,能效更是高达10倍。
结尾
量子模拟器正极大地发挥量子计算的算力优势。正如英伟达加速计算副总裁Ian Buck在国际超算大会的演讲中所说:“量子计算具有巨大的潜力。为了离有价值的量子计算更近一步,我们必须在GPU超级计算机上模拟量子计算机。”2022年5月11日,英伟达宣布正式开源Linux GPU内核模块,在一定程度上为QPU和量子模拟器的研发提供了更多思路和启发。