史上最详细解决“搭建GPU版Pytorch Docker镜像”教程

CUDA版本对应的Pytorch版本

一、了解Docker

Docker介绍:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

场景举例:

在一个做计算机视觉研究的小组里,大家都有一台自己的用于平时工作的台式机,同时组里还有一台服务器。这台服务器上有这个小组的所有GPU计算资源。平时大家的工作模式是:在自己的台式机上写好自己的算法,调试好之后放到服务器上利用服务器的GPU去运行。

这样乍一看好像没什么问题,但是细细一想你就会发现这么模式的弊端。假设该小组有A、B、C、D四个人。A使用的框架是Pytorch,B使用的是tensorflow,C也同样是Pytorch,但是与A的版本不一样,D用的是caffe。那么问题来了,假设服务器上只有pytorch这个框架,B与D就要自己去安装相应的环境。当然这不是最重要的,也不是docker主要想解决的问题。最要命的在假设A只能在他目前所在的Pytorch版本上去运行,而C也是同样如此。那么两个人每次使用服务器的时候都要去重新装一遍对应版本的pytorch,这样岂不是很麻烦?

所以说docker就出现了,它使得一台服务器上可以装自己的环境(镜像)而与其它人的环境互补干扰。想要运行程序的时候,启动这个镜像就可以了。而且这个镜像是可以保存在硬盘里的(就是一个压缩文件),当你想在另一台服务器上,运行你写的算法的时候,你只要将你这个镜像导入到当前服务器的docker中(也就是前面所提到的让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux机器上),并启动它,就可以得到与你目前服务器一模一样的环境而不必担心各种依赖文件的版本问题。我们来看下图就能理解docker的运行机制了:

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第1张图片

Docker安装:

Docker安装教程

二、搭建GPU版本的Pytorch Docker镜像

了解并安装完Docker之后,来配置安装GPU版本的Pytorch Docker镜像。

1.拉取基础的操作系统镜像

  • 关键命令:docker pull
  • 具体指令:docker pull nvidia/cuda:10.1-cudnn7-devel-ubuntu16.04

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第2张图片

操作完成之后,使用docker images命令查看当前docker中存在的镜像:

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第3张图片

可以看到第一行就是所拉取的镜像,该镜像中已经安装好了Ubuntu16.04的操作系统以及要用到的GPU所需的CUDA和cuDNN。

2.安装需要版本的Anaconda

在上一步的镜像拉取中,拉取的镜像已经有了操作系统。现在进入该镜像也会有对应的操作系统,之后就和正常Ubuntu系统安装Anaconda没有区别。

首先在Ubuntu主目录xxx中创建自己的文件夹yyy,在文件夹yyy中创建文件夹upload

  • 关键命令:docker run -it -v /home/xxx/yyy/upload:/workspace nvidia/cuda:10.1-cudnn7-devel-ubuntu16.04

命令解释:

run表示运行指定镜像文件,-it表示以交互式的环境运行,-it是run的属性。-v表示将宿主机中的一个文件夹挂载到该镜像中,这里将宿主机E盘中的upload挂载到了镜像运行后的一个虚拟的文件夹workspace中。至于最后,就是你要运行的镜像的名称。命令运行成功后,会进入该镜像。可以看到该镜像已经安装了ubuntu,所以后面一行就已经从宿主机的命令行转到了ubuntu中了。

接下来Anaconda的安装就简单了。将Anaconda的安装文件下载到upload文件夹中:

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.1.0-Linux-x86_64.sh

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第4张图片

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第5张图片

这样对应镜像文件中的workspace文件夹内也相当于有了这个文件,然后cd /workspace后:

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第6张图片

执行如下指令即可完成安装。

bash Anaconda3-5.1.0-Linux-x86_64.sh

安装过程示意图:

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第7张图片

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第8张图片

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第9张图片

安装成功!

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第10张图片

安装成功后会问你是否还要安装Microsoft VSCode,可不选。

安装完成之后退出当前镜像,对该镜像进行保存:docker commit 镜像所在容器id 给保存的镜像取的名字以及版本号

例如:

docker commit 78408edc5f69 test/anaconda:v0

保存完成之后,可以使用docker images命令查看保存之后的镜像文件。

然后将镜像文件保存到容器中,容器名称自取:

docker run --name xxx_anaconda -it test/anaconda:v0 /bin/bash

进入镜像

# 开启容器
docker start xxx_anaconda
#进入容器
docker attach xxx_anaconda

3.安装版本需要的Pytorch

按照上述命令进入镜像之后,直接使用conda命令安装所需版本的Pytorch,安装完成之后需要docker commit保存。

conda create -n pytorch1.5 python=3.7

安装成功示意图:

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第11张图片

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第12张图片

安装完成之后需要保存:

docker commit 53c608cd5fd3 test/pytorch:v1.5

保存后查看当前镜像:

可以看到前三个镜像就是当前所配置的镜像。

还是按照之前的操作将镜像保存到容器中:

docker run --name xxx_pytorch -it test/pytorch:v1.5 /bin/bash

保存之后查看当前所有容器:

docker ps -a

如图所示前两个即为创建的容器。

进入当前容器:

# 开启容器
docker start xxx_pytorch
#进入容器
docker attach xxx_pytorch

注:如果进入容器时间较长可以直接“Ctrl + C”

进入容器后,启动虚拟环境“pytorch1.5”,在虚拟环境中依次输入以下指令进行安装。

# 添加清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge 
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
 
# 查看CUDA版本  #在镜像中该步骤存在问题
sudo nvidia-smi
 
# CUDA版本为10.1对应的Pytorch
pip install torch==1.5.1+cu101 torchvision==0.6.1+cu101 -f https://download.pytorch.org/whl/torch_stable.html
 
# 安装完成后查看是否安装成功
import torch
torch.cuda.is_available

安装成功,如图所示:

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第13张图片

进入Python环境中测试:

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第14张图片

三、在镜像中运行程序

可以将程序代码传输到镜像中,或者在run命令后加-v,将程序所在的宿主机文件夹挂载到镜像中的一个虚拟文件夹就可以了。然后进入这个虚拟文件夹,就可以像在Ubuntu环境下正常运行程序了。

1.传输文件到宿主机上

scp /var/www/test.php [email protected]:/var/www/  
#把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

2.将宿主机上的文件传输到镜像中

# 容器名
docker cp /home/xxx/yyy/upload/ZZZ.zip xxx_pytorch:/root     

# 容器ID
docker cp /home/xxx/yyy/upload/ZZZ.zip 9xxxxxxxxxxf:/root

# 容器名和容器ID均可     

传输成功,如图所示:

史上最详细解决“搭建GPU版Pytorch Docker镜像”教程_第15张图片

3.将镜像中的文件传输到宿主机中

docker cp xxx_pytorch:/root/Sxxxx_Xxxxxxx-xxxx/inference/output/demo1.jpg .

其中,xxx_pytorch容器名,后面是所传输文件在容器中的路径,. 表示拷贝到当前目录下。

传输成功示意图:

四、将自己的Docker上传到云

具体操作可以在CSDN搜索:将Docker镜像推送到阿里云镜像仓库

你可能感兴趣的:(踩坑记录,ubuntu,docker,cuda,anaconda,pytorch)