我有一个内部部署的k8s GPU集群,它有几个计算节点,分别有8个GPU。因为我们正在迁移到k8s的路上,而且还有一些剩余的项目要使用GPU,所以我不得不保留一些k8s不允许使用的GPU。此外,一些项目需要使用连续的GPU(我的意思是,使用物理上相邻的PCIE总线(,因此有必要保留这些GPU的特定性。
所以问题是,是否可以强制k8s工作程序只使用特定的GPU?例如,我想将我的k8s工作程序配置为分配从0到4的GPU,而不能分配从4到7的GPU。
谢谢!
如果您希望您的作业永远不使用gpu节点之一,则可以使用noschedule污染来污染这些节点例如:
kubectl taint nodes aks-gpuv100small.. no=k8s:NoSchedule
如果你想让你的作业只在特定的gpu节点上运行,你可以给这个节点添加标签,给你的作业添加nodeSelector
kubectl label nodes aks-gpuv100small.. k8s=gpu
nodeSelector:
k8s: gpu
如果你想在gpu节点内部只向作业公开一些设备,你可以在作业中添加以下环境变量
CUDA_VISIBLE_DEVICES=0,1,2,3
这取决于你的设备插件的具体情况,如果你指的是英伟达插件,我不这么认为,至少没有一些定制工作。这个https://github.com/NVIDIA/go-gpuallocator库确实支持模块化分配策略,但我不认为这在设备插件中是一个选项。它在配置方面并没有太多的问题。但你可以用叉子叉着它进城。