基于Docker容器使用NVIDIA-GPU训练神经网络

一,nvidia K80驱动安装

1,  查看服务器上的Nvidia(英伟达)显卡信息,命令lspci |grep NVIDIA

05:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)

06:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)

84:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)

85:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)

2,按下来,进行显卡驱动程序的安装,这一步由主机组同事操作,当前查看到版本为:Driver Version: 396.37,运行nvidia-smi可获得此信息。

NVIDIA-SMI 396.37                 Driver Version: 396.37

下次安装时,建议安装比较新的驱动版本(410及以上),因为这个驱动版本,会影响接后面的很多细节。

驱动网址:https://www.nvidia.com/Download/index.aspx?lang=en-us

二,NVIDIA CUDA Toolkit 安装

1,根据前一节的驱动,先把合适的CUDA Toolkit版本进行下载安装。

下载网址:https://developer.nvidia.com/cuda-toolkit-archive

驱动程序和CUDA的对应关系如下图:

下次安装时,建议安装10.0及以上版本,因为主流学习框架对这些版本有更好的支持和性能。

2,使用cuda中的deviceQuery可以获得其安装信息:

三,安装cuDNN

1,  cuDNN是GPU加速计算深层神经网络的库,网址:

https://developer.nvidia.com/rdp/cudnn-archive

2,  选择与cuda对应的版本,下载解压到cuda对应目录即可。

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

***如果只是在宿主机上使用NVIDIA的GPU,那么,经过上面的步骤之后,就可以安装一些学习框架进行操作了。但如果想更灵活干净的让应用在容器内运行,则还需要进行接下来的操作准备。***

四,nvidia-docker2安装

1,Nvidia关于docker项目的支持,github网址:https://github.com/NVIDIA/nvidia-docker。它使用一个nvidia-docker2应用来延伸docker的内置功能。架构如下:

2,nvidia-docker2要求的docker安装版本比较新,安装的版本为ce-18.09.6-3。Nvidia-docker2安装的版本为2.0.3-3。(这几个rpm包我都收下载好,可随时共享)

安装命令(需要解决rpm包依赖,未列明):

Sudo yum install docker-ce-18.09.6-3.el7.x86_64.rpm
Sudo yum install nvidia-docker2-2.0.3-3.docker18.09.6.ce.noarch.rpm

3,在安装完成之后,有两个配置文件需要更改或新建:

a,/etc/systemd/system/docker.service.d/docker.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/docker_data --storage-driver=overlay --insecure-registry harbor.xxxx.com.cn

graph参数指定docker镜像的存放目录,需要一个较大的硬盘空间。

b,/etc/docker/daemon.json

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

此文件为nvidia-docker2应用所需,用于替换docker的默认runc。

用两个文件来自定义docker配置,即可以替换runc,又可以提定内部仓库,合理~

4,当这些更改应用之后,再启动docker服务,使用docker info会看到相应的更改已生效。

...
Server Version: 18.09.6
Storage Driver: overlay
 Backing Filesystem: xfs
 Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Runtimes: nvidia runc
Default Runtime: nvidia
Docker Root Dir: /data05
Insecure Registries:
 harbor.xxxx.com.cn
 127.0.0.0/8

...

五,Docker镜像测试:

1,此次测试的镜像如下:

---anibali/pytorch:cuda-9.2

---tensorflow/tensorflow:1.12.0-gpu-py3

2,在服务器新装之后,如果有特别个性化的需求,可以考虑以anaconda镜像为基础进行自定义制作。

3,在以上两个镜像中,GPU加速的效果,都可以达到CPU的10倍左右。

六,使用K8S管理docker容器的部署

未完待续

猜你喜欢

转载自www.cnblogs.com/aguncn/p/10973249.html
今日推荐