大家在配置相关环境的时候,经常会有一些问题(系统不兼容, 软件包版本不对,tensorflow、pytorch版本杂乱,配置过程复杂,难于管理)。比如同样地安装tensorflow-gpu或者pytorch, 可以使用anaconda可以有效配置依赖;使用python原版需要自己配置cuda、cudnn等依赖。
但是,使用docker,可以通过一行命令:
docker pull tensorflow/tensorflow
解决问题。相关依赖都配好。
先说说Docker容器(container)。
容器就一种标准化的软件单元,它将运行某个程序所需要的所有依赖和环境进行了打包,这样可以在另一个操作系统下快速迁移。可以理解为是一种不带GUI的虚拟机,但是又有不同。由于容器共享主操作系统的内核,在速度上相比虚拟机要更快。
镜像就是软件打包之后的独立、可执行的包,通过定制化镜像或在网上拉取官方发布的相关环境镜像,可以快速实例化该镜像为容器。
简单来说,就是通过镜像来实例化一个容器,这个容器是一个集成了操作系统(ubuntu、Centos等)和各种环境依赖(cuda, python packages, anaconda)可执行单元。在本机,可以通过实例化容器,来构建一个具有完整依赖的应用。
具体安装方式可参考官网:https://docs.docker.com/get-docker/
先来说一下docker的相关指令.
镜像相关命令:
查看本地镜像: docker images
每个镜像的命名方式为:REPOSITORY:TAG,并且对应唯一IMAGE ID。镜像可以通过 docker pull命令对dockerHub上的开源镜像进行拉取,也可以自己在容器里面配置好相关环境,导出自己的定制镜像。
删除镜像:
docker rmi xxx
保存镜像:
docker save -o xxx xxx;
例子:
将镜像pytorch:1.6.0-cuda10.1-cudnn7-opencv4.4保存为 my_pytorch.tar
docker save -o my_pytorch.tar pytorch:1.6.0-cuda10.1-cudnn7-opencv4.4
从tar创建镜像:
docker load
例子:从上述归档文件创建镜像:
docker load < my_pytorch.tar
容器相关指令:
查看容器:
docker ps [options]
可选参数有 -a:显示所有容器,包括未运行的 -f: 根据条件过滤显示内容
例子:查看所有容器
每个容器有对应的CONTAINER_ID和NAMES,可以设置相应的本机端口与容器端口的映射,方便ssh连接远程容器进行调试。
删除容器:
docker rm CONTAINER
创建容器:
docker run [options] IMAGE
介绍常用可选参数:
-i -t 以交互模式运行容器,为容器分配一个伪输入终端
-v 本机目录与容器目录的映射
-w 指定容器的工作目录
-p 端口映射
以创建pytorch容器为例:
nvidia-docker run -it —name my_pytorch -v /home/data:/work/data -w /work pytorch/pytorch /bin/bash
注意:需要本机有NVIDIA显卡才能使用镜像中装好的cuda环境.
这样就创建了容器,并且以/bin/bash的方式进入了容器的终端界面。这个时候输入exit可以退出容器终端,回到本机终端
注意:使用run命令创建完容器之后,不能对容器的相关配置进行修改,比如说目录映射,端口映射,shm—size(训练时需要设置为1G以上,不然缓存不够用),所以在run时需要先设置好。并且映射的目录,在容器里和本机修改都会同步到对应目录,很方便。
第一次退出的时候,容器会默认关闭,这个时候需要重新启动容器:
docker start torch_16
然后使用
docker exec -it torch_16 /bin/bash
重新进入容器:
这里的pytorch使用的是官方开源的镜像,可以使用conda list查看已安装的包(只显示了部分)
可以看到环境都给你配好了,很方便,省去了自己安装东西的麻烦。同时,他又与本机共享网络等,可以随时自己pip install or conda install你的东西.使用命令可以查看容器的系统版本。
为了测试pytorch是否可用,可以输入如下代码:
完美运行!