赞
踩
背景
由于需要用到dgl库中最新的采样器,必须将dgl升级到0.9.0版本。dgl本身升级很方便,一个pip命令搞定,可惜升级完不能用,报错信息说需要更高的pytorch版本,于是又将pytorch升级到对应版本。这下应该可以了吧,不,并不,运行的时候又报错说当前的cuda版本太低,不支持这个高版本的pytoch,于是只好继续升级cuda。终于把cuda升级完了,刚想松口气,结果又报错说显卡驱动版本太低,不支持当前的cuda。。。于是,只能继续升级显卡驱动。升级过程中遇到一些坑,还是值得记录一下的。
lspci | grep -i vga
输出如下内容:
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
后来发现我的不是vga,尴尬。。
继续输入:
lspci | grep -i nvidia
然后就输出了四块显卡的信息:
最后那个“1db6”,就是显卡的十六进制数字代码,用这个代码可以去官网查具体型号。
查询地址:查询对应的显卡型号
得到显卡信息:
去英伟达官网查询对应的驱动版本(查询地址:https://www.nvidia.com/Download/index.aspx#),我们需要的cuda版本是10.2,最终选了下图中红框框住的驱动,直接下载下来然后上传服务器,或者用wget命令直接下载到服务器上。
安装过程整体比较顺利。
一开始报错是因为服务器上有进程还在使用gpu,所以安装驱动的过程中会出现error提示,看到报错别慌,按照错误信息去做就行。
先用下面这个命令查一下显卡当前的使用情况:
nvidia-smi
输出如下:
把红框里这些进程全都kill掉,然后进入刚才下载的驱动所在的目录,执行如下安装命令:
sudo sh NVIDIA-Linux-x86_64-440.95.01.run
一路回车,全都选ok,就安装完毕啦。
在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用不了了,想新开一个容器时,总是报下面这种错:
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
但是没用。。。
又按照各种教程一通操作,结果还是没用,无奈之下只能选择重装。
当前版本查询:
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
一开始重装了一个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里用显卡了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。