由于默认安装的docker都是基于cpu版本的,如果想要配合GPU进行一些简单的部署的话,则需要安装nvidia-docker来结合使用。想要安装nvidia-docker版本,前提需要你的硬件支持gpu加速(nvidia系列),同时先安装好了nvidia驱动和cuda以及cudnn和docker基础版,接下来需要做的如下(以下是基于ubuntu18.04进行安装的docker-ce基础上进行安装,

(1)配置

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -   ##获取gpg密钥并添加密钥
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu18.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list  ##获取ubuntu18.04版本的nvidia-docker列表,结果返回给标准输出
sudo apt-get update

如果是ubuntu其他版本,将上面18.04换成对应版本即可。

(2)安装

sudo apt-get install nvidia-docker2   ###ubuntu安装,centos则换成yum search --showduplicates nvidia-docker,yum install nvidia-docker:xxx
sudo pkill -SIGHUP dockerd    ###重新加载docker守护进程配置
sudo docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi  ###测试

如果测试出现了error,极有可能是新的cuda与系统内核版本不匹配了,可以尝试指定cuda版本信息即可。

sudo nvidia-docker run --rm nvidia/cuda:10.0-devel nvidia-smi
或者
docker run --rm --gpus all nvidia/cuda:11.0.3-base nvidia-smi

或者去以下网址查阅随便拉取一个基础带cuda的镜像

https://gitlab.com/nvidia/container-images/cuda/blob/master/doc/supported-tags.md

如果还是一直出现找不到对应镜像,则可以考虑换源来试试,方法查看前几篇docker推文。

(3)使用

可以单独安装指定版本的tf-gpu包信息

docker run --runtime=nvidia -it --rm tensorflow/tensorflow:1.14.0-gpu-py3  ###安装tf-gpu:1.14

也可以先配置好cuda等,然后再依次配置好各种需要的库,最后再commit成最终的项目镜像。以配置tf-gpu:1.14版为例,

sudo nvidia-docker run -it  nvidia/cuda:10.0-base  ###如果没有安装cuda10.0会先自动下载,然后再进入
apt install cuda-toolkit-10-0  ###官方拉取的镜像不完整,需要进行这一步

###进入/usr/local/cuda-10-0下查看文件是否齐全,有没有bin文件,然后再将cuda添加到环境变量中,同时需要安装配置cudnn,完成整体环境配置

####由于配置的cuda环境很简陋,需要自己配置python和pip
apt-get install python3-pip

###然后利用pip3进行包的安装
pip3 install tensorflow-gpu==1.14 -i https://pypi.douban.com/simple

###将安装好的打包成新的镜像
nvidia-docker ps -a
nvidia-docker commit 容器id 新的镜像

后来在网上又找到一种新的方法,直接配置一个带有cuda和cudnn的Linux环境,然后再依次添加需要的库

docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04

需要着重说明的一点就是启动带gpu的镜像需要用下面的方式

sudo nvidia-docker run -it xxx_id  ###而不是sudo docker run -it xxx_id !!!!

补:

在使用nvidia-docker时如果出现了如下错误解决方案如下:

  • fork/exec /usr/bin/nvidia-container-runtime: no such file or directory: unknown

原因:没有安装nvidia-container-runtime包,直接apt install安装即可

  • docker: Error response from daemon: Unknown runtime specified nvidia

原因:nvidia runtime没有注册,用--runtime选项会报错,修改daemon.json即可

vi /etc/docker/daemon.json

{
   "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],
  "insecure-registries": ["registry.test.cn"],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "live-restore": true,
  "metrics-addr": "0.0.0.0:9323",
  "default-runtime": "nvidia",
  "experimental": true,
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

然后重启docker服务即可

sudo systemctl daemon-reload
sudo systemctl restart docker

参考链接:


1、Ubuntu18.04安装docker-ce、显卡驱动、以及nvidia-docker

2、安装NVIDIA-DOCKER

3、nvidia官网:https://github.com/NVIDIA/nvidia-docker