ACK集群Pro版支持共享GPU,共享GPU能够在Kubernetes上实现共享GPU调度和显存隔离。本文介绍如何设置共享GPU调度的多卡共享策略。
前提条件
多卡共享信息介绍
目前多卡共享仅支持显存隔离且算力共享的场景,不支持显存隔离且算力分配的场景。
模型开发阶段,有可能需要使用多张GPU卡,但无需使用大量GPU资源。如果将多张GPU卡全部分配给开发平台,有可能造成资源浪费。此时,共享GPU调度的多卡共享将发挥作用。
多卡共享策略指的是某个应用申请了N个GiB的显存,并指定了这N个GiB的显存由M块GPU卡分配,每块GPU卡分配的显存为N/M(目前N/M必须为整数,并且这M张GPU卡必须在同一个Kubernetes节点上)。例如,某个应用申请了8 GiB显存,并指定了GPU卡个数为2,那么某个节点需分配2块GPU卡给该应用,每块GPU卡分配4 GiB显存。单卡共享和多卡共享的区别:
单卡共享:一个Pod仅申请一张GPU卡,占用该GPU部分资源。
多卡共享:一个Pod申请多张GPU卡,每张GPU提供部分资源,且每张GPU提供的资源量相同。
设置多卡共享策略
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在页面右上角,单击使用YAML创建资源。将以下内容拷贝至模板区域,然后单击创建。
YAML文件说明如下:
该YAML定义一个使用tensorflow mnist样例的Job,任务申请8 GiB显存,并申请2张GPU卡,每张GPU卡将提供4 GiB显存。
申请2张GPU卡通过在Pod Label定义标签
aliyun.com/gpu-count=2
实现。申请8 GiB显存通过在Pod resources.limits定义
aliyun.com/gpu-mem: 8
实现。
验证多卡共享策略
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在创建的容器所在行,例如tensorflow-mnist-multigpu-***,单击操作列的终端,进入容器,执行如下命令。
nvidia-smi
预期输出:
Wed Jun 14 03:24:14 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.161.03 Driver Version: 470.161.03 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ | 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 38C P0 61W / 300W | 569MiB / 4309MiB | 2% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla V100-SXM2... On | 00000000:00:0A.0 Off | 0 | | N/A 36C P0 61W / 300W | 381MiB / 4309MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+
预期输出表明,容器内部仅能够使用2张GPU卡,每张卡的总显存均为4309 MiB(也就是申请的4 GiB显存,而每张卡真实显存为16160 MiB)。
在创建的容器所在行,例如tensorflow-mnist-multigpu-***,单击操作列的日志,查看容器日志,可以看到如下关键信息。
totalMemory: 4.21GiB freeMemory: 3.91GiB totalMemory: 4.21GiB freeMemory: 3.91GiB
关键信息表明,应用查询到的设备信息中,每张卡的总显存为4 GiB左右,而不是每张卡真实显存16160 MiB,也就是应用使用的显存已被隔离。