Ubuntu NVIDIA-Docker安装

系统环境:
系统:linux
版本:ubuntu20.04

Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。NVIDIA 改进了原始的Docker,便于容器使用NVIDIA GPU。由于仿真环境的配置需要安装很多库,对于新手不太友好,因此我们提供了Docker镜像,便于开发者使用。尽管Docker理论上适配多种操作系统,但由于后续算法开发仍建议在本地进行,因此操作系统仍需使用Ubuntu。

NVIDIA驱动安装

nvidia-docker需要宿主机已经安装nvidia驱动,为了与镜像的驱动版本保持一致,开发者需要安装470版本,以下安装方式的前提是之前没有安装或是通过apt安装的nvidia驱动。如果之前是其他方法安装的驱动,要根据具体情况更改驱动版本。

安装 nvidia-driver-470 指令

sudo apt install nvidia-driver-470

查看GPU型号
在这里插入图片描述

jk-jone@JKKC:~$ lspci | grep -i nvidia
01:00.0 3D controller: NVIDIA Corporation Device 1f9c (rev a1)

查看当前NVIDIA驱动版本

sudo dpkg --list | grep nvidia-*
或者
cat /proc/driver/nvidia/version

在这里插入图片描述

jk-jone@JKKC:~$ sudo dpkg --list | grep nvidia-*
jk-jone@JKKC:~$

在这里插入图片描述

jk-jone@JKKC:~$ cat /proc/driver/nvidia/version
cat: /proc/driver/nvidia/version: 没有那个文件或目录

像这样则表示没有安装NVIDIA驱动

sudo apt install nvidia-driver-470

用这个装就行了

安装过程会有进度条

看到这个表示安装成功
在这里插入图片描述

NVIDIA-Docker安装

之后安装nvidia-docker

curl https://get.docker.com | sh   && sudo systemctl --now enable docker

在这里插入图片描述

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

在这里插入图片描述

sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

通过运行如下命令测试Docker使用安装成功

sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

在这里插入图片描述

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as ‘legacy’
nvidia-container-cli: initialization error: nvml error: driver not loaded: unknown.

出现了这个问题

翻了很多帖子,最后在github上 NVIDIA/nvidia-docker/issues/1648 找到答案。

是gpu的持久模式(nvidia-persistenced daemon)并未开启。

nvidia-smi

查询显卡资源的时候
报错
在这里插入图片描述

jk-jone@JKKC:~$ nvidia-smi -a
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

可能是内核版本更新的问题,导致新版本内核和原来显卡驱动不匹配

查看已安装内核
在这里插入图片描述

jk-jone@JKKC:~$ dpkg --get-selections |grep linux-image
linux-image-5.14.0-1051-oem deinstall
linux-image-5.14.0-1054-oem deinstall
linux-image-5.14.0-1058-oem install
linux-image-5.14.0-1059-oem install
linux-image-oem-20.04 install

查看正在使用的内核

uname -a

在这里插入图片描述

jk-jone@JKKC:~$ uname -a
Linux JKKC 5.14.0-1059-oem #67-Ubuntu SMP Mon Mar 13 14:22:10 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

显示为 5.14.0-1059

不知道安装nvidia驱动时的内核版本

不知道是不是不匹配造成的

只需执行两条命令就好

sudo apt-get install dkms

查看驱动版本

ls /usr/src | grep nvidia

在这里插入图片描述

jk-jone@JKKC:~$ ls /usr/src | grep nvidia
nvidia-470.182.03

sudo dkms install -m nvidia -v 470.182.03470.182.03表示的是驱动版本号)

jk-jone@JKKC:~$ sudo dkms install -m nvidia -v 470.182.03
Module nvidia/470.182.03 already installed on kernel 5.14.0-1059-oem/x86_64
在这里插入图片描述
所以不是内核不匹配造成的

重启下电脑试试
呵呵,画面出来了
在这里插入图片描述

nvidia-smi -a

查询自己的 Persistence Mode 是否开启

在这里插入图片描述
果然 Persistence Mode 为 Disabled

使用root权限执行如下命令:
nvidia-smi -pm ENABLED

再次用下面的命令,来查看Docker是否安装成功

sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Wed Apr 12 02:47:12 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.182.03   Driver Version: 470.182.03   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  NVIDIA GeForce ...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   50C    P8    N/A /  N/A |      9MiB /  1878MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

出现这个就成功了。

猜你喜欢

转载自blog.csdn.net/qq_32761549/article/details/130227991