Docker配置深度学习pytorch gpu环境

一、docker的概念原理

参考资料:https://zhuanlan.zhihu.com/p/81693661

                  https://www.zhihu.com/question/506867139

                  https://blog.csdn.net/weixin_44751294/article/details/123191429

        看过上面两个链接,就对docker是什么作用,怎么用有个大概的了解。简单摘要一些对我来说比较重要的点如下:

(1)docker可以让环境配置变得简单,在多人同时使用一台服务器或者时不时换电脑换机器所有的包时都很有用

(2)docker可以看作是在你的宿主上开启一个轻量化的虚拟机

(3) docker 镜像(Image): 类似与操作系统的ISO 镜像文件,docker hub上有很多大家都封装好的镜像,例如可以直接pull 深度学习镜像。

(4)docker 容器(Container)中无法直接使用主机的GPU,因为主机的GPU使用需要专有的NVIDIA驱动,所以容器要使用GPU硬件必须有个能用驱动的桥梁就是docker-nvidia。镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

 (5)仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

二、docker的安装

指路我的另一篇博客:

docker的安装

三、使用docker配置pytorch gpu环境

参考链接:https://blog.csdn.net/m0_46825740/article/details/123527009

                 https://www.csdn.net/tags/MtTaEg2sNzYzMjIxLWJsb2cO0O0O.html

从链接2了解到有两种方法实现:方法一:直接拉取带cuda环境的pytorch环境(方便);方法二:拉取nvidia/cuda镜像后,手动配置相应环境,这种方法比较灵活。

前边版本查看方法一方法二都是一致的

1.显卡驱动、cuda版本、pytorch cuda版本三者对应

先查询一下版本,把对应关系找到,之后下载对应匹配的版本,避免后续出现版本不匹配无法兼容的问题。

正常来讲docker内的CUDA版本和宿主机无关,但实际种宿主机(物理机)的 Nvidia GPU 驱动 选择 高版本, 更容易兼容Docker内不同CUDA的驱动要求。

具体可查阅知乎:显卡驱动、docker内CUDA

(1)查看显卡驱动版本

 nvidia-smi

 可以看到Driver Version: 440.118.02。上图中的CUDA Version: 10.2 表示驱动的最高版本。下载CUDA的版本应低于10.2。

如果需要查宿主机已经安装的cuda版本,可使用:

 nvcc --version

可以看到我的宿主机版本是8.0.61 

(2) 查看该驱动版本支持的cuda版本

链接:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

(3)查看支持该cuda的pytorch版本

链接:https://pytorch.org/get-started/previous-versions/

方法一(简单方便)参考链接docker拉取pytorch镜像

直接在docker.hub中拉取pytorch镜像:​​​​​​​

docker pull pytorch/pytorch:1.2-cuda10.0-cudnn7-devel

在镜像中建立一个容器:

docker run -it --name torch_gpu --gpus all pytorch/pytorch:1.2-cuda10.0-cudnn7-devel /bin/bash

 查看容器ID命令:

sudo docker ps -a

进入容器命令:

docker exec -it 容器ID /bin/bash

拓展:列出所有docker镜像命令:

 sudo docker images

方法二(复杂灵活):

 2.找该cuda版本镜像

        从宿主机驱动来看,下载10.2版本以下的cuda都是支持的,我初尝试先使用与宿主机一致的版本cuda版本8的。 

https://hub.docker.com/r/nvidia/cuda/tags?page=1&ordering=last_updated&name=8.0-de

3.拉取镜像

docker pull nvidia/cuda:8.0-devel-centos7

4.安装nvidia-docker

   我参考链接1配置 不安装nvidia-docker,无法使用镜像创建gpu容器(使用--runtime=nvidia参数出错),参考部署nvidia-docker

设置nvidia-docker的存储库和 GPG 密钥

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

更新包列表后安装包和依赖项:

sudo yum clean expire-cache

安装nvidia-docker:

sudo yum install -y nvidia-docker2

重启docker:

sudo systemctl restart docker

5.使用镜像创建gpu容器


nvidia-docker run -it --runtime=nvidia -v /宿主机绝对路径目录:/容器内目录 --name 容器名 镜像名 /bin/bash

nvidia-docker run -it --runtime=nvidia -v /home/media:/media --name  torch_gpuok  nvidia/cuda:8.0-devel-centos7 /bin/bash

 查看容器ID命令:

sudo docker ps -a

 进入容器命令:

docker exec -it 容器ID /bin/bash

 验证gpu在容器内是否可以正常使用:

nvidia-smi

 查看cuda版本:

nvcc -V

 6.配置cudnn

       参考链接:https://blog.csdn.net/qq_29183811/article/details/123560206

     cudnn的下载需要到官网,而且需要注册英伟达账户,下载地址:cuDNN Archive | NVIDIA Developer

 下载下来是:cudnn-8.0-linux-x64-v7.1.tgz

解压:

tar -zxvf cudnn-8.0-linux-x64-v7.1.tgz

 解压过程中出现了:Cannot create symlink to `xxx': Operation not supported问题,我将该安装包拷贝在当前目录下,解决了该问题。

解压完目录是cuda,里边包含两个文件夹分别为include和lib64

 进入解压的目录,然后执行以下命令:

cp ./include/* /usr/local/cuda/include/
cp ./lib/* /usr/local/cuda/lib64/

安装完成后,使用一下命令可以查看`cudnn`版本信息:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

可能由于版本不同头文件名儿不同,可以进文件夹去看,参考链接里的是

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

7.安装python  

我是直接安装miniconda安装的python,miniconda下载路径

获取miniconda 安装文件

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py37_4.10.3-Linux-x86_64.sh

执行安装:

chmod +x Miniconda3-py37_4.10.3-Linux-x86_64.sh
./Miniconda3-py37_4.10.3-Linux-x86_64.sh

中间会出现Miniconda3 will now be installed into this location:   (猜想:此处最好要改到docker容器里(没尝试),我没改之后出现一些错误)

验证:

 conda -V

出错:bash: conda: command not found

之后使用:

export PATH="/root/miniconda3/bin:$GOPATH/bin:$PATH"

就可以了。

 

8.安装pytorch

使用https://pytorch.org/get-started/previous-versions/

查找下载对应版本:

 conda install pytorch==1.0.0 torchvision==0.2.1 cuda80 -c pytorch

安装成功。

验证出错:

 尝试了几种方法都不行。

之后先使用了卸载命令:

conda uninstall pytorch
conda uninstall libtorch

之后通过直接下载whl文件,直接安装:

通过下载下载链接

 进到whl文件目录,执行下面语句:

pip install torch-1.0.1-cp37-cp37m-linux_x86_64.whl

这个警告没有处理,后续再看。。。

 

测试出错,之后又安装numpy解决。

 

再安装torchvison:

暂时告一段落。。。。。。。。。。。。。。。 


版权声明:本文为u013972657原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。