NVIDIA Docker2安装教程及踩坑历险记

mac2025-12-10  3

NVIDIA Docker2安装教程及踩坑历险记

安装前准备本地配置安装必备条件安装动机及原因一点说明 安装nvidia-docker2对Docker使用NVIDIA Container Runtime安装过程中的一些意外

安装前准备

本地配置

服务器系统:Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-60-generic x86_64) 四个GPU 型号:NVIDIA TITAN Xp Docker Version : 18.06.0-ce ,build e68fc7a NVIDIA 驱动版本:418.56 CUDA 10.0 cuDnn 7.6.0

安装必备条件

GNU/Linux x86_64 with kernel version > 3.10 Docker >= 1.12 NVIDIA GPU with Architecture > Fermi (2.1) NVIDIA drivers >= 361.93 (untested on older versions) 确保已为发行版安装了NVIDIA驱动程序和受支持的Docker 版本。

安装动机及原因

因实验室有计算机视觉及其他方向,并且运用tensorflow框架需要用到GPU进行模型训练,因GitHub各项目代码所实现的环境要求不同,服务器环境配置较为繁琐,于是自己钻研docker 技术,以便省去环境配置的麻烦。为了能够在docker容器内利用服务器的GPU资源,需要一个较高版本的NVIDIA显卡驱动+NVIDIA docker插件(已更新至NVIDIA docker2.0),假设在各位已经安装好docker的前提下进行如下步骤。

一点说明

因NVIDIA docker2.0版本在机制上较NVIDIA docker1.0版本有明显的改进,版本对比为了跟进发展的步伐,这里采用2.0版本。根据项目需求不同,要装1.0版本的童鞋可参照此文章进行安装,链接地址:NVIDIA docker1.0安装

安装nvidia-docker2

官网安装教程: 1、如果之前安装nvidia-docker 1.0版本,我们需要将其移除,并且移除所有存在的GPU容器:(逐行执行命令)

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f sudo apt-get purge -y nvidia-docker

2、Add the package repositories:

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) 接下来有许多教程采用如下命令 #curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list 我亲测,结果报错,提示类似distribution的错误,于是接下来采用以下命令 curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update #更新可用软件包及其版本的列表

3、验证步骤

dpkg -l nvidia-docker #验证nvidia-docker软件包已更新到至少1.0.1-3版本 sudo apt install nvidia-docker #如果版本低于1.0.1-3,按如下方法更新包:The updated package ensures the upgrade to the NVIDIA Container Runtime for Docker is performed cleanly and reliably.

4、安装nvidia-docker2软件包并重新加载Docker daemon配置:

sudo apt-get install -y nvidia-docker2 或 sudo apt install nvidia-docker2 sudo pkill -SIGHUP dockerd 安装过程中您可能会看到诸如以下的配置选择:: Configuration file '/etc/docker/daemon.json' ==> File on system created by you or by a script. ==> File also in package provided by package maintainer. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions Z : start a shell to examine the situation The default action is to keep your current version. *** daemon.json (Y/I/N/O/D/Z) [default=N] ? 在此翻译一下: 配置文件'/etc/docker/daemon.json' ==>您或脚本创建的系统上的文件。 ==>也将文件保存在软件包维护者提供的软件包中。 您想怎么做?您的选择是: Y或I:安装软件包维护者的版本 N或O:保留当前安装的版本 D:显示版本之间的差异 Z:启动外壳程序检查情况 默认操作是保留当前版本。 *** daemon.json(Y / I / N / O / D / Z)[默认= N]? 在提示符下 按Y来安装nvidia-docker2 配置文件。您的原始文件已重命名 /etc/docker/daemon.json.dpkg-old。之后,您可以合并内容以继续使用配置更改。

5、重新启动Docker:

sudo systemctl restart docker

6、验证 nvidia-docker 安装的几种方法如下:(但前三种好像都需要拉去镜像验证,速度较慢,我都出现错误或者速度慢,我就放弃了,要是有人成功了可以和我说下)

第一种: docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi 注:Tensorflow官网验证 nvidia-docker安装的方法 注意:nvidia-docker v1 使用 nvidia-docker 别名,而 v2 使用 docker --runtime=nvidia。 第二种: sudo docker run --runtime=nvidia --rm nvcr.io/nvidia/cuda:9.0-devel-ubuntu16.04 nvidia-smi 注:NVIDIA官网给出的验证方法:如果系统具有对公共Docker存储库的网络访问权限,请验证升级是否成功。 第三种:(网上许多博主采用的方法) docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi 注:用最新的官方CUDA镜像去测试nvidia-smi 测试是否成功: docker run -it --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi 第四种:nvidia-docker version 注:如果该命令返回2.x.x,则您的系统已包含Docker的NVIDIA容器运行时的升级,并且无需采取进一步措施。原文:If the command returns 2.0.x, then your system already contains the upgrade to the NVIDIA Container Runtime for Docker and no further action is needed. 如下是我的验证结果: root@omnisky:~# nvidia-docker version NVIDIA Docker: 2.2.2 Client: Version: 18.06.1-ce API version: 1.38 Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:24:56 2018 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.06.1-ce API version: 1.38 (minimum version 1.12) Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:23:21 2018 OS/Arch: linux/amd64 Experimental: false

对Docker使用NVIDIA Container Runtime

更新至NVIDIA的Docker容器运行时,您可以通过以下方式之一运行GPU加速的容器。

1、使用docker运行并指定runtime=nvidia. $ docker run --runtime=nvidia ... 2、采用 nvidia-docker运行 $ nvidia-docker run ... 新软件包提供了向后兼容性,因此您仍然可以使用此命令运行GPU加速的容器,并且将 使用新的runtime 3、利用 nvidia使用docker run 作为默认runtime 你可以设定 nvidia 作为默认的runtime,例如,通过将以下行添加到 /etc/docker/daemon.json 配置文件作为第一个条目。 "default-runtime": "nvidia", 以下是添加的行如何显示在JSON文件中的示例。进行此更改时,请勿删除任何先前存在的内容。 { “ default-runtime”:“ nvidia”, “ runtimes”:{ “ nvidia”:{ “ path”:“ / usr / bin / nvidia-container-runtime”, “ runtimeArgs”:[] } }} 然后,您可以使用docker run运行GPU加速的容器。

安装过程中的一些意外

由于我之前在安装完 nvidia-docker2之后,参考的是各个教程,东参考一下,西参考一下,当时有些地方可能顺序不太对,出现了一些问题。

出现的问题: 在依据官网设定 nvidia作为默认runtime,通过 vim修改 /etc/docker/daemon.json 配置文件,将“ default-runtime”:“ nvidia”,写入json文件并保存(这一步我是在安装nvidia-docker2 之后未重启docker的时候进行的操作),操作前我也对这个json文件进行了备份,怕操作后出现更大的问题。结果操作完,用命令sudo systemctl restart docker进行重启,结果失败并报错:

root@omnisky:/etc/docker# sudo systemctl restart docker Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

输入 sudo systemctl restart docker,结果如下:

root@omnisky:~# sudo systemctl restart docker Job for docker.service failed. See "systemctl status docker.service" and "journalctl -xe" for details. root@omnisky:~# systemctl status -l docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: failed (Result: start-limit-hit) since 四 2019-10-31 22:16:55 CST; 1min 53s ago Docs: https://docs.docker.com Process: 44533 ExecStart=/usr/bin/dockerd -H fd:// (code=exited, status=1/FAILURE) Main PID: 44533 (code=exited, status=1/FAILURE) 10月 31 22:16:55 omnisky systemd[1]: docker.service: Service hold-off time over, scheduling restart. 10月 31 22:16:55 omnisky systemd[1]: Stopped Docker Application Container Engine. 10月 31 22:16:55 omnisky systemd[1]: docker.service: Start request repeated too quickly. 10月 31 22:16:55 omnisky systemd[1]: Failed to start Docker Application Container Engine. 10月 31 22:16:55 omnisky systemd[1]: docker.service: Unit entered failed state. 10月 31 22:16:55 omnisky systemd[1]: docker.service: Failed with result 'start-limit-hit'. 10月 31 22:17:46 omnisky systemd[1]: Stopped Docker Application Container Engine. 10月 31 22:17:46 omnisky systemd[1]: docker.service: Start request repeated too quickly. 10月 31 22:17:46 omnisky systemd[1]: Failed to start Docker Application Container Engine. 10月 31 22:17:46 omnisky systemd[1]: docker.service: Failed with result 'start-limit-hit'.

以上结果表明:启动时候显示启动错误,查看信息,发现是配置信息错误

里面有 Active: failed (Result: start-limit-hit) 和 Failed to start Docker Application Container Engine.

这个错误常见于更改配置文件之后docker不能正常启动 查看 /etc/docker ,存在daemon.json文件,修改之后,还是不能正常启动 删除该文件,docker就能正常启动 #如果不够有信心,删除前最好备份一下

若下一个错误:当pull或者push时候,出现EOF错误 docker pull 10.74.120.151:5000/clusterhqci/fpm-centos-7 Using default tag: latest Trying to pull repository 10.74.120.151:5000/clusterhqci/fpm-centos-7 … Get https://10.74.120.151:5000/v1/_ping: EOF 使用下面解决办法

vim /etc/sysconfig/docker #如果使用的是docker-latest,在对应位置修改该配置增加下面这行OPTIONS='--insecure-registry 10.74.29.152:5000'

祝各位安装顺利!

最新回复(0)