在多核CPU的机器上,MPI(Message Passing Interface)进程通常会分配到不同的CPU核心,以实现CPU层面的并行处理,即CPU核并行化。但当这些MPI进程都尝试使用CUDA内核来加速计算时,它们都会试图独占GPU,继而导致GPU资源的分配不均或低效使用。为此,您可以使用MPS(Multi-Process Service)管理来自多个NVIDIA GPU上运行的CUDA应用或MPI进程的请求,实现GPU资源的共享。您可以在ACK控制台为节点池配置对应标签,基于MPS模式实现GPU的共享调度和AI应用的显存隔离。
功能介绍
基于MPI实现CPU核并行化,可以平衡CPU密集型任务之间的资源分配,确保多个计算任务能够同时进行,从而加速整体的计算过程。但当使用CUDA内核加速MPI进程时,每个MPI进程所分配到的工作量可能无法充分利用GPU,导致虽然每个MPI进程运行速度有所提高,但整体GPU的使用效率很低。当单个应用程序发送给GPU的任务量不足,GPU存在闲置资源时,推荐您使用MPS,一种用于在NVIDIA GPU上运行多个CUDA应用程序的技术。
MPS允许不同的应用程序在同一个GPU设备上并发执行,以提高集群GPU资源的利用率。MPS通过Client-Server架构来实现了这种功能,确保了二进制兼容性,即您无需对现有的CUDA应用程序进行重大改造。MPS的构成组件如下。
Control Daemon Process:负责启动和停止MPS Server,并协调客户端(Client)和MPS Server之间的连接,确保客户端能够顺利接入到MPS服务中进行GPU资源的请求和使用。
Client Runtime:集成于CUDA驱动程序库内部。开发者无需对CUDA应用程序代码进行重大改造即可使用MPS。当应用程序使用CUDA驱动进行GPU操作时,Client Runtime会自动处理与MPS Server的交互,从而使得多个应用程序能够高效、安全地共享GPU。
Server Process:接收来自不同客户端的请求,通过高效的调度策略将请求运行在一个GPU设备上,从而实现了客户端之间的并发性。
前提条件
已安装共享GPU组件,且版本为1.9.13及其以上。具体操作,请参见安装共享GPU调度组件。
使用限制
当一个节点开启MPS显存隔离能力后,某个应用被调度到该节点上时,Control Daemon Process进程会使用Exclusive GPU模式独占整个节点上的GPU。在MPS的Client-Server架构下,客户端会统一向MPS Server申请所需的GPU资源。
MPS模式的共享GPU调度仅支持使用共享显存模式,不支持共享算力模式。
操作步骤
您可以在控制台创建节点池,为节点池中的节点配置ack.node.gpu.schedule:mps
标签,开启MPS模式的共享GPU调度和显存隔离能力。此配置针对该节点池中的全量节点生效。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击创建节点池,配置节点标签,并按需配置其他配置项,然后单击确认配置。
以下为重要配置项说明。关于全量配置项的说明,请参见创建节点池。
配置项
说明
期望节点数
节点池的初始节点数量。如无需创建节点,可以填写为0。
节点标签
设置键为ack.node.gpu.schedule,值为mps。
配置完成后,您可以参见运行共享GPU调度示例在应用Pod中声明所需的显存资源(
aliyun.com/gpu-mem
)。
相关文档
关于如何配置GPU共享容器的YAML文件,使用显存隔离能力,请参见运行共享GPU调度示例。