发明内容
本申请提供GPU集群共享显存系统,以解决现有技术存在的在GPU集群跨计算节点支持高显存资源需求的大负载时共享显存性能较低、GPU集群系统编程复杂等问题。本申请另外提供GPU集群共享显存方法和装置,软件编辑器,以及电子设备。
本申请提供一种GPU集群共享显存系统,其特征在于,包括:
应用开发装置,用于以GPU集群全局虚拟显存地址空间为编程视图,确定目标应用使用GPU集群全局虚拟显存资源的程序代码,所述程序代码不包括在不同计算节点间传输显存数据的代码;
应用运行装置,部署在第一计算节点上,用于根据为目标应用分配的全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;在目标应用访问GPU显存发生缺页异常时,根据所述全局显存地址映射信息,确定目标页面数据所在的第二计算节点;将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
本申请还提供一种软件编辑器,用于以GPU集群全局虚拟显存地址空间为编程视图,确定目标应用使用GPU集群全局虚拟显存资源的程序代码,所述程序代码不包括在不同计算节点间传输显存数据的代码;
其中,所述目标应用部署至第一计算节点运行,第一计算节点根据目标应用的全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;在目标应用访问GPU显存发生缺页异常时,根据所述全局显存地址映射信息,确定目标页面数据所在的第二计算节点;将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
本申请还提供一种GPU集群共享显存装置,包括:
物理显存分配单元,用于根据运行在第一计算节点上的目标应用的GPU集群全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;
物理显存节点确定单元,用于在目标应用访问GPU显存发生缺页异常时,根据所述全局显存地址映射信息,确定目标页面数据所在的第二计算节点;
跨节点页面置换单元,用于将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
可选的,所述跨节点页面置换单元,具体用于通过远程直接内存访问RDMA网络,将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存。
可选的,所述跨节点页面置换单元,具体用于向第二计算节点发送页面请求;将第二计算节点回送的目标页面数据调入第一计算节点的GPU显存。
可选的,还包括:
映射信息更新单元,用于更新所述全局显存地址映射信息。
本申请还提供一种GPU集群共享显存方法,以GPU集群全局虚拟显存地址空间为编程视图,确定目标应用使用GPU集群全局虚拟显存资源的程序代码,所述程序代码不包括在不同计算节点间传输显存数据的代码;
其中,所述目标应用部署至第一计算节点运行,第一计算节点根据目标应用的全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;在目标应用访问GPU显存发生缺页异常时,根据目标应用的全局显存地址映射信息,确定目标页面数据所在的第二计算节点;将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
本申请还提供一种GPU集群共享显存方法,包括:
根据运行在第一计算节点上的目标应用的GPU集群全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;
在目标应用访问GPU显存发生缺页异常时,根据目标应用的全局显存地址映射信息,确定目标页面数据所在的第二计算节点;
将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据;
其中,所述全局显存地址映射信息中的物理地址空间包括多个计算节点中GPU显存的物理地址空间。
可选的,所述根据运行在第一计算节点上的目标应用的GPU集群全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息,包括:
发送可用显存数据获取请求;
根据其它计算节点的可用显存数据,确定提供远程显存空间的第二计算节点;
向第二计算节点发送显存分配请求;
根据第二计算节点回送的地址映射信息,更新目标应用的GPU集群全局显存地址映射信息。
可选的,所述将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,包括:
通过远程直接内存访问RDMA网络,将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存。
可选的,向第二计算节点发送页面请求;
将第二计算节点回送的目标页面数据调入第一计算节点的GPU显存。
可选的,还包括:
更新所述全局显存地址映射信息。
可选的,通过广播方式,向其它计算节点通知更新后的映射信息;
可选的,通过全局服务器,存储所述全局显存地址映射信息。
可选的,在初始化目标应用时,根据目标应用的目标显存容量,确定所述全局显存地址映射信息,所述目标应用的目标显存容量大于显存容量阈值。
可选的,还包括:
将目标页面数据存储至TLB缓存空间。
可选的,还包括:
若第一计算节点的GPU显存已使用至上限值,则根据置换策略将部分GPU分页置换至中央处理器CPU端主存;
CPU通过本地地址映射表维护换出的显存分页;
将目标页面数据调入GPU显存。
可选的,对于其他计算节点的地址映射,以虚地址作为键、以远程节点作为值,记录远端物理分页所位于的节点。
可选的,所述置换策略包括:先进先出,最近最少使用,最不经常使用。
可选的,所述上限值包括:实际物理容量,用户指定的容量。
本申请还提供一种电子设备,包括:
处理器和存储器;
存储器,用于存储实现上述任一项方法的程序,该设备通电并通过所述处理器运行该方法的程序。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各种方法。
本申请还提供一种包括指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各种方法。
与现有技术相比,本申请具有以下优点:
本申请实施例提供的GPU集群共享显存系统,在应用开发阶段,通过应用开发装置以GPU集群全局虚拟显存地址空间为编程视图,确定目标应用使用GPU集群全局虚拟显存资源的程序代码,所述程序代码不包括在不同计算节点间传输显存数据的代码;将目标应用部署在第一计算节点上,在应用运行阶段,根据为目标应用分配的全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;第一计算节点在目标应用访问GPU显存发生缺页异常时,根据所述全局显存地址映射信息,确定目标页面数据所在的第二计算节点;将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。采用这种处理方式,使得从GPU集群系统层面对显存资源进行“聚合”,在面对高显存资源需求的大负载时,为分布式的GPU集群提供统一的GPU显存地址空间与单一的编程视图,避免显式管理数据搬移及通信,简化GPU集群系统编程;因此,可以有效提升GPU集群共享显存的性能,并提升应用开发效率,对企业内有助于整合资源、提高效率、拓展集群架构设计空间,对外部用户提供易使用易管理的特性。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,提供了GPU集群共享显存系统、方法和装置,软件编辑器,以及电子设备。在下面的实施例中逐一对各种方案进行详细说明。
第一实施例
请参考图1,其为本申请的GPU集群共享显存系统的实施例的结构示意图。本实施例提供的系统可包括:应用开发装置1,应用运行装置2。
如图2所示,所述应用开发装置1可以是安装在程序开发人员使用的终端设备(如个人电脑或者笔记本电脑)上的软件编辑器,如tensorflow集成开发环境。所述应用开发装置1,可用于开发基于GPU集群统一显存运行的应用程序。所述应用开发装置1,提供给开发人员单一系统的抽象,无需考虑多机与并行,在面对高显存资源需求的大负载应用时,只需使用一次显存分配指令(如malloc)分配显存使用即可,无需编写在不同计算节点间传输显存数据的代码,也无需为每个计算节点编写分配显存的代码。所述应用运行装置2,可部署在GPU集群中,如部署在GPU计算节点的操作系统中。所述应用运行装置2,可用于在本地计算节点需要访问其它计算节点上的显存页面数据发生缺页异常时,将其它计算节点中的目标页面数据调入至本地计算节点的GPU显存,以使得应用进程从本地计算节点的GPU显存中读取目标页面数据。
显存又称为帧缓存,它的作用是用来存储显卡芯片GPU处理过或者即将提取的渲染数据。如同计算机的内存一样,显存是用来存储要处理的图形信息的部件。在本实施例中,目标应用可以是深度学习模型的训练任务,如分布式计算的tensorflow应用程序。大数据时代的互联网应用产生了大量的数据,当神经网络模型很大时,大量的数据使得模型的训练变得复杂,由于显存限制,大型模型训练任务难以完整地跑在单个GPU上,这个时候就需要把模型分割成更小的部分,不同部分跑在不同的设备上,例如将网络不同的层运行在不同的设备上,使用多台GPU设备采用模型并行方式进行分布式训练。模型并行指的是将模型训练任务部署到很多GPU设备上(设备可能分布在不同机器上)运行,比如多个机器(GPU计算节点)的GPUs。在这种情况下,整个模型训练过程涉及的显存数据会存储在多个GPU计算节点上,这些显存数据可供在多个计算节点上分别运行的应用进程共享使用,因此在一个计算节点上运行的部分模型的训练过程,会使用存储在其它计算节点上的显存数据。
如图3a所示,现有技术中,各个计算节点上的GPU显存是物理上独立的,需要通过显式的显存数据搬移代码进行连接通信,开发人员在编程期间要清楚这一点,并且反应在代码中。此外,还需要在每个GPU计算节点都进行显存分配,并不断地在不同GPU计算节点之间进行手动搬移显存数据,来保证本地计算节点可从本地GPU显存中读取到目标页面数据。现有技术采用客户端/服务器架构,通过远程过程调用RPC的方式为本地计算节点提供GPU访问,通过劫持GPU运行时API的方式来实现“GPU集群共享显存”的效果。这种编程模型是分布式的或者并行的视角,开发人员在编写应用程序代码时需要显式地管理不同计算节点间的显存数据的搬移及通信。
本申请实施例提供的所述系统中,应用开发装置1用于以GPU集群全局虚拟显存地址空间为编程视图,确定目标应用使用GPU集群全局虚拟显存资源的程序代码,所述程序代码不包括在不同计算节点间传输显存数据的代码。所述全局虚拟显存地址空间,又称为GPU集群统一显存地址空间。统一显存在开发人员的视角中,维护了一个统一的显存池,在不同计算节点中共享。所述系统可使用单一指针进行共享GPU集群显存,由系统来自动地进行显存迁移。
如图3b所示,在本实施例中,统一显存包括多个计算节点显存的合并资源,合并的显存资源可达到显存聚合的效果,而非显存池化的效果。可见,所述系统采用的编程模型将GPU集群中多个计算节点的GPU显存统一,形成统一显存。这种GPU集群统一显存的编程模型与现有技术的编程模型不同。
本申请实施例提供的系统中的编程模型是集中式的视角,提供给开发人员单一系统的抽象,无需考虑多机与并行,只需使用一条显存分配指令分配显存使用即可,无需为每个计算节点分别使用显存分配指令分配显存。目标应用的目标显存容量可大于单个GPU计算节点的显存容量阈值。而在现有技术中,要实现GPU集群共享显存的功能,需要编写显式管理数据搬移及通信的代码。
可见,相比现有技术中显式管理数据搬移及通信的方式,本申请实施例提供的系统简化了GPU集群共享显存代码的编写和编程模型。在本实施例中,可以在不同GPU计算节点间共用一个指针,不用单独各自分配空间。这样,统一显存方便管理,极大减少了代码量,无需编写管理数据搬移及通信的代码。此外,语言结合更紧密,减少与兼容语言的语法差异,且更方便的代码迁移。
此外,相比现有技术中基于单个GPU显存的处理方式,本申请实施例提供的系统中,目标应用增加的代码量可以忽略不计。本申请实施例提供的系统采用的编程模型与现有技术中没有实现GPU集群共享显存功能的系统编程模型,都是集中式的视角。
通过所述应用开发装置1编写基于GPU集群统一显存运行的目标应用程序后,可将目标应用部署至GPU集群运行。所述应用运行装置2,可部署在第一计算节点上,用于根据为目标应用分配的全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;第一计算节点在目标应用访问GPU显存发生缺页异常时,根据所述全局显存地址映射信息,确定目标页面数据所在的第二计算节点;将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,应用进程从第一计算节点的GPU显存中读取目标页面数据。
在本实施例中,为目标应用在GPU集群统一显存中分配一个长度为M的连续空间,该空间即为所述为目标应用分配的全局虚拟显存地址空间。为目标应用分配的全局虚拟显存地址空间,可大于单一GPU计算节点的显存容量,即:目标应用为大负载应用,单个GPU计算节点的显存容量无法满足目标应用的显存资源需求,目标应用需要共享GPU集群中多个计算节点上的显存资源。
具体实施时,所述系统可在目标应用初始化时声明用户要求大小的虚拟显存地址空间(即目标显存容量),集群中全部显存资源具备不少于该大小的存储空间,初始化完成后集群中每个节点可获得整个虚拟显存地址空间到各个节点各个GPU的映射关系,即形成应用进程的GPU集群全局显存地址映射信息。
所述应用运行装置2,可根据为目标应用分配的全局虚拟显存地址空间,为目标应用分配GPU集群全局物理显存地址空间,形成目标应用的GPU集群全局显存地址映射信息。所述全局显存地址映射信息,包括GPU虚拟地址和GPU物理地址,其中物理地址可包括多个GPU计算节点中的物理显存地址。与一个应用进程相关的页面可存储在多个计算节点的多个GPU显存的物理地址空间中。表1展示了进程A的页表:
由表1可见,应用进程A的页表包括部分虚拟地址存在对应物理页的情况,物理地址涉及多个节点的物理地址,因此该页表包括GPU集群全局显存地址映射信息。
在一个示例中,应用运行装置部署在第一计算节点上,发送可用显存数据获取请求;根据其它计算节点的可用显存数据,确定提供远程显存空间的第二计算节点;向第二计算节点发送显存分配请求;根据第二计算节点回送的地址映射信息,更新目标应用的GPU集群全局显存地址映射信息。这样,第一计算节点通过应用运行装置查询GPU全局显存地址空间信息,并确定提供远程显存空间的其他计算节点;第一计算节点向选定的第二计算节点发起分配请求,被选定的计算节点返回地址映射;第一计算节点分配请求满足后更新全局显存空间信息。
具体实施时,可向全局服务端发送所述可用显存数据获取请求。所述全局服务端,可用于管理GPU集群中多个计算节点的显存资源使用状况信息,如每个计算节点的可用显存数据等。第一计算节点根据全局服务端回送的可用显存数据,确定提供远程显存空间的第二计算节点。
具体实施时,也可分别向各个计算节点发送可用显存数据获取请求。第一计算节点根据各个计算节点回送的可用显存数据,确定提供远程显存空间的第二计算节点。
具体实施时,所述应用运行装置2也可根据为目标应用分配的全局虚拟显存地址空间,随机分配GPU集群中任意一个计算节点上的GPU显存物理空间,由此确定目标应用的GPU集群全局显存地址映射信息。
如图2所示,所述GPU集群包括多个基于GPU的计算节点,所述计算节点又称为GPU设备,包括至少一个CPU和至少一个GPU,多个计算节点之间通过网络连接。在一个GPU上可并行运行多个机器学习任务,这些机器学习任务共享该GPU的显存资源。GPU设备还包括中央处理器(CPU)及内存,其中CPU又可称为GPU的宿主机。当本地计算节点(即第一计算节点)中的应用进程产生GPU显存缺页异常时,可通过RDMA网络将位于其它计算节点(即第二计算节点)中的目标页面数据置换到产生缺页异常的本地计算节点中的GPU显存,这样本地计算节点中的应用进程就可以从GPU显存中读取目标页面数据。
页缺失(Page fault,又名硬错误、硬中断、分页错误、寻页缺失、缺页中断、页故障等)指的是当应用进程试图访问已映射在虚拟地址空间中,但是并未被加载在本地GPU计算节点的物理GPU显存中的一个分页时,由本地GPU计算节点的中央处理器CPU的内存管理单元MMU所发出的中断。在发生缺页中断时,可由所述应用运行装置2将要访问的页调入GPU显存后再进行访问。这一机制对于利用GPU集群中其它计算节点的GPU显存资源来增加程序可用显存空间的操作系统是有效的。在本实施例中,用于处理此中断的程序是本地GPU计算节点的操作系统的一部分,操作系统会将相关的分页从GPU集群中其它计算节点的GPU显存调入当前计算节点的显存。
当本地GPU计算节点的操作系统发现一个缺页中断时,可先确定发生缺页中断的虚拟地址,然后可检查是否有空闲页框。如果没有空闲页框,可执行页面置换算法寻找一个页面来淘汰。操作系统查找所需页面在GPU集群的哪一个计算节点,并确定所需页面在目标计算节点的GPU显存地址,通过网络传输跨节点将该页装入当前计算节点的GPU显存。该页面被装入后,页表已经更新可以反映它的位置,调度引发缺页中断的应用进程。例如,本地GPU计算节点的应用进程(如模型训练任务)独立拥有4GB的虚拟地址(VA,VirtualAddress)空间,不是所有的虚拟地址在本地GPU计算节点的物理显存中都有对应的页。
在本实施例中,GPU可不直接和物理显存打交道,而是通过MMU(Memory ManageUnit内存管理单元)进行地址转换。MMU是一种硬件电路,其速度很快,主要工作是进行GPU管理,地址转换是具体管理之一。每个进程都可有自己的页表Page Table,页表存储了进程中虚拟地址到物理地址的映射关系,MMU收到GPU的虚拟地址之后开始查询页表,确定是否存在映射以及读写权限是否正常。进程要向虚拟地址写,或者从虚拟地址读。
本实施例提供的系统,可由CPU运行时软件或者驱动在进行GPU显存的页表管理时,将目标页面数据通过高性能网络跨节点与远程GPU进行置换,从系统层面对GPU资源进行“聚合”,提供简单易用的“大GPU”映像,从而在多节点多GPU场景下为应用透明的提供共享显存的视图。
需要说明的是,本申请实施例提出的统一显存并不会消除多个GPU计算节点之间显存数据的搬移及通信处理,只是这部分工作交给系统在运行时期间执行,只是对开发人员透明而已。多个GPU计算节点之间显存数据的搬移及通信处理依然存在。
如图4所示,在一个示例中,第一计算节点的应用进程访问GPU显存发生缺页异常时,根据所述全局显存地址映射关系,确定目标页面数据所在的计算节点信息,向目标页面数据所在的第二计算节点发送页面请求,将第二计算节点回送的目标页面数据调入第一计算节点的GPU显存,第一计算节点的应用进程从第一计算节点的GPU显存中读取目标页面数据;第二计算节点用于接收页面请求,获取目标页面数据,发送目标页面数据。
如图2所示,在本实施例中,第一计算节点通过远程直接内存访问RDMA网络,将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,以提升页迁移性能。所述系统涉及CPU与以GPU为代表的加速器,每个节点包含若干CPU与GPU,节点间通过高性能RDMA网络进行通信。
在一个示例中,所述系统假定GPU支持查询多级页表(Page walk)并具备TLB缓存以缓冲虚地址映射;在虚地址翻译失败时由内存管理单元MMU产生缺页异常并以中断形式返回CPU,CPU完成缺页处理后更新相应页目录寄存器设置、刷新TLB等。对于GPU的MMU单元,可以是集成入GPU处理器的专用单元,也可以使用主机端的IOMMU。CPU的缺页处理运行时或者驱动负载维护GPU页表以及虚地址在集群各个节点的映射。节点间的高速RDMA网络提供低延迟、高带宽的网络通信能力,提供直接读写内存的RDMA通信接口,比如InfiniBand、RoCE、iWARP等。
CPU在进行GPU页表缺页处理时,若当前GPU显存已使用至上限(可以是实际物理容量、也可以由用户指定),则可按照既定的页面置换策略,将部分GPU分页置换至CPU端主存。具体实施时,置换策略可以是先进先出、最近最少使用、最不经常使用等。CPU可通过本地地址映射表维护已经换出的显存分页。对于其他节点的地址映射,可以采用键值(Key-Value)哈希结构,即以虚地址作为Key、以远程节点作为Value,记录远端物理分页所位于的节点。
具体实施时,相对第一计算节点位于远端的第二计算节点在接收到页面请求后,可查询本地页表,首先确定所需的目标页面数据位于本节点,若所需分页位于主机端(如被置换出),则直接发起RDMA通信将目标页面数据返回第一计算节点。若目标页面数据位于GPU卡端,则可对相应GPU进行同步,待已排队操作全部完成后,锁定相应GPU页面后通过RDMA返回。通信完成后CPU还可更新地址映射关系。
在一个示例中,CPU更新存储在本地计算节点上的地址映射关系,此时可通过广播方式,向其它计算节点通知更新后的映射信息。
需要说明的是,全局显存地址映射信息的维护不局限于广播的方式,还可使用专门的全局服务器。通过全局服务器,存储所述全局显存地址映射信息。
第一计算节点在接收到所需目标页面数据后,可更新主机端维护的地址映射关系或者等待远端节点的广播更新,将目标页面数据传输至GPU,更新GPU页表,刷新TLB,然后继续当前GPU的执行。
综上所述,GPU要根据用户进程提供的虚拟地址来获取真实数据。MMU集成了快表TLB来存储GPU最近常用的页表项来加速寻址,TLB找不到再去全量页表寻址,可以认为TLB是MMU的缓存。TLB的容量毕竟有限,为此可依靠Page Table一起完成TLB Miss情况的查询,并且更新到TLB建立新映射关系。
当GPU给MMU传新虚拟地址之后,MMU先查询TLB,如果TLB有就直接拿到物理地址发到总线给显存。TLB容量比较小,难免发生缓存缺失(Cache Miss),这时候MMU还有页表PageTable,在页表中找到之后MMU除了把地址发到总线传给显存,还可把这条映射关系给到TLB,由TLB记录刷新缓存。
GPU给MMU的虚拟地址在TLB和Page Table都没有找到对应的物理页帧或者权限不对,这就是缺页异常Page Fault,它是一个由硬件中断触发的可以由软件逻辑纠正的错误。
假如目标页面在物理显存中没有对应的页帧或者存在但无对应权限,GPU就无法获取数据,这种情况下GPU就会报告一个缺页错误。由于GPU没有数据就无法进行计算,用户进程也就出现了缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核中断处理器(Page Fault Handler)处理。只要GPU要的虚拟地址经过MMU的一番寻址之后没有找到或者找到后无权限,就会出现缺页异常,因此触发异常后的处理流程是本申请实施例提供的系统的重点内容。
在本实施例中,上述描述的缺页拉取过程的具体步骤如下所述:
1.GPU在运行过程中产生显存缺页异常,返回CPU进行缺页处理。
2.CPU进行缺页原因判断,所述系统考虑的缺页原因包括:页表尚未建立,分页位于其他节点。
3.若页表尚未建立,则可检查显存使用是否达到上限(可以是实际物理资源上限,也可以是用户设定的上限)。
4.若本地显存的使用尚未达到限制,则CPU分配物理页框(Page frame)以供GPU使用,同时更新全局地址映射并广播至其他节点。
5.若本地内存的使用已达到限制,则触发分页换出流程,将显存分页换出主机端并释放以得到空闲页框;置换策略可以是先进先出、最近最少使用、最不经常使用等。
6.若缺页原因是分页位于其他节点,则向相应节点发起分页数据的RPC请求。
7.远端节点(第二计算节点)在接收到请求后可先进行检查,然后查询分页所在位置;若位于主机端(如被置换出)则直接通过RDMA通信将分页数据返回;若位于设备端,则可进行同步,待全部操作完成后锁定相应页面并通过RDMA返回分页。通信完成后更新全局地址映射并向其他节点广播。
8.本地节点(第一计算节点)在接收到所需分页数据后,将其拷贝至此前新分配的或释放的物理页框中,并更新页表,恢复此前记录的页表信息并将页表描述符指向接收分页数据的物理页框。之后刷新GPU TLB缓存,确保清除已失效的地址映射缓冲。
可见,通过执行上述处理步骤,使得GPU显存分页的置换、分页映射表的维护均由CPU缺页运行时处理,对GPU应用而言,显存是透明扩展与迁移的,无需应用修改或显式发起通信。
从上述实施例可见,本申请实施例提供的GPU集群共享显存系统,在应用开发阶段,通过应用开发装置以GPU集群全局虚拟显存地址空间为编程视图,确定目标应用使用GPU集群全局虚拟显存资源的程序代码,所述程序代码不包括在不同计算节点间传输显存数据的代码;在应用运行阶段,根据为目标应用分配的全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;第一计算节点在目标应用访问GPU显存发生缺页异常时,根据所述全局显存地址映射信息,确定目标页面数据所在的第二计算节点;将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。采用这种处理方式,使得从GPU集群系统层面对显存资源进行“聚合”,在面对高显存资源需求的大负载时,为分布式的GPU集群提供统一的GPU显存地址空间与单一的编程视图,避免显式管理数据搬移及通信,简化GPU集群系统编程;因此,可以有效提升GPU集群共享显存的性能,并提升应用开发效率,对企业内有助于整合资源、提高效率、拓展集群架构设计空间,对外部用户提供易使用易管理的特性。
第二实施例
在上述的实施例中,提供了一种GPU集群共享显存系统,与之相对应的,本申请还提供一种装置,即:软件编辑器。该装置是与上述系统的实施例相对应。由于装置实施例基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本申请另外提供一种软件编辑器,用于以GPU集群全局虚拟显存地址空间为编程视图,确定目标应用使用GPU集群全局虚拟显存资源的程序代码,所述程序代码不包括在不同计算节点间传输显存数据的代码。
所述全局虚拟显存地址空间,是指将GPU集群中各个计算节点的显存资源整合为统一显存,实现“显存资源聚合”。这样,可为高显存资源需求的大负载应用直接分配足够的显存空间。
其中,所述目标应用部署至GPU集群运行,根据目标应用的全局虚拟显存地址空间,为目标应用分配GPU集群物理显存地址空间,形成目标应用的GPU集群全局显存地址映射信息。其中,所述全局显存地址映射信息中的物理地址空间包括多个计算节点中GPU显存的物理地址空间。
第一计算节点在目标应用访问GPU显存发生缺页异常时,根据目标应用的全局显存地址映射信息,确定目标页面数据所在的第二计算节点;将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
第三实施例
在上述的实施例中,提供了一种GPU集群共享显存系统,与之相对应的,本申请还提供一种GPU集群共享显存装置,该装置可以是操作系统的一个模块。该装置是与上述系统的实施例相对应。由于装置实施例基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本申请另外提供一种GPU集群共享显存装置,包括:
物理显存分配单元,用于根据运行在第一计算节点上的目标应用的GPU集群全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;
物理显存节点确定单元,用于在目标应用访问GPU显存发生缺页异常时,根据所述全局显存地址映射信息,确定目标页面数据所在的第二计算节点;
跨节点页面置换单元,用于将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
在一个示例中,所述跨节点页面置换单元,具体用于通过远程直接内存访问RDMA网络,将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存。节点间的高速RDMA网络提供低延迟、高带宽的网络通信能力,提供直接读写内存的RDMA通信接口,比如InfiniBand、RoCE、iWARP等。这样,可以有效提升显存共享性能。
在另一个示例中,所述跨节点页面置换单元,具体用于向第二计算节点发送页面请求,如RPC请求;将第二计算节点回送的目标页面数据调入第一计算节点的GPU显存。
在本实施例中,所述装置还包括:映射信息更新单元,用于更新所述全局显存地址映射信息。
第四实施例
在上述的实施例中,提供了一种GPU集群共享显存系统,与之相对应的,本申请还提供一种GPU集群共享显存装置,该装置可以是改进的内存管理单元MMU。该装置是与上述系统的实施例相对应。由于装置实施例基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本申请另外提供一种GPU集群共享显存装置,包括:
物理显存节点确定单元,用于第一计算节点在目标应用访问GPU显存发生缺页异常时,根据目标应用的GPU集群全局显存地址映射信息,确定目标页面数据所在的第二计算节点;
跨节点页面置换单元,用于将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据;
其中,所述全局显存地址映射信息采用如下方式形成:根据目标应用的GPU集群全局虚拟显存地址空间,为目标应用分配GPU集群全局物理显存地址空间,形成目标应用的GPU集群全局显存地址映射信息。
第五实施例
在上述的实施例中,提供了一种GPU集群共享显存系统,与之相对应的,本申请还提供一种GPU集群共享显存系统。该系统是与上述系统的实施例相对应。由于系统实施例基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施实施例的部分说明即可。下述描述的系统实施例仅仅是示意性的。
本申请另外提供一种GPU集群共享显存系统,包括:第一共享显存装置和第二共享显存装置。
第一共享显存装置,可部署在第一计算节点中,用于根据目标应用的GPU集群全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;在目标应用访问GPU显存发生缺页异常时,根据目标应用的全局显存地址映射信息,确定目标页面数据所在的第二计算节点,向第二计算节点发送页面请求;将第二计算节点回送的目标页面数据调入第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
第二共享显存装置,可部署在第二计算节点中,用于接收所述页面请求,获取目标页面数据,发送目标页面数据。
在本实施例中,各个计算节点可存储各个应用的页表,如第一计算节点和第二计算节点均存储有应用1的页表。
第六实施例
在上述的实施例中,提供了一种GPU集群共享显存系统,与之相对应的,本申请还提供一种GPU集群共享显存装置,该装置可部署在第二计算节点中。该装置是与上述系统的实施例相对应。由于装置实施例基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本申请另外提供一种GPU集群共享显存装置,包括:
跨节点页面请求接收单元,用于接收第一计算节点发送的页面请求;
页面数据获取单元,用于获取目标页面数据;
页面数据发送单元,用于向第一计算节点发送目标页面数据;
其中,第一计算节点根据目标应用的GPU集群全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;在目标应用访问GPU显存发生缺页异常时,根据目标应用的全局显存地址映射信息,确定目标页面数据所在的第二计算节点,向第二计算节点发送所述页面请求;第一计算节点接收所述目标页面数据,将所述目标页面数据调入第一计算节点的GPU显存,全局物理显存从第一计算节点的GPU显存中读取目标页面数据。
第七实施例
在上述的实施例中,提供了一种GPU集群共享显存系统,与之相对应的,本申请还提供一种GPU集群共享显存方法,该方法的执行主体可以为应用开发人员使用的终端设备。该方法是与上述系统的实施例相对应。由于方法实施例基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施实施例的部分说明即可。下述描述的方法实施例仅仅是示意性的。
本申请提供一种GPU集群共享显存方法,以GPU集群全局虚拟显存地址空间为编程视图,确定目标应用使用GPU集群全局虚拟显存资源的程序代码,所述程序代码不包括在不同计算节点间传输显存数据的代码。
其中,所述目标应用部署至第一计算节点运行,第一计算节点根据目标应用的全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息;在目标应用访问GPU显存发生缺页异常时,根据目标应用的全局显存地址映射信息,确定目标页面数据所在的第二计算节点;将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
第八实施例
在上述的实施例中,提供了一种GPU集群共享显存系统,与之相对应的,本申请还提供一种GPU集群共享显存方法,该方法的执行主体可以为GPU计算节点,如第一计算节点。该方法是与上述系统的实施例相对应。由于方法实施例基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施实施例的部分说明即可。下述描述的方法实施例仅仅是示意性的。
请参考图5,其为本申请的GPU集群共享显存方法的实施例的流程示意图。本申请另外提供一种GPU集群共享显存方法,包括:
步骤S501:根据目标应用的GPU集群全局虚拟显存地址空间,确定目标应用的GPU集群全局显存地址映射信息。
步骤S503:在目标应用访问GPU显存发生缺页异常时,根据目标应用的全局显存地址映射信息,确定目标页面数据所在的第二计算节点。
具体实施时,对于其他计算节点的地址映射,可以虚地址作为键、以远程节点作为值,记录远端物理分页所位于的节点。
步骤S505:将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,目标应用从第一计算节点的GPU显存中读取目标页面数据。
在一个示例中,所述将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,可采用如下方式实现:通过远程直接内存访问RDMA网络,将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存。
在另一个示例中,所述将第二计算节点中的目标页面数据调入至第一计算节点的GPU显存,可采用如下方式实现:第一计算节点向第二计算节点发送页面请求;将第二计算节点回送的目标页面数据调入第一计算节点的GPU显存。
在本实施例中,所述方法还可包括如下步骤:更新所述全局显存地址映射信息。具体实施时,目标应用的全局显存地址映射信息存储在多个计算节点中,第一计算节点可通过广播方式,向其它计算节点通知更新后的映射信息;也可通过全局服务器,存储所述全局显存地址映射信息。
在一个示例中,在初始化目标应用时,根据目标应用的目标显存容量,该容量与为目标应用分配的全局虚拟显存地址空间对应,确定所述全局显存地址映射信息,所述全局显存地址映射信息中的物理地址空间包括多个计算节点中GPU显存的物理地址空间。所述目标应用的目标显存容量可大于显存容量阈值。
在一个示例中,所述方法还可包括如下步骤:将目标页面数据存储至快表TLB缓存空间。采用这种处理方式,可以有效提升共享显存性能。
在一个示例中,所述方法还可包括如下步骤:若第一计算节点的GPU显存已使用至上限值,则根据置换策略将部分GPU分页置换至中央处理器CPU端主存;CPU通过本地地址映射表维护换出的显存分页;将目标页面数据调入GPU显存。所述上限值包括但不限于:实际物理容量,用户指定的容量。所述置换策略包括但不限于:先进先出,最近最少使用,最不经常使用。
第九实施例
在上述的实施例中,提供了一种GPU集群共享显存系统,与之相对应的,本申请还提供一种GPU集群共享显存方法,该方法的执行主体可以为GPU计算节点,如第二计算节点。该方法是与上述系统的实施例相对应。由于方法实施例基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施实施例的部分说明即可。下述描述的方法实施例仅仅是示意性的。
本申请另外提供一种GPU集群共享显存方法,包括:
步骤1:第二计算节点接收第一计算节点发送的页面请求;
步骤2:获取目标页面数据;
步骤3:将目标页面数据发送至第一计算节点。
所述获取目标页面数据,可采用如下方式实现:获取位于第二计算节点中主机CPU端的目标页面数据。具体实施时,如果目标页面数据在第二计算节点中设备GPU端,则获取位于所述GPU端的目标页面数据。
具体实施时,所述获取位于所述GPU端的目标页面数据,还可采用如下方式:在已排队操作完成后,获取位于所述GPU端的目标页面数据。
第十实施例
在上述的实施例中,提供了一种GPU集群共享显存方法,与之相对应的,本申请还提供一种电子设备。该装置是与上述方法的实施例相对应。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的一种电子设备,该电子设备包括:处理器和存储器;存储器,用于存储实现上述GPU集群共享显存方法的程序,该设备通电并通过所述处理器运行上述方法的程序。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。