Ubuntu实现K8S调度NVIDIA GPU小记

本文最后更新于:7 个月前

场景需求

最近新到zhe货一台GPU服务器,系统是Ubuntu20.04,需要在服务器中搭建个K8S集群来做一些容器相关的业务场景,虽然他的CPU配置蛮高,但是它的GPU也不能浪费,因此本文就记录下利用起他GPU的全流程。

nvidia-docker

nvidia-docker是英伟达出品的一款产品,我相信能找到我这篇藏在犄角旮旯里的破文章的人,肯定已经了解了他和docker之间的异同,这里提供个传送门知道英伟达官网的相关介绍>>>戳这里<<<(其实就是我懒得写了)。

英伟达驱动

要想使用GPU资源,那么你首先得有GPU,有了GPU,还需要安装相对应的驱动才能正常使用。

查看GPU型号

在Ubuntu中,可以使用以下命令查看GPU型号:

1
ubuntu-drivers devices

这里我的运行结果如下:
image.png
(还是一块RTX2070 SUPER!!想拆下来带回家装到我的电脑上玩吃鸡)
其中可以看到倒数第三行的recommended(推荐的意思),这表明推荐安装的驱动是:nvidia-driver-470 - distro non-free

下载驱动

这里需要到英伟达的官方网站下载驱动>>>NVIDIA驱动官网<<<,进入页面之后按照各自查询到的显卡型号填写:
image.png
点击搜索之后可以看到具体的驱动说明,点击下载即可:
image.png

安装驱动

一般默认的Ubuntu会为GPU安装一个开源版本的驱动(可能有可能没有,没有就不用管了),现在我们有了专用的驱动,所以就需要将开源驱动给禁用掉:

1
2
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

或者直接卸载也不是不可以:

1
apt-get remove --purge nvidia*

完事之后重启电脑,接下来就可以安装驱动了,以下的驱动文件名根据你自己的而定:

1
2
chmod 755 NVIDIA-Linux-x86_64-470.74.run
./NVIDIA-Linux-x86_64-470.74.run

安装驱动时,可能会因为缺少一些依赖而导致安装失败,可以在安装失败之后执行apt install -f自动安装依赖。安装过程中一路同意即可。
安装过程中可能的问题:WARNING: Unable to find suitable destination to install 32-bit compatibility libraries
执行以下命令装以来即可:

1
2
3
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386

nvidia-docker安装

安装nvidia-docker可以参考官网的教程>>>安装教程<<<,我这里实在实在实在是懒得做搬迁了:-)

创建K8S集群

本人为了图方便,搭建k8S使用的是rancher,之前的文章中有相关的流程,这里不在赘述,直接到搭建完K8S集群之后的步骤,关于搭建K8S的流程这里给一个传送门>>>Rancher安装以及创建K8S集群<<<(备用地址:>>>CSDN:Rancher安装以及创建K8S集群<<<

安装K8S的英伟达GPU插件

相关的调度方法其实K8S官网也有>>>K8S<<<,其实就是在K8S集群中安装一个相关的插件:

1
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml

测试

我们到dockerhub中,拉取一个tensorflow-gpu镜像,这里使用opensciencegrid/tensorflow-gpu:latest,这里我使用Rancher管理界面创建了一个负载,GPU分配1:
image.png
之后我们在这个负载容器内使用tensorflow来测试下是否能调取到GPU:
首先执行python3进入python交互终端,输入一下代码:

1
2
import tensorflow as tf
print('GPU', tf.test.is_gpu_available())

若显示GPU True则表明调度成功。
image.png
如果在以上步骤中,没有安装驱动、没有安装K8S的英伟达支持插件等等都会导致无法调度,显示GPU False。
以上就是简单的记录,后续有时间将会更新文中未搬迁过来的内容,完结撒花。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!