ubuntu18.04 nvidia docker环境搭建

ubuntu18.04 nvidia docker环境搭建

确保已为ubuntu操作系统安装了NVIDIA驱动程序Docker 19.03。请注意,您无需在主机上安装CUDA工具包,但需要安装驱动程序。NVIDIA驱动程序安装见上一篇博文,Docker 19.03安装参见Docker官网(Docker官网是最好的Docker安装参考)

1.安装nvidia docker

直接使用nvidia docker主页提供的ubuntu安装方式:
Ubuntu 16.04/18.04, Debian Jessie/Stretch/Buster

1
2
3
4
5
6
7
# Add the package repositories
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) #该句执行后,可能需要等待稍许才生效,如果不生效,后续会报错;如果后续报错,可重新执行该命令后再尝试
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list  | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker

如果在很久之后,参考这篇文章,请注意上述安装命令是否已被官方更新,去nvidia-docker主页去查询即可。
至此,nvidia-docker安装完成。

2.使用最新的官方CUDA镜像测试

官方镜像是nvidia docker官方提供的一系列cuda镜像,可根据ubuntu系统/cuda版本/cudnn版本等不同的需求去获取,获取方式直接运行docker run,如果本地没有该镜像,会自动下载到本地。以下为具体使用方式(参考nvidia docker主页)

1
2
$ docker pull nvidia/cuda:10.2-cudnn7-devel #pull镜像到本地
$ docker run --gpus all nvidia/cuda:10.2-cudnn7-devel nvidia-smi

运行上述命令后,输出:
在这里插入图片描述
说明可以使用cuda镜像,并在镜像中运行nvidia-smi,至此也证明nvidia-docker安装成功。如果不加--gpus all,则认为该镜像不支持gpu环境,也就没有nvidia-smi命令,执行出错。因此,若运行GPU环境,必须加--gpus相关选项,docker nvidia官网主页还提供了其他使用--gpus的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#### Test nvidia-smi with the latest official CUDA image
docker run --gpus all nvidia/cuda:10.2-cudnn7-devel nvidia-smi

# Start a GPU enabled container on two GPUs
docker run --gpus 2 nvidia/cuda:10.2-cudnn7-devel nvidia-smi

# Starting a GPU enabled container on specific GPUs
docker run --gpus '"device=1,2"' nvidia/cuda:10.2-cudnn7-devel nvidia-smi
docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:10.2-cudnn7-devel nvidia-smi

# Specifying a capability (graphics, compute, ...) for my container
# Note this is rarely if ever used this way
docker run --gpus all,capabilities=utility nvidia/cuda:10.2-cudnn7-devel nvidia-smi

上述例子,主要说明gpu部分参数配置,如--gpus all,使用所有gpu;--gpus 2,使用2个gpu等。