在某些场景下,您可能不需要GPU隔离模块参与共享GPU调度。例如,有些业务应用本身提供显存限制能力,类似于Java应用启动时,可以通过选项指定该应用能够使用的最大内存值。这种情况下,使用GPU隔离模块隔离业务显存反而会有问题。对此,共享GPU调度支持某些节点不安装GPU隔离模块的选项。本文介绍如何配置共享GPU调度仅共享不隔离策略。
前提条件
步骤一:创建节点池
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池页面,单击右上角的创建节点池。
在创建节点池页面,设置创建节点池的配置项,然后单击确认配置。下表仅介绍主要配置项,其余配置项请参见创建节点池。
配置项
说明
实例规格
架构选择GPU云服务器,选择多个GPU实例规格。本文以使用GPU卡V100为例进行说明。
期望节点数
设置节点池初始节点数量。如无需创建节点,可以填写为0。
节点标签
单击,添加如下记录:键为
ack.node.gpu.schedule
,值为share
。仅开启GPU共享调度能力。关于节点标签的更多信息,请参见GPU节点调度属性标签。
步骤二:提交任务
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击页面右上角的使用YAML创建资源,将如下代码拷贝至模板区域,然后单击页面下方的创建。
YAML文件说明如下:
该YAML定义了一个使用TensorFlow MNIST样例的Job。Job有1个Pod,该Pod申请4 GiB显存。
Pod申请4 GiB显存通过在Pod resources.limits定义
aliyun.com/gpu-mem: 4
实现。
步骤三:验证仅共享不隔离能力
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在创建的容器所在行,例如tensorflow-mnist-multigpu-***,单击操作列的终端,进入容器,执行如下命令。
nvidia-smi
预期输出:
Wed Jun 14 06:45:56 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.105.01 Driver Version: 515.105.01 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:00:09.0 Off | 0 | | N/A 35C P0 59W / 300W | 334MiB / 16384MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+
Pod内部能够发现整张GPU卡的总显存16384 MiB(本文示例使用GPU卡为V100),而在有隔离模块参与的场景下,该值与Pod申请值一致(本文示例为4 GiB),说明配置生效。
业务应用需要从两个环境变量中读取该业务能够使用的显存值。
ALIYUN_COM_GPU_MEM_CONTAINER=4 # 该Pod能够使用的显存值。 ALIYUN_COM_GPU_MEM_DEV=16 # 每张GPU卡总共的显存值。
如果应用需要的是显存的百分比,也就是该应用使用的显存占GPU卡总显存的百分比。可以使用上述两个环境变量得出:
percetange = ALIYUN_COM_GPU_MEM_CONTAINER / ALIYUN_COM_GPU_MEM_DEV = 4 / 16 = 0.25