微信公众号:运维开发故事
作者:冬子先生
环境:centos7
kubernetes版本:1.24
前言:这两天在搞大模型服务,之前也没了解过GPU相关的服务,因此整理了一个关于如何能够使用gpu节点文档。
1、现象
本来服务已经部署上去,但是一直处理pending状态,不能正常调度,describe查看返回这么一个错误:
重点是这个 Insufficient nvidia.com/gpu.,提示我没有可用的gpu,第一次遇到是也是感觉有点蒙圈,因为再机器上已经成功安装好驱动,可以正常查看GPU状态。
img
经过查询,kubernetes要调度GPU,也需要安装对应厂商的设备插件
- GPU容器创建流程
2.安装GPU插件
gpu节点加入k8s集群,做AI分析是一种比较常见的情景,当pod使用GPU卡时,通常有以下两种方案:
2.1 方案一:使用nvidia官方插件
此时资源分配时,是按照卡的数量进行资源分配,k8s的yml文件类似于如下:
其中1表示使用1张GPU卡。
步骤一: 安装nvidia Linux驱动
- 下载并安装nvidia Linux 驱动:
步骤二: 安装 nvidia runtime
https://nvidia.github.io/nvidia-container-runtime/
- ubuntu 安装 nvidia runtime
- centos 安装 nvidia runtime
步骤三:配置containerd/docker
containerd
若K8s使用containerd,按照如下方式进行配置:
修改/etc/containerd/config.toml文件
cat /etc/containerd/config.toml
重启containerd
docker
- 若K8s使用docker,按照如下方式进行配置:
配置daemon.json
cat /etc/docker/daemon.json
重启docker
步骤四:在 Kubernetes 中启用 GPU 支持
在集群中的所有 GPU 节点上配置上述选项后,您可以通过部署以下 Daemonset 来启用 GPU 支持:
cat nvidia-device-plugin.yml
通过apply进行部署,并查看
验证
2.2 方案二:使用第三方插件
这里使用阿里云gpushare插件,git地址:https://github.com/AliyunContainerService/gpushare-device-plugin/
此时资源分配时,是可以按照卡的显存大小进行资源分配,k8s的yml文件类似于如下:
其中3表示使用的显存大小,单位G
步骤一: 安装nvidia Linux驱动
- 下载并安装nvidia Linux 驱动:
步骤二: 安装 nvidia runtime
https://nvidia.github.io/nvidia-container-runtime/
- ubuntu 安装 nvidia runtime
- centos 安装 nvidia runtime
步骤三:配置containerd/docker
containerd
若K8s使用containerd,按照如下方式进行配置:
修改/etc/containerd/config.toml文件
重启containerd
docker
- 若K8s使用docker,按照如下方式进行配置:
配置daemon.json
cat /etc/docker/daemon.json
重启docker
步骤四:安装gpushare-scheduler-extender插件
参考文档:https://github.com/AliyunContainerService/gpushare-scheduler-extender/blob/master/docs/install.md
1.修改kube-scheduler配置:
因为我们k8s使用二进制方式安装,所以直接修改kube-scheduler启动文件,步骤如下:
- 先创建/etc/kubernetes/scheduler-policy-config.json,内容如下:
- 然后修改cat /etc/systemd/system/kube-scheduler.service文件,添加--policy-config-file相关内容
cat /etc/systemd/system/kube-scheduler.service
重启kube-scheduler
2.部署gpushare-schd-extender
3.部署device-plugin
首先需要给节点添加label "gpushare=true"
然后部署device-plugin插件
4.安装kubectl-inspect-gpushare插件,用来查看GPU使用情况
公众号:运维开发故事
github: https://github.com/orgs/sunsharing-note/dashboard
博客:https://www.devopstory.cn
爱生活,爱运维
我是冬子先生,《运维开发故事》公众号团队中的一员,一线运维农民工,云原生实践者,这里不仅有硬核的技术干货,还有我们对技术的思考和感悟,欢迎关注我们的公众号,期待和你一起成长!