Kubernetes集群升级NVidia GPU驱动版本

最近Kubernetes、Docker和NVidia GPU驱动都进行了较大的升级,因此考虑对Kubernetes集群升级NVidia GPU驱动版本。我这里使用Ubuntu 18.04LTS + NVidia GPU Driver 410.78 + Kubernetes 1.13.1 + Docker CE 18.09-3 + NVidia Docker2 组合,虽然安装的软件较多,因为一直在用比较熟悉,还算顺利。也可以选择其他的版本组合,但所用的版本一定要匹配,否则会引起各种错误。

1、升级GPU驱动

这个步骤稍微多一些,具体方法参考:

2、升级Docker CE容器引擎

在容器中使用Nvidia的GPU,需要安装nvidia-docker2。最新的nvidia-docker2版本需要docker-ce 18.09版本的支持。安装方法如下:

sudo apt-get install -y docker-ce=5:18.09.0~3-0~ubuntu-bionic --allow-change-held-packages

新安装docker的,可以参考:Ubuntu快速玩转机器学习

3、升级nvidia-docker容器GPU引擎

Ubuntu默认安装docker.io的Docker版本,并非最新版本。这里直接安装最新版本,查看 更多信息

安装nvidia-docker2软件,如下:

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

# 测试一下:
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

4、设置Docker运行配置参数

首先,检查每一个节点,启用 nvidia runtime为缺省的容器运行时。我们将编辑docker daemon config文件,位于/etc/docker/daemon.json

{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

上面的这一行("exec-opts": ["native.cgroupdriver=systemd"])是在Ubuntu16.04+DockerCE上面必须要的,否则kubelet无法成功启动(参考 https://my.oschina.net/u/2306127/blog/1628082)。

如果 runtimes 没有, 到nvidia-docker 参考,首先进行安装。

第二步,启用 DevicePlugins feature gate,在每一个GPU节点都要设置。

如果你的 Kubernetes cluster是通过kubeadm部署的,并且节点运行systemd,需要打开kubeadm 的systemd unit文件,位于 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 然后添加下面的参数作为环境变量:

Environment="KUBELET_GPU_ARGS=--feature-gates=DevicePlugins=true"

该设置在1.10版本及以后,已经不再需要了。参见:Kubernetes中调度GPU资源

重新载入配置文件,然后重新启动服务:

$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet

5、升级Kubernetes GPU add-on

完成所有的GPU节点的选项启用,然后就可以在在Kubernetes中启用GPU支持,通过安装Nvidia提供的Daemonset服务来实现,方法如下:

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.12/nvidia-device-plugin.yml

6、运行 GPU Jobs测试

NVIDIA GPUs 现在可以通过资源名 nvidia.com/gpu请求在容器里进行访问。

将以下内容保存为nvidia-gpu.yaml。

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  nodeName: podc01
  containers:
    - name: cuda-container
      image: nvidia/cuda:9.0-devel
      resources:
        limits:
          nvidia.com/gpu: 2 # requesting 2 GPUs
    - name: digits-container
      image: nvidia/digits:6.0
      resources:
        limits:
          nvidia.com/gpu: 1 # requesting 2 GPUs

然后运行 kubectl apply -f nvidia-gpu.yaml -n nvidia,部署该pod到集群中。

其中:

  • nodeName: podc01为我指定的节点名称,因为我的集群中有的节点没有GPU卡,如果有多个节点可以通过label指定节点选择。
  • nvidia为命名空间,可以通过kubectl create ns nvidia创建。

完毕。

 

更多参考:

转载于:https://my.oschina.net/u/2306127/blog/2996776

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值