发明内容
本申请提供容器共享显存方法,以解决现有技术存在的多容器无法复用GPU显存的问题。本申请另外提供容器共享显存装置和系统,容器共享异构计算设备主存方法、装置及系统,以及电子设备。
本申请提供一种容器共享显存方法,包括:
将图形处理器GPU显存划分出显存交互区,所述显存交互区为多个容器分时复用;
为多个容器分配内存交互区;
针对获得GPU使用权的第一容器,将第二容器的数据从显存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至显存交互区。
可选的,还包括:
将所述GPU显存划分出非显存交互区;
为所述多个容器分配独占的显存非交互区。
可选的,所述显存非交互区采用如下方式分配:
根据容器中GPU进程的目标显存容量和显存交互区容量,确定容器的显存非交互区容量;
根据显存非交互区容量,为容器分配显存非交互区。
可选的,所述容器优先使用显存非交互区;
针对获得GPU使用权的第一容器,若第一容器的显存非交互区无可用空间,则将第二容器的数据从显存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至显存交互区。
可选的,所述内存交互区采用如下方式分配:
确定显存交互区容量;
根据显存交互区容量,为容器分配内存交互区。
可选的,通过DMA通道,将容器数据在显存交互区与内存交互区之间置换。
本申请还提供一种容器共享异构计算设备主存方法,包括:
将异构计算设备的主存储器划分出主存交互区,所述主存交互区为多个容器分时复用;
为多个容器分配内存交互区;
针对获得异构计算设备使用权的第一容器,将第二容器的数据从主存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至主存交互区。
本申请还提供一种容器共享显存装置,包括:
显存区域划分单元,用于将图形处理器GPU显存划分出显存交互区,所述显存交互区为多个容器分时复用;
存储区域分配单元,用于为多个容器分配内存交互区;
容器数据交互单元,用于针对获得GPU使用权的第一容器,将第二容器的数据从显存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至显存交互区。
本申请还提供一种电子设备,包括:
处理器和存储器;
存储器,用于存储实现根据上述方法的程序,该设备通电并通过所述处理器运行该方法的程序。
本申请还提供一种容器共享异构计算设备主存系统,包括:
中央处理器CPU共享装置,异构计算设备共享装置;
所述异构计算设备共享装置,用于将异构计算设备的主存储器划分出主存储器交互区,所述主存储器交互区为多个容器分时复用;为多个容器分配内存交互区;针对获得异构计算设备使用权的第一容器,将第二容器的数据从主存储器交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至主存储器交互区。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各种方法。
本申请还提供一种包括指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各种方法。
与现有技术相比,本申请具有以下优点:
本申请实施例提供的容器共享显存方法,通过将GPU显存划分出显存交互区,所述显存交互区为多个容器分时复用;为多个容器分配内存交互区;针对获得GPU使用权的第一容器,将第二容器的数据从显存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至显存交互区。采用这种处理方式,使得在多容器分时复用GPU的场景下,可以进行GPU显存(graphics memory)和系统内存(systerm memory)之间的数据交互,使得GPU显存和系统内存之间具备交换分区Swap的能力,使用系统内存充当GPU显存扩展空间,实现显存的超分使用,即实现了多容器复用GPU显存;因此,可以有效提升GPU显存利用率,扩大GPU显存空间,从而支持运行较大显存需求的应用,提升应用运行效率。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,提供了容器共享显存方法和装置,容器共享异构计算设备主存方法、装置及系统,以及电子设备。在下面的实施例中逐一对各种方案进行详细说明。
第一实施例
请参考图1,其为本申请的容器共享显存方法的实施例的流程示意图。本实施例提供的方法可包括如下步骤:
步骤S101:将图形处理器GPU显存划分为显存交互区,所述显存交互区为多个容器分时复用。
图形处理器(graphics processing unit,GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器。
显存(显卡内存),也被叫做帧缓存(GPU Framebuffer),它的作用是用来存储显卡芯片处理过或者即将提取的渲染数据。如同计算机的内存一样,显存是用来存储要处理的图形信息的部件。
本实施例提供的方法,为实现GPU显存被多个容器分时复用,将显存划分出显存交互区,多个容器可对应同一显存交互区,所述显存交互区可为多个容器分时复用,如tx时间段由容器1使用显存交互区,ty时间段由容器2使用显存交互区。
容器技术是一种将软件打包成标准化单元的技术,以用于开发、交付和部署。它确保了应用运行环境一致性,能够更快速的启动,具有隔离性、可扩展性、迁移方便、可持续交付和部署等特点。传统的容器可对系统的CPU、内存、硬盘、网络等资源进行隔离。基于以上特性,容器技术被广泛的应用在云服务领域。
具体实施时,本实施例提供的方法还可包括如下步骤:将所述GPU显存划分出非显存交互区;为所述多个容器分配独占的显存非交互区。也即,可进一步划分出显存非交互区,将划分的每个显存非交互区分配给不同的容器专用,不同容器占用不同的显存非交互区。这样,可使得同一GPU设备可以被多个容器共享使用,同时又兼具隔离性,使得在不同容器内的硬件访问不会互相影响。
如图2所示,本申请实施例提供的方法可应用在基于GPU集群的机器学习系统中。GPU集群可包括多个基于GPU的计算节点。每个GPU计算节点可包括至少一个CPU、及至少一个GPU,其中CPU又可称为GPU的宿主机。在图2中,在节点1上同时运行任务1和任务2,分别对应容器1中的GPU进程1和容器2中的GPU进程2。在任务1和任务2使用GPU显存资源时,对GPU显存资源进行分配和使用。由图2可见,容器1和容器2对应不同的显存非交互区,并对应同一显存交互区(显存GMswap区)。其中,GMswap模块可执行本申请实施例提供的方法,负责管理容器的对GPU显存的申请和释放,实现对GPU显存资源的复用。
步骤S103:为多个容器分配内存交互区。
本实施例提供的方法,为实现GPU显存被多个容器分时复用,还要为每个容器分配其对应的内存交互区,以便于将暂时失去GPU使用权的容器的数据从显存交互区调入与该容器对应的内存交互区,然后可将获得GPU使用权的另一容器的数据从该另一容器对应的内存交互区调入空闲的显存交互区。
由此可见,采用本申请实施例提供的方法时,不同容器对应不同的内存交互区,即内存交互区与容器可为一对一的关系;多个容器分时复用显存交互区,即显存交互区与容器可为一对多的关系;不同容器对应不同的显存非交互区,即显存非交互区与容器可为一对一的关系。表1示出了容器与存储区域的映射关系。
容器 |
显存非交互区 |
内存交互区 |
容器1 |
显存非交互区0xa1 |
内存交互区0xb1 |
容器2 |
显存非交互区0xa2 |
内存交互区0xb1 |
… |
|
|
表1、容器与存储区域的映射关系
具体实施时,所述内存交互区可采用如下方式分配:确定显存交互区容量;根据显存交互区容量,为容器分配内存交互区。例如,可以设定GPU显存交互区的大小,并为每个容器申请和显存交互区一样大小的系统内存交互区。
步骤S105:针对获得GPU使用权的第一容器,将第二容器的数据从显存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至显存交互区。
本实施例提供的方法,可以触发GPU显存和系统内存之间的数据交换。在本实施例中,除了GPU的显存,容器1和容器2还可分时复用GPU算力单元。当一个容器1获取GPU的使用权时,可先将GPU显存交互区中另一容器2的数据拷贝到容器2的内存交互区;然后,再将容器1的内存交互区中的数据拷贝到显存交互区中。此时容器1的数据都在显存之中,可包括显存非交互区中的数据和显存交互区中的数据。当容器2获取GPU使用权时,执行同样的动作。
如图2所示,容器1和容器2以分时复用的方式使用GPU设备,GPU的总显存是16G。在现有技术下,容器可以使用的GPU显存的上限值是16G。当均分时,容器1和容器2分别可以限制使用8G的显存。可见,现有技术下,容器1和容器2只是分时复用GPU的算力单元。而采用本实施例提供的方法时,可以设定GPU显存交互区的大小为4G,GPU非交互的显存为12G,同样如果均分显存非交互区时,容器1和容器2可以限制使用的显存大小为10G,10G是非交互的显存6G加上交互显存为4G。这样容器1和容器2总的可以使用最大显存总和为20G,比GPU物理显存多4G。
在本实施例中,所述容器优先使用与其对应的显存非交互区;当容器获得GPU使用权时,如果该容器的显存非交互区无可用空间,即使用已达上限,则触发GPU显存和系统内存之间的数据交换。可见,本实施例提供的方法对显存的使用是优先使用GPU非交换区的显存,只用当非交换区的显存使用完成后,才申请交互区的显存。所述方法使用系统内存充当显存使用,可为每一个容器维护一个使用交互区的显存的列表,建立系统内存和GPU显存交互区之间的对应关系。这样,容器内部不感知显存交互区的存在,不感知所述方法的交互逻辑。
具体实施时,可通过高性能的DMA通道,将容器数据在显存交互区与内存交互区之间置换。
本申请实施例提供的方法,可将显存非交互区均分为各个容器,也可采用其它方式分配所述显存非交互区。在一个示例中,所述显存非交互区可采用其它方式分配:根据容器中GPU进程的目标显存容量和显存交互区容量,确定容器的显存非交互区容量;根据显存非交互区容量,为容器分配显存非交互区。
具体实施时,所述根据容器中GPU进程的目标显存容量和显存交互区容量,确定容器的显存非交互区容量,可包括如下子步骤:1)根据目标显存容量和显存交互区容量,确定目标显存非交互区容量;2)若目标显存非交互区容量大于显存容量阈值与显存交互区容量之差值,则将所述显存非交互区容量设置为所述差值。
在本实施例中,所述容器要运行一个任务时,可向执行本申请实施例提供的方法的装置(如GMswap模块)发送显存申请指令,该指令可包括目标显存容量参数。如果目标显存容量未超过该容器对应的显存非交互区,则无需为该容器分配内存交互区,只需将该任务的数据存储在该容器对应的显存非交互区即可。如果目标显存容量超过该容器对应的显存非交互区,则要为该容器分配内存交互区(可与显存交互区大小相同),在该容器获得GPU使用权时,将该容器的数据从对应的内存交互区调入多个容器分时复用的显存非交互区。例如,GPU显存为16G,可设置显存交互区大小为4G,多个容器均分显存非交互区12G,如两个容器均分时,每个容器的显存非交互区为6G,如果容器1申请的目标显存容量大于6G,则要为容器1分配4G的内存分配区,如果容器2申请的目标显存容量为5G,则只需使用容器2的6G显存非交互区即可。
在一个示例中,所述方法还可包括如下步骤:确定显存交互区的使用情况数据;根据所述使用情况数据,调整所述显存交互区的容量。具体实施时,还可显示所述使用情况数据。例如,可统计显存交互区的使用上限值、当前可用容量、当前使用中容量等等。如果根据所述使用情况数据判定显存交互区空闲容量较多,则可减小显存交互区的容量,从而增大显存非交互区容量,这样可以有效减少交换分区的处理,降低系统资源消耗。如果根据所述使用情况数据判定显存交互区频繁满负荷使用,则可增大显存交互区的容量,这样可以提升GPU显存使用率,支持较大显存需求的应用正常运行。
从上述实施例可见,本申请实施例提供的容器共享显存方法,通过将GPU显存划分为显存非交互区和显存交互区,所述显存交互区为多个容器分时复用;为多个容器分配显存非交互区和内存交互区;针对获得GPU使用权的第一容器,将第二容器的数据从显存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至显存交互区。采用这种处理方式,使得在多容器分时复用GPU的场景下,可以进行GPU显存(graphics memory)和系统内存(systerm memory)之间的数据交互,使得GPU显存和系统内存之间具备swap(交换分区)的能力,使用系统内存充当GPU显存扩展空间,这样当多个容器共享使用物理GPU时,可以实现显存的超分使用,即实现了多容器复用GPU显存,这样同一硬件(如NPU、GPU等)可以被多个容器共享使用,同时又兼具隔离性,在不同容器内的硬件访问不会互相影响;因此,可以有效提升GPU显存利用率,扩大GPU显存空间,从而支持运行较大显存需求的应用,提升应用运行效率。
第二实施例
在上述的实施例中,提供了一种容器共享显存方法,与之相对应的,本申请还提供一种容器共享显存装置。该装置是与上述方法的实施例相对应。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
在本实施例中,所述容器共享显存装置包括:
显存区域划分单元,用于将图形处理器GPU显存划分出显存交互区,所述显存交互区为多个容器分时复用;
存储区域分配单元,用于为多个容器分配内存交互区;
容器数据交互单元,用于针对获得GPU使用权的第一容器,将第二容器的数据从显存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至显存交互区。
第三实施例
在上述的实施例中,提供了一种容器共享显存方法,与之相对应的,本申请还提供一种电子设备。该装置是与上述方法的实施例相对应。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的一种电子设备,该电子设备包括:处理器和存储器;存储器,用于存储实现容器共享显存方法的程序,该设备通电并通过所述处理器运行该方法的程序后,执行下述步骤:将图形处理器GPU显存划分出显存交互区,所述显存交互区为多个容器分时复用;为多个容器分配内存交互区;针对获得GPU使用权的第一容器,将第二容器的数据从显存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至显存交互区。
第四实施例
在上述的实施例中,提供了一种容器共享显存方法,与之相对应的,本申请还提供一种容器共享异构计算设备主存方法。该方法是与上述方法的实施例一相对应。由于本方法实施例基本相似于方法实施例一,所以描述得比较简单,相关之处参见方法实施例一的部分说明即可。下述描述的方法实施例仅仅是示意性的。
在本实施例中,所述容器共享异构计算设备主存方法包括:
步骤1:将异构计算设备的主存储器划分出主存交互区,所述主存交互区为多个容器分时复用;
步骤2:为多个容器分配内存交互区;
步骤3:针对获得异构计算设备使用权的第一容器,将第二容器的数据从主存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至主存交互区。
所述异构计算设备,包括但不限于以下设备的任意一项:图形处理器GPU,神经网络处理器NPU,张量处理器TPU。以GPU设备为例,多个容器可共享GPU显存资源,即上述实施例一所述的相关处理。
张量处理器(tensor processing unit,TPU)是为机器学习定制的专用芯片(ASIC),专为深度学习框架TensorFlow而设计。与图形处理器(GPU)相比,TPU采用低精度(8位)计算,以降低每步操作使用的晶体管数量。降低精度对于深度学习的准确度影响很小,但却可以大幅降低功耗、加快运算速度。
嵌入式神经网络处理器(NPU)采用“数据驱动并行计算”的架构,特别擅长处理视频、图像类的海量多媒体数据。
第五实施例
与上述的容器共享异构计算设备主存方法相对应,本申请还提供一种容器共享异构计算设备主存装置。本实施例与第四实施例内容相同的部分不再赘述,请参见实施例四中的相应部分。
本申请提供的一种容器共享异构计算设备主存装置包括:
主存区域划分单元,用于将异构计算设备的主存储器划分出和主存交互区,所述主存交互区为多个容器分时复用;
存储区域分配单元,用于为多个容器分配内存交互区;
容器数据交互单元,用于针对获得异构计算设备使用权的第一容器,将第二容器的数据从主存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至主存交互区。
第六实施例
与上述的容器共享异构计算设备主存方法相对应,本申请还提供一种容器共享异构计算设备主存系统。本实施例与第四实施例内容相同的部分不再赘述,请参见实施例四中的相应部分。本申请提供的一种容器共享异构计算设备主存系统包括:中央处理器CPU共享装置1,异构计算设备共享装置2。
所述中央处理器CPU共享装置1和异构计算设备共享装置2,可部署在云服务器的操作系统(如Linux操作系统)中。
所述中央处理器CPU共享装置1,可用于对CPU算力的分时复用进行管理,以及对内存的分时复用进行管理。由于所述中央处理器CPU共享装置1实现的处理属于较为成熟的现有技术,因此此处不再赘述。
所述异构计算设备共享装置,用于将异构计算设备的主存储器划分出主存储器交互区,所述主存储器交互区为多个容器分时复用;为多个容器分配内存交互区;针对获得异构计算设备使用权的第一容器,将第二容器的数据从主存储器交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至主存储器交互区。
从上述实施例可见,本申请实施例提供的容器共享异构计算设备主存系统,通过将异构计算设备的主存储器划分出主存交互区,所述主存交互区为多个容器分时复用;为多个容器分配内存交互区;针对获得异构计算设备使用权的第一容器,将第二容器的数据从主存交互区置换至第二容器的内存交互区,将第一容器的数据从第一容器的内存交互区置换至主存交互区。采用这种处理方式,使得在多容器分时复用异构计算设备的场景下,可以进行容器共享异构计算设备主存和系统内存之间的数据交互,使得异构计算设备主存和系统内存之间具备swap(交换分区)的能力,使用系统内存充当异构计算设备主存扩展空间,这样当多个容器共享使用物理异构计算设备时,可以实现异构计算设备主存的超分使用,即实现了多容器复用异构计算设备主存,这样同一硬件(如NPU、GPU等)可以被多个容器共享使用,同时又兼具隔离性,在不同容器内的硬件访问不会互相影响;因此,可以有效提升异构计算设备主存利用率,扩大异构计算设备主存空间,从而支持运行较大异构计算设备主存需求的应用,提升应用运行效率。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。