linux安装显卡驱动及docker、containerd使用显卡

发布时间 2023-12-01 16:36:12作者: 紫藤萝的沉默

1.centos安装显卡驱动

1.查看是否有NVIDIA显卡(若找不到lspci命令,可以安装 yum install -y pciutils)

lspci | grep -i nvidia

2.屏蔽nouveau驱动

vi /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
vi /usr/lib/modprobe.d/nvidia-installer-disable-nouveau.conf
#写入
blacklist nouveau
options nouveau modeset=0

3.重做 initramfs镜像

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak

dracut /boot/initramfs-$(uname -r).img $(uname -r)

4.修改为文本运行模式

systemctl set-default multi-user.target

5.重启电脑

reboot

6.安装必须的组件(安装以下的包最好安装与系统内核版本一致的包)

yum install -y gcc kernel-devel kernel-headers

7.安装NVIDIA官方驱动

1.安装 NVIDIA 显卡检测工具
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

# 安装检测工具
# yum -y install nvidia-detect
2.检测显卡,正常情况下会输出最新且适用当前显卡的驱动程序的版本号信息
nvidia-detect -v

image

3.去官网https://www.nvidia.cn/geforce/drivers/ 下载run文件,比如我下载的NVIDIA-Linux-x86_64-470.86.00.run,然后上传到虚拟机(https://download.nvidia.com/XFree86/Linux-x86_64/)。

或者获取到下载链接,直接在机器上用wget命令下载,安装驱动,必需指定 kernel source path(根据需要修改),否则会报错

chmod +x NVIDIA-Linux-x86_64-470.86.run
./NVIDIA-Linux-x86_64-470.94.run --kernel-source-path=/usr/src/kernels/3.10.0-1160.53.1.el7.x86_64/ -k $(uname -r) 

会提示一些warning不用管,跳过
image

安装32位兼容库 -yes
image

4.查看状态
 nvidia-smi 

image

如果读取不到显卡状态 需要更改虚拟机配置

image

image

hypervisor.cpuid.v0 = “FALSE”

2.ubuntu20安装显卡驱动

1.在线安装显卡驱动

1.运行命令获取有关图形卡和可用驱动程序的信息
ubuntu-drivers devices

如果显示没有这个命令,则先安装ubuntu-drivers-common:apt install ubuntu-drivers-common
然后会显示推荐安装的驱动,我们就安装这个
image

2.安装显卡驱动
apt install nvidia-driver-470
3.重启,运行命令,查看状态
 nvidia-smi
4.关闭自动更新
#关闭内核自动更新
apt-mark hold linux-image-generic linux-headers-generic 
#相反的
apt-mark unhold linux-image-generic linux-headers-generic
编辑vim /etc/apt/apt.conf.d/10periodic,全部改成0
编辑vim /etc/apt/apt.conf.d/20auto-upgrades,全部改成0

查看已安装版本 dpkg --get-selections |grep linux-headers
查看已安装版本 dpkg --get-selections |grep linux-image

2.离线安装显卡驱动

1.去官网https://www.nvidia.cn/geforce/drivers/ 下载run文件,比如我下载的NVIDIA-Linux-x86_64-470.82.00.run,然后上传到虚拟机(https://download.nvidia.com/XFree86/Linux-x86_64/)。
2.禁用nouveau

ubuntu 默认安装了第三方开源的驱动程序nouveau,安装nvidia显卡驱动首先需要禁用nouveau,不然会碰到冲突的问题,导致无法安装nvidia显卡驱动。

#编辑文件blacklist.conf:
vim /etc/modprobe.d/blacklist.conf

#在文件最后部分插入以下两行内容
blacklist nouveau
options nouveau modeset=0

#更新系统
sudo update-initramfs -u

#==重启系统(一定要重启)==
sudo reboot

#验证nouveau是否已禁用
lsmod | grep nouveau
3.安装驱动
#给驱动run文件赋予执行权限:
sudo chmod  a+x NVIDIA-Linux-x86_64-470.82.00.run

#安装:
sudo ./NVIDIA-Linux-x86_64-470.82.00.run -no-x-check -no-nouveau-check -no-opengl-files

只有禁用opengl这样安装才不会出现循环登陆的问题
后面几个参数的意思:
-no-x-check:安装驱动时关闭X服务
-no-nouveau-check:安装驱动时禁用nouveau
-no-opengl-files:只安装驱动文件,不安装OpenGL文件lsp

接下来会出现几个选项界面,会选可以直接到第五步验证是否安装成功
可能遇到的问题

  1. 没有安装gcc、make,直接安装即可
sudo apt-get install gcc
sudo apt-get install make
  1. The distribution-provided pre-install script failed! Are you sure you want to continue?
    选择 yes 继续。
  2. Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later?
    选择 No 继续。
  3. 问题没记住,选项是:install without signing
    问题大概是:Nvidia's 32-bit compatibility libraries?
    选择 No 继续。
  4. Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up.
    选择 Yes 继续
4.安装完毕之后,挂载Nvidia驱动
modprobe nvidia
5.运行命令,查看状态
nvidia-smi
6.关闭自动更新

关闭内核自动更新
apt-mark hold linux-image-generic linux-headers-generic
相反的
apt-mark unhold linux-image-generic linux-headers-generic
编辑vim /etc/apt/apt.conf.d/10periodic,全部改成0
编辑vim /etc/apt/apt.conf.d/20auto-upgrades,全部改成0

查看已安装版本 dpkg --get-selections |grep linux-headers
查看已安装版本 dpkg --get-selections |grep linux-image

3.安装nvidia-docker,docker支持显卡

  1. 最初的docker是不支持gpu的
  2. 为了让docker支持nvidia显卡,英伟达公司开发了nvidia-docker。该软件是对docker的包装,使得容器能够看到并使用宿主机的nvidia显卡。
  3. 根据网上的资料,从docker 19版本之后,nvidia-docker成为了过去式。不需要单独去下nvidia-docker这个独立的docker应用程序,也就是说gpu docker所需要的Runtime被集成进docker中,使用的时候用--gpus参数来控制。
#docker run 的时候加上 --gpus参数,示例:
docker run -it --rm --name test --gpus all ubuntu:latest
1.下载nvidia-docker.repo文件,并将该文件输出到/etc/yum.repos.d/nvidia-docker.repo
curl -s -L https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo  
2.安装nvidia-docker
yum install nvidia-docker
3.修改docker配置(如果采用Swarm启动nvidia docker)
$ cat /etc/docker/daemon.json 

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia"
}
4.重启docker
systemctl daemon-reload
systemctl restart docker
5.运行nvidia-docker
systemctl start nvidia-docker
systemctl enable nvidia-docker
systemctl status nvidia-docker
6.测试
docker run --runtime=nvidia --rm nvidia/cuda:10.2-cudnn7-runtime-centos7 nvidia-smi

4.使用--gpus

1.安装nvidia-container-runtime和nvidia-container-toolkit
#配置仓库
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo |   sudo tee /etc/yum.repos.d/nvidia-container-runtime.repo

#安装
yum install nvidia-container-runtime
yum install -y nvidia-container-toolkit
2.修改docker配置文件
cat /etc/docker/daemon.json

{
  "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
  "default-runtime": "nvidia",
  "log-driver": "json-file",
  "log-opts": {"max-size": "100m", "max-file": "3"},
  "default-ulimits":{
    "nofile":{
      "Name": "nofile",
      "Hard": 1048576,
      "Soft": 1048576
    }
  }
}

#重启docker
3.验证
docker run --gpus all --rm nvidia/cuda:10.2-cudnn7-runtime-centos7 nvidia-smi

5.containerd使用显卡

1.安装nvidia-container-runtime

#配置仓库
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo |   sudo tee /etc/yum.repos.d/nvidia-container-runtime.repo

#安装
yum install nvidia-container-runtime

2.修改Containerd文件

mkdir /etc/containerd
#生成默认配置
containerd config default > /etc/containerd/config.toml

修改以下内容

...
    [plugins."io.containerd.grpc.v1.cri".containerd]
      snapshotter = "overlayfs"
      default_runtime_name = "runc"
      no_pivot = false
...
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          runtime_type = "io.containerd.runtime.v1.linux" # 将此处 runtime_type 的值改成 io.containerd.runtime.v1.linux
...
  [plugins."io.containerd.runtime.v1.linux"]
    shim = "containerd-shim"
    runtime = "nvidia-container-runtime" # 将此处 runtime 的值改成 nvidia-container-runtime
...

#重启containerd
systemctl restart containerd