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
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不用管,跳过
安装32位兼容库 -yes
4.查看状态
nvidia-smi
如果读取不到显卡状态 需要更改虚拟机配置
hypervisor.cpuid.v0 = “FALSE”
2.ubuntu20安装显卡驱动
1.在线安装显卡驱动
1.运行命令获取有关图形卡和可用驱动程序的信息
ubuntu-drivers devices
如果显示没有这个命令,则先安装ubuntu-drivers-common:apt install ubuntu-drivers-common
然后会显示推荐安装的驱动,我们就安装这个
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
接下来会出现几个选项界面,会选可以直接到第五步验证是否安装成功
可能遇到的问题
- 没有安装gcc、make,直接安装即可
sudo apt-get install gcc
sudo apt-get install make
- The distribution-provided pre-install script failed! Are you sure you want to continue?
选择 yes 继续。 - 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 继续。 - 问题没记住,选项是:install without signing
问题大概是:Nvidia's 32-bit compatibility libraries?
选择 No 继续。 - 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支持显卡
- 最初的docker是不支持gpu的
- 为了让docker支持nvidia显卡,英伟达公司开发了nvidia-docker。该软件是对docker的包装,使得容器能够看到并使用宿主机的nvidia显卡。
- 根据网上的资料,从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