由dgl 升级到0.9.0引起的nvidia显卡驱动升级和docker升级

背景

由于需要用到dgl库中最新的采样器,必须将dgl升级到0.9.0版本。dgl本身升级很方便,一个pip命令搞定,可惜升级完不能用,报错信息说需要更高的pytorch版本,于是又将pytorch升级到对应版本。这下应该可以了吧,不,并不,运行的时候又报错说当前的cuda版本太低,不支持这个高版本的pytoch,于是只好继续升级cuda。终于把cuda升级完了,刚想松口气,结果又报错说显卡驱动版本太低,不支持当前的cuda。。。于是,只能继续升级显卡驱动。升级过程中遇到一些坑,还是值得记录一下的。

显卡驱动升级

1. 查看当前的显卡型号

lspci | grep -i vga

输出如下内容:

00:02.0 VGA compatible controller: Cirrus Logic GD 5446

 后来发现我的不是vga,尴尬。。

继续输入:

lspci | grep -i nvidia

然后就输出了四块显卡的信息:

 最后那个“1db6”,就是显卡的十六进制数字代码,用这个代码可以去官网查具体型号。

2. 查看显卡对应适配的驱动版本并下载

查询地址:查询对应的显卡型号

 得到显卡信息:

 去英伟达官网查询对应的驱动版本(查询地址:https://www.nvidia.com/Download/index.aspx#),我们需要的cuda版本是10.2,最终选了下图中红框框住的驱动,直接下载下来然后上传服务器,或者用wget命令直接下载到服务器上。

3. 安装

安装过程整体比较顺利。

一开始报错是因为服务器上有进程还在使用gpu,所以安装驱动的过程中会出现error提示,看到报错别慌,按照错误信息去做就行。

先用下面这个命令查一下显卡当前的使用情况:

nvidia-smi

输出如下:

把红框里这些进程全都kill掉,然后进入刚才下载的驱动所在的目录,执行如下安装命令:

sudo sh NVIDIA-Linux-x86_64-440.95.01.run

一路回车,全都选ok,就安装完毕啦。

CUDA安装

在nvidia官网(CUDA Toolkit - Free Tools and Training | NVIDIA Developer)下载对应版本的CUDA。

官网给出了下载和安装命令:

wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run

docker升级

把显卡驱动升级后,与之伴随的就是原本的docker用不了了,想新开一个容器时,总是报下面这种错:

Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #1:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: mount error: mount operation failed: /data0/docker/overlay2/2c3829faff1c916dff104112f781e4ad55eeb17150b429eca9a29f8da945edba/merged/proc/driver/nvidia/params/version/registry: no such file or directory: unknown

先是重启了docker服务,通过如下命令:

sudo service docker restart

但是没用。。。

又按照各种教程一通操作,结果还是没用,无奈之下只能选择重装。

1. 旧版本查询及卸载

当前版本查询:

yum list installed|grep docker

当前docker相关的版本信息如下:

containerd.io.x86_64                 1.4.6-3.1.el7              @docker-ce-stable

docker-ce.x86_64                     3:20.10.6-3.el7            @docker-ce-stable

docker-ce-cli.x86_64                 1:20.10.6-3.el7            @docker-ce-stable

docker-ce-rootless-extras.x86_64     20.10.6-3.el7              @docker-ce-stable

docker-scan-plugin.x86_64            0.7.0-3.el7                @docker-ce-stable

nvidia-docker2.noarch                2.6.0-1                    @nvidia-docker

全部删掉,删掉删掉: 

sudo yum -y remove containerd.io.x86_64
sudo yum -y remove docker-ce.x86_64
sudo yum -y remove docker-ce-cli.x86_64
sudo yum -y remove docker-ce-rootless-extras.x86_64
sudo yum -y remove docker-scan-plugin.x86_64
sudo yum -y remove nvidia-docker2.noarch

2. 新版本重装(巨坑预警)

一开始重装了一个18.09的版本,很顺利就装上了,装完发现容器里用不了gpu,原来是nvidia-docker2还没装,于是赶紧把这个也装上,结果装上还是不行!进入容器以后,输入nvidia-smi,没有任何输出,也不报错,就很绝望。。。

一开始以为是镜像的问题,就用image id进到镜像里,发现在镜像里nvidia-smi是可以正常输出显卡信息的!

太坑了,只有新开的容器不输出nvidia-smi的信息。

网上一通搜索,说是要编辑这个文件/etc/docker/daemon.json,把nvidia-docker2的信息配置进去,如下所示:

{

    "runtimes": {

        "nvidia": {

            "path": "/usr/bin/nvidia-container-runtime",

            "runtimeArgs": []

        }

    }

}

照做之后,发现没用。。。即便重启了docker服务,新开的容器输入nvidia-smi,还是没有任何反应。

至此,已然走入绝路。。。

不过,对于码农来说,没有绝路,遇山开路,遇水搭桥,遇到悬崖直接跳(不是)。

于是接下来,趁着午休时间又是一通搜索,发现了一个华点——

--gpus all

小小一个参数,让一切拨云见日。

在稿主当前的docker版本中,加上这个参数会报错,但是其他的博主说他们加上这个参数以后就能新开容器,且能用gpu。

最后发现,他们的docker都是19.03以上版本的,稿主的是18.09版本。

查了查 --gpus all这个参数,只有在19.03以上的版本中才能用,而且19.03以上的版本貌似内置了nvidia-docker,无需再单独部署nvidia-docker了。

事已至此,不重装,岂为人?!

于是重复上面的步骤,把18.09版本的docker删了,开始重装19.03版本的。

按照如下步骤:

# 先配一个镜像源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 查查哪些能用
yum list docker-ce --showduplicates | sort -r

# 选一个心仪的安装
sudo yum install -y docker-ce-19.03.9-3.el7

# 重启一下docker服务
sudo systemctl restart docker

# 设一下开机自启
sudo systemctl enable docker

至此,查一下当前docker版本:

docker -v

输出如下:

Docker version 20.10.17, build 100c701

震惊!俺想装的是19.03,怎么装完变成20.10.17了!

不管了,先继续往下,希望这个是向前兼容的。

查一下当前的docker包:

rpm -qa | grep docker

docker-ce-cli-20.10.17-3.el7.x86_64

docker-ce-19.03.9-3.el7.x86_64

docker-scan-plugin-0.17.0-3.el7.x86_64

居然没有nvidia-docker,说好的内置呢。。。难道是放在总包里了。。

作为一个谨慎胆小的码农,必须要亲自再装一下nvidia-docker!

按照官网提示,开始操作:

# 配一下官方的库
sudo yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

# 看看有哪些包能用
sudo yum repolist -v

# 来都来了,安一下containerd.io吧(虽然不知道为啥,但最开始显卡驱动升级之前,貌似就有这个docker包,反正有总比没有强)
sudo yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el7.x86_64.rpm
 
### 官网上的步骤是到了这里才开始安docker,但俺已经安完了。。。跳过跳过,继续往下

# 官网写的,不知道为啥,听官方的
sudo yum clean expire-cache

# 终于,目的地到了
sudo yum install -y nvidia-docker2

安完以后,怀着激动的心,抬起颤抖的手,用docker run命令新开了一个容器,注意要加 --gpus all这个参数

进入容器,小心翼翼输入nvidia-smi。

输出了如下内容:

 哭了!终于安装成功了!

我变秃了,也变强了!

--后续--

有个同事说他容器里还是不能用显卡,俺也不知道咋回事,一开始以为他没加 --gpus all这个参数,就让他用nvidia-docker命令先进镜像,看看镜像正常不正常,结果他说可以了,也不知道是容器可以了,还是镜像可以了,总之现在是能在docker里用显卡了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值