Skip to content

gpu机器加入集群

栾鹏 edited this page Sep 12, 2024 · 4 revisions

1、gpu机器环境的准备

机器安装驱动

参考 install/kubernetes/rancher/install_gpu.md

docker 下 nvidia 运行时

参考

  • install/kubernetes/rancher/init_node_gpu_ubuntu.sh
  • install/kubernetes/rancher/init_node_gpu_centos.sh

首先需要找运维同学安装机器gpu卡对应的驱动,然后需要让你的docker能识别并应用gpu驱动。

  • 如果你的docker是19.03及以后的版本,并且只在docker中使用而不在k8s中使用,可以只安装nvidia-container-runtime 或者 只安装nvidia-container-toolkit,然后重启docker,就可以在docker run时通过添加参数--gpus 来应用gpu卡了。

  • 如果你的docker是19.03以前的版本,或者19.03以后的版本并需要在k8s中使用gpu,那需要安装nvidia docker2,因为k8s还没有支持docker的--gpu参数。安装nvidia docker2以后,修改docker 默认runtime。重启docker,这样就能在docker或者k8s中使用gpu了。

cat /etc/docker/daemon.json

{
    "insecure-registries":["docker.oa.com:8080"],
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

containerd 下 nvidia 运行时

当从docker 切换到containerd后,也需要在containerd中适配nvidia-container 。

适配 containerd中的配置文件都在 /etc/containerd/config.toml 文件中,我们可以在config.toml中修改runtime插件的配置,首先切换到runtime v2。

  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      runtime_type = "io.containerd.runc.v2"

将CRI配置中的runc binary改为 nvidia-container-runtime

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    BinaryName = "nvidia-container-runtime"

2、将机器加入k8s集群

加入k8s集群后为机器添加标签,标签只是用户管理和选择机型设备。

gpu=true       用于表示 gpu设备
vgpu=true       用于表示 vgpu设备
gpu-type=V100  用于表示gpu型号,或者gpu-type=T4

train=true     用于训练
service=true   用于推理
notebook=true  用于开发

3、部署k8s gpu插件(自带了)

gpu/nvidia-device-plugin.yml
daemonset kube-system/nvidia-device-plugin.会在机器上部署pod,用于scheduler识别改机器可用gpu算力。

4、检查k8s机器 可占用gpu资源。

kubectl get node -o yaml

status:
  capacity:
    cpu: '20'
    ephemeral-storage: 51473868Ki
    hugepages-1Gi: '0'
    hugepages-2Mi: '0'
    memory: 81846828Ki
    nvidia.com/gpu: '1'                # 英伟达gpu的资源占用
    pods: '61'

如果不存在可占用gpu,那可能是因为机器上非k8s之外存在占用。需要先关停机器上的gpu占用进程,然后重启kubelet。 rancher重启kubelet的方法是 docker restart kubelet

5、部署k8s监控组件(自带了)

daemonset monitoring/dcgm-exporter.会在机器上部署pod,用于监控gpu上的使用率

6、调度占用gpu

直接写占用卡数目,对于异构gpu环境,也可以选择占用的卡型。比如1(T4),2(V100),0.1

7、基于gpu利用率进行弹性伸缩(自带了)

需要先将gpu指标采集到prometheus,然后再将prometheus指标转变为对象指标控制hpa。

prometheus/prometheus_adapter目录下会部署kube-system/kubeflow-prometheus-adapter用于将prometheus指标转变为对象指标

开源体验地址:

http://39.96.177.55:8888/

个人代理商咨询

代理商协议联系管理员

开源共建

学习、部署、体验、开源建设、商业合作 欢迎来撩

Clone this wiki locally