ubuntu搭建深度学习的docker环境

安装支持CUDA的Docker工具

1.安装Docker

# 安装系统工具
$ sudo apt-get update
$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 安装GPG证书
$ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 写入软件源信息
$ sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 更新并安装 Docker-CE
$ sudo apt-get -y update
$ sudo apt-get -y install docker-ce

2.安装Nvidia-docker2

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
 sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
 sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd
$ sudo docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi # 测试

测试过程中自动从网上下载镜像nvidia/cuda,该镜像大小为2.83G,只包含基本的9.1版本的CUDA环境,不含Python相关工具。

推荐Docker镜像

$ docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.1.0-cuda10.0-py3
$ docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:latest-cuda9.0-py3 

终端运行方法

$ nvidia-docker run --rm -it registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:latest-cuda9.0-py3 bash

它们的大小分别是4.17G和3.56G,以cuda-10.0版本为例,其内部为Ubuntu 16.04系统,可使用apt-get安装软件,其Python版本为3.6.5。pytorch版本为1.0.0。

Docker 封装anaconda环境,生成镜像并打包

操作步骤

1.拉取镜像

continuumio/anaconda3 镜像是docker镜像库中star数最高的镜像

docker pull continuumio/anaconda3

用 docker images 指令 查看是否拉取成功。

ubuntu搭建深度学习的docker环境_第1张图片

2.用continuumio/anaconda3镜像创建一个名为test的容器

docker run --name test -idt continuumio/anaconda3

 idt中的 -d 指定容器的运行模式,可以使docker 的服务是在后台运行。但加了 -d 参数默认不会进入容器

3.运行下面命令检查有名为test的新容器被创建,容器一被创建就自动运行

docker ps -a

4.进入test容器,查看conda位置

docker exec -it test /bin/bash

用exec进入容器,在使用快捷键退出容器时,不会停止容器。

whereis anaconda
#或者使用
conda info --envs

图中可以看出在容器内部,conda的路径是/opt/conda 。

ubuntu搭建深度学习的docker环境_第2张图片

查看后快捷键退出容器

#快捷键
Ctrl+d

5.在本地环境中将本地环境复制到docker中

●退出容器后,在本地环境中将需要打包的本地复制到docker中:

docker cp /home/xmy/anaconda/envs/yolov5 test:/opt/conda/envs

其中 : /home/xmy/anaconda/envs/yolov5 是自己需要打包的本地环境, test是容器名,/opt/conda是在容器内使用 conda info --envs 查看到的根目录

●接着再进入容器 查看环境是否复制成功(然后再退出容器):

6.在本地环境中将本地代码复制到docker中

●退出容器后,在本地环境中将需要打包的代码复制到docker中:

 docker cp /home/xmy/.../yolov5-master test:/root/

将本地文件 /home/xmy/…/yolov5-master 复制到test容器的根目录下。

●容器内查看复制结果并退出容器:

到此为止,该test容器中已经包含我们所需的代码和环境,可以对其进行打包

7.将容器保存为镜像

●退出容器后,执行:

 docker commit -a 'author' -m 'instruction' test image_test

该命令各字段: test :容器名字 image_test:保存的镜像的名字。

●查看镜像 ,可以看到已经生成了名为image_test的新镜像:

8.将镜像存为压缩包

●cd到一个指定目录,以便于查找保存的压缩包。
●压缩:

 docker save -o test_tar.tar image_test

test_tar.tar: 压缩包名称 , image_test: 镜像名称。

●在该目录下,可以查看到生成的名为test_tar.tar的压缩包:

到此为止,本地的conda环境便打包完成。

读取镜像

在宿主机上执行:
●将打包好的镜像压缩包拷贝到宿主机上。
●cd 到压缩包目录,执行:

docker load -i test_tar.tar

运行docker images 查看是否读取成功,可发现已经生成了一个名为image_test 的新镜像:

●用image_test镜像创建一个名为create_test的容器:

docker run --name create_test -idt image_test

PS:若创建容器时需要对容器内文件与容器外文件做映射,则需要执行以下指令:

docker run --name create_test -v /home/b/hxb:/root/hxb -idt image_test

-v /home/b/hxb:/root/hxb:该指令可以在创建容器时将 容器外的/home/b/hxb目录映射到容器内的/root/hxb目录。这样可以在容器内直接访问容器外的/home/b/hxb文件夹。

●进入容器内便可发现已经将环境与代码全部打包过来了:

Docker调用GPU

docker虽然安装好了,但是安装到这一步的docker只能在cpu下使用或者将docker的gpu环境导出到宿主机上使用,无法在docker中使用gpu。

nvidia-docker是一个可以使用GPUdockernvidia-docker是在docker上做了一层封装,需要先安装好docker

1.安装过程

# Add the package repositories
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
 
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker

2.实际使用

本文以上述anaconda镜像为例:

docker run --gpus all -ti image_test /bin/bash

可选方案:ubuntu+docker+cuda+anaconda+pytorch配置

一般新的docker中只有这一个镜像,这时候就需要我们配置新的镜像。配置新镜像的方法有两种:

自己通过镜像新建容器,并配置对应的环境,最后保存为新镜像

网上下载合适的镜像,然后适当的修改

考虑到我们需要配置的环境比较复杂(cuda、cudnn、anaconda、pytorch),很明显选择第二种方法:

这里我推荐https://hub.docker.com/

点图中的链接进入搜索页面,搜索“pytorch”相关,选一个下载量比较高的就可以了,这里我选择的是“pytorch/conda-cuda”。

用给出的代码下载之后查看镜像列表:

root@user:/home# docker pull pytorch/conda-cuda
root@user:/home# docker images

这样我们就有了一个已经配置好cuda、cudnn和anaconda的环境了

可选的自行按照conda建立虚拟环境或者按照上述创建容器,cp本地代码打包方法

docker导入镜像报错磁盘空间不足的解决方法

安装docker时,默认的安装位置是/var/lib/docker。
可以用docker info 查看 镜像存放的目录

docker load -i image_test.tar

#报错
no space left device

解决方法:

先看看哪块有空间

#查看空间
df -Th
#查找docker.service文件
sudo find / -name docker.service

第一种,docker没有任何服务存在

1、配置 /usr/lib/systemd/system/docker.service

vim /usr/lib/systemd/system/docker.service

2.找到ExecStart这行,将原来的注释掉,更改成如下的形式

[Service]
ExecStart=/usr/bin/dockerd  --graph=/data/docker

3、保存退出,重启docker

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

docker load -i image_test.tar


第二种,docker里还有服务和数据存在

参考:docker导入镜像报错磁盘空间不足的解决方法_A-刘晨阳的博客-CSDN博客_docker加载镜像空间不够

几个常用docker命令

●启动容器:

docker stat 'CONTAINER ID'

●停止容器:

docker stop 'CONTAINER ID'

●删除容器(由于容器即使停止也会占用存储空间,所以有必要删除没用的容器来释放空间):

docker rm 'CONTAINER ID'

●删除镜像(需先删除关联的容器):

docker rmi 'IMAGE ID'

参考链接:

Docker 封装anaconda环境,生成镜像并打包,纯小白一文读懂(二)_豆蔻二八的博客-CSDN博客_docker打包conda环境
搭建深度学习的docker环境_xieyan0811的博客-CSDN博客

在Docker下配置深度学习环境_通晓路的博客-CSDN博客_docker torch

docker导入镜像报错磁盘空间不足的解决方法_A-刘晨阳的博客-CSDN博客_docker加载镜像空间不够
Docker调用GPU_Bruce_0712的博客-CSDN博客_docker调用gpu
 

你可能感兴趣的