#查看服务器是否有gpu
[root@gpu ~]# lspci | grep -i nvidia
0b:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
13:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
#查看服务器是否已经安装有gpu英伟达驱动
lsmod | grep -i nvidia
#查看gpu型号、gpu驱动版本等,能列出信息说明驱动已经安装成功,没有信息则说明还没安装驱动
nvidia-smi
#查看是否安装有默认驱动,没有跳过该步骤,有显示内容则说明安装有默认驱动,需要卸载掉,不然会和nvidia冲突,卸载步骤如下
lsmod | grep nouveau
centos6:vim /etc/modprobe.d/blacklist.conf
centos7:vim /usr/lib/modprobe.d/dist-blacklist.conf
#centos 7直接使用命令修改
ls /usr/lib/modprobe.d/dist-blacklist.conf && echo $?
sed -i -e '/blacklist viafb/ablacklist nouveau' -e '/blacklist viafb/aoptions nouveau modeset=0' /usr/lib/modprobe.d/dist-blacklist.conf && echo $?
echo "检查是否修改成功:";grep 'nouveau' /usr/lib/modprobe.d/dist-blacklist.conf
#或者手动编辑文件亦可,在blacklist viafb等列的文件末尾添加下面两句
blacklist nouveau
options nouveau modeset=0
#备份原来的镜像,重新生成镜像文件,可以临时禁用,重启,再次确认是否已经禁用/卸载
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)
modprobe -r nouveau
reboot
lsmod | grep nouveau
#将下载的gpu驱动文件上传到服务器安装即可
yum install gcc make -y
#直接安装即可,视情况加参数
chmod a+x NVIDIA-Linux-x86_64-470.199.02.run
./NVIDIA-Linux-x86_64-470.199.02.run
在k8s中,gpu资源的名称叫做nvidia/gpu或者amd/gpu,其中是nvidaia公司的生产的nvidaia类型的gpu,后者是amd公司生产的amd类型gpu。 注意,目前对gpu的使用配置有如下限制: 1、gpu资源只能在limits字段设置,不可以仅指定 requests 而不指定 limits,可以同时指定 limits 和 requests,不过这两个值必须相等, 2、可以指定 gpu 的 limits 而不指定其 requests,则pod默认将requests值等价于limits 值; 3、 pod中的容器之间是不共享 gpu 的,gpu 也不可以超量分配(注:cpu可以超量使用); 4、每个容器可以请求一个或者多个 gpu,但是必须是整数,用小数值来请求部分 gpu 是不允许的。
#复制一份docker配置文件,以防被覆盖
cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
#根据官网步骤安装nvidia-container-toolkit
<https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-yum-or-dnf>
Configure the repository:
#下载仓库
curl -s -L <https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo> | \\
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
#安装NVIDIA Container Toolkit
yum search --showduplicates nvidia-container-toolkit
yum install -y nvidia-container-toolkit
#配置容器运行时
#nvidia-ctk命令将会修改/etc/docker/daemon.json文件以便Docker可以使用nvidia容器运行时
nvidia-ctk runtime configure --runtime=docker
#实际上,上面nvidia-ctk命令是往/etc/docker/daemon.json文件追加了如下参数
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
#重启dockers
systemctl restart docker
#测试容器中使用gpu
#使用下面的任意一条命令运行一个简单的容器测试,可以正常显卡的信息则说明配置成功
#--gpus N 表示分配多少gpu显卡到容器,all表示全部gpu显卡
#--runtime指定运行时为nvidia,要使用nvidia运行时才能正常使用gpu,当前默认运行时是runc
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
docker run --rm --runtime=nvidia nvidia/cuda:9.0-base nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.199.02 Driver Version: 470.199.02 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| gpu Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | gpu-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:0B:00.0 Off | 0 |
| N/A 34C P0 25W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 Tesla T4 Off | 00000000:13:00.0 Off | 0 |
| N/A 35C P0 26W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
#修改docker默认运行时
#docker要使用nvidia运行时才能正常使用gpu,以上我们使用docker run命令临时设置启动容器的运行时,但在k8s中,kubelet调用docker,所以要将docker默认运行时设置为nvidia.
#查看当前docker默认运行时
docker info | grep -i 'Default Runtime'
Default Runtime: runc
#修改docker默认运行时
vim /etc/docker/daemon.json
{
"exec-opts": [
"native.cgroupdriver=systemd"
],
"default-runtime": "nvidia", #设置默认运行时
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
#重启docker并确认默认运行时生效
systemctl restart docker
docker info | grep -i 'Default Runtime'