可使用GPU的Docker容器

nvidia-docker是一个可以使用GPU的docker,nvidia-docker是在docker上做了一层封装,通过nvidia-docker-plugin,然后调用到docker上,其最终实现的还是在docker的启动命令上携带一些必要的参数。因此在安装nvidia-docker之前,还是需要安装docker的。

docker一般都是使用基于CPU的应用,而如果是GPU的话,就需要安装特有的硬件环境,比如需要安装nvidia driver。所以docker容器并不直接支持Nvidia GPU。为了解决这个问题,最早的处理办法是在容器内部,全部重新安装nvidia driver,然后通过设置相应的设备参数来启动container,然而这种办法是很脆弱的。因为宿主机的driver的版本必须完全匹配容器内的driver版本,这样导致docker image无法共享,很可能本地机器的不一致导致每台机器都需要去重复操作,这很大的违背了docker的设计之初。

为了使docker image能很便利的使用Nvidia GPU,从而产生了nvidia-docker,由它来制作nvidia driver的image,这就要求在目标机器上启动container时,确保字符设备以及驱动文件已经被挂载。

nvidia-docker-plugin是一个docker plugin,被用来帮助我们轻松部署container到GPU混合的环境下。类似一个守护进程,发现宿主机驱动文件以及GPU 设备,并且将这些挂载到来自docker守护进程的请求中。以此来支持docker GPU的使用。

需提前安装好的软件 docker

由于nvidia docker是基于docker基础之上运行的,因此需要安装原生的docker。

1.12.6版本的docker安装可查看这篇文章:Docker安装使用命令。

Docker CE版本可查看这篇文章:Docker CE安装教程。

nvidia显卡驱动

毫无疑问,要想使用GPU,必须要安装显卡驱动,这样nvidia docker才能正常运行。

显卡驱动的安装方式可查看这篇文章: CentOS集成GTX-1080Ti显卡搭建深度学习环境全过程。

这篇文章中讲解了CentOS安装显卡搭建深度学习环境的全过程,显卡驱动就是其中一项工作,因此这里就不单独写了,这篇文章中有安装的过程。

安装nvidia docker

1、下载nvidia-docker.repo文件,并将该文件输出到/etc/yum.repos.d/nvidia-docker.repo

curl -s -L https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

操作结果:

这里写图片描述

2、查找可安装的nvidia docker版本

yum search --showduplicates nvidia-docker

运行上面的语句,会出现下面这张图中的信息,一路点击y

这里写图片描述

最终输出结果是下面这张图:

这里写图片描述

大家可以从中选择自己需要安装的nvidia docker版本,这里我安装的是docker是1.12.6版本的。因此我选择安装倒数第一个版本的nvidia docker。

3、安装nvidia-docker

yum install nvidia-docker-1.0.1-1.x86_64

点击回车,系统就会安装nvidia-docker,需要选yes\no的地方输入y,再点击回车,最终安装成功。

运行nvidia docker

1、运行docker:

// 运行docker systemctl start docker // 加入开机启动 systemctl enable docker // 查看状态 systemctl status coker

2、运行nvidia-docker:

systemctl start nvidia-docker systemctl enable nvidia-docker systemctl status nvidia-docker

nvidia-docker的操作命令与docker基本相同,所以操作起来没有什么障碍。

kubernetes调用GPU

yaml文件配置:

apiVersion: v1 kind: Pod metadata: name: gpu-test spec: volumes: - name: nvidia-driver hostPath: path: /var/lib/nvidia-docker/volumes/nvidia_driver/384.69 - name: cgroup hostPath: path: /sys/fs/cgroup containers: - name: tensorflow image: tensorflow:0.11.0-gpu ports: - containerPort: 8000 resources: limits: alpha.kubernetes.io/nvidia-gpu: 1 volumeMounts: - name: nvidia-driver mountPath: /usr/local/nvidia/ readOnly: true - name: cgroup mountPath: /sys/fs/cgroup

alpha.kubernetes.io/nvidia-gpu: 1:表示只使用1块gpu

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6f3a42d1665720ceffe1a5cfe5ef6efa.html