目录

k8s-dra-driver-gpu的安装部署和测试

概述

大模型时代,GPU 已经了各个大模型和互联网公司的重要资产,如何高效地使用 GPU 资源,最大限度地满足业务需求变成了基础架构部门的重点项目。而传统的基于 device plugin 机制调度和分配 GPU 的方法已经逐渐无法满足越来越多样化的场景和需求,比如 GPU 资源无法共享,或者是一般情况下,同一块显卡无法分配给两个 Pod 使用。尽管各个云厂商有各自 vGPU 等方案,但还是无法满足。

Kubernetes组件配置更新

由于 DRA 的功能还处于 beta 状态,所以需要通过在 kube-apiserver/kube-scheduler/kube-controller-manager/kubelet 都需要开启 feature-gates 的选项,具体如下。

1
2
3
4
5
6
# kube-apiserver/kube-scheduler/kube-controller-manager静态Pod的启动命令增加下面的参数
- --feature-gates=kube:DynamicResourceAllocation=true

# /var/lib/kubelet/config.yaml文件增加下面的配置
featureGates:
  DynamicResourceAllocation: true

GPU容器环境配置

推荐使用 gpu-operator 配置,其中包括 driver,还有 Containerd 的配置文件,gpu-operator 都可以快速配置,非常方便。

1
helm install gpu-operator . -n gpu-operator --create-namespace --set driver.enabled=false

安装k8s-dra-driver-gpu

推荐使用官方仓库的 Helm Charts 来安装。

1
helm install nvidia-dra . --set resources.gpus.enabled=true --set gpuResourcesEnabledOverride=true --set resources.computeDomains.enabled=false

测试任务

因为笔者测试环境只有一块 T4,所以就测试一下同一块显卡,分配给两个 Pod 的方式。

总结

最近看了 Kubernetes 支持 DRA 的方式分配 GPU,同一块 GPU 可以分配给不同的 Pod,类似在线服务在潮汐的时候可以通过 vLLM 的 sleep 的功能把显存让出来,不需要删除 Pod,刷数的 Spark 或者其他类型 Pod 也分配到这个 GPU 上,这样早上还资源的时候,直接删除 Spark 和刷数的 Pod,在线服务通过 vLLM wakeup,也不用重新去 hdfs 拉模型了,启动也更快。相比传统的 device plugin,DRA plugin 可以更灵活地分配 GPU 资源。

参考资料

  1. Dynamic Resource Allocation (DRA) for GPUs in Kubernetes