Docker | 使用docker配置深度学习pytorch环境

前两天想接触docker,但是苦于一直没有pull成功,现在用这篇博客记录一下解决的方法,以及docker的简单命令行与使用docker配置pytorch的cpu与gpu容器

简要介绍:

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

具体请自行查看其他资料,下面开始进入正题。

1. Pytorch环境的配置


由于我使用的是学校的服务器,之前一直用的conda环境来使用服务器的gpu,使用一般登入服务器会直接登录一个用户,但是这里每个用户只是用文件夹区分,本身不是一个linux的子系统,使用如果需要使用docker,这时候一定要进入root,也就是切换到root用户才可以使用docker(这样就不需要sudo的指令了)

以下的记录将从零开始配置一个torch的环境:

  • 切换到root用户
    su root

  • 安装docker
    yum install docker

  • 启动docker服务
    service docker start

  • 查看docker版本
    docker version

  • 为了加速下载,配置下载源
    vi /etc/docker/daemon.json

  • 在/etc/docker/daemon.json文件中添加以下内容
    {
    “registry-mirrors”: [“https://registry.docker-cn.com”],
    “live-restore”: true
    }

  • 下载镜像
    docker pull library/hello-docker
    在这里插入图片描述

  • 查看当前镜像
    docker images
    在这里插入图片描述

  • 运行image文件
    docker run hello-world
    在这里插入图片描述

  • 查看当前的容器
    docker ps -a
    在这里插入图片描述

  • 现在直接删除镜像是不行的,需要删除容器,再删除镜像
    docker rm 2f9001bc1e8c # 其中2f9001bc1e8c是容器名
    docker rmi feb5d9fea6a5 # 其中feb5d9fea6a5是镜像名
    在这里插入图片描述

  • 现在下载一个pytorch的镜像(在docker.hub中寻找)
    docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel
    在这里插入图片描述
    显示以上画面表示下载成功

  • 在镜像中创建一个容器
    docker run -it pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel /bin/bash
    在这里插入图片描述
    可以看见,现在进入了容器的一个workspace目录里面了;@后面的0d10ba3b0aaf就是启动的容器id

  • 重命名容器
    docker rename old_name new_name
    这里我改为testtorch

  • 拷贝文件到容器中
    docker cp MLP 95909784d85b:/workspace/
    在这里插入图片描述

  • 进入容器中
    docker exec -u 0 -it testtorch /bin/bash
    在这里插入图片描述
    查看路径文件,确实可以看见之前拷贝过来的MLP文件,pip install必要的包之后,就可以在容器里面跑代码了.
    在这里插入图片描述

  • vim出现问题:bash:vim:command not found
    但是,一般想通过vim编辑器来查看里面的代码,但是这时出现了也问题

ERROR: Could not find a version that satisfies the requirement vim
ERROR: No matching distribution found for vim site:blog.csdn.net

或者是

E: Unable to locate package vim

以上的问题,可以通过下面的方法来解决

pkg update       # 更新源
# apt update     # 更新源的另一种方式
apt install vim  # 安装

之后就可以正常代开编辑了:
在这里插入图片描述
但是我发现此时是没有使用gpu的,torch.cuda.is_available()显示为False
在这里插入图片描述
如何退出当前容器?在宿主机敲以下命令即可
docker stop testtorch
此时容器端就会主动退出,如下所示:
在这里插入图片描述
可以看见,我尝试过在容器内输入docker exit是没有用的,在宿主机中输入docker stop testtorch后,容器就会退出到宿主机界面中,可以看见:root@95909784d85b:/workspace/MLP# -> [root@localhost LLC]# 的改变。

  • 这里重现创建一个gpu环境,命名为torch_gpu的容器
    docker run -it --name torch_gpu --gpus all pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel /bin/bash
    同时在宿主机中再拷贝项目到容器内
# 以下两个命令均可
docker cp MLP 365febc3316d:/workspace  
docker cp MLP torch_gpu:/workspace

现在可以看见,没有workspace里面没有文件,现在有了MLP这个项目
在这里插入图片描述
在这个容器内,可以跑gpu了
在这里插入图片描述
pip安装需要的包之后,就可以跑代码了,如下所示:
在这里插入图片描述
所以最后,这里创建了两个pytorch的深度学习环境,如下所示:
在这里插入图片描述

2. Docker命令行总结


常用的命令行总结如下:

# 安装docker
yum install docker

# 开启docker服务:
service docker start

# 列出所有docker镜像的命令:
docker images

# 删除指定docker镜像的命令:
docker rmi anibali/pytorch

# 下载一个新的镜像的命令:
docker pull anibali/pytorch:1.7.0-cuda11.0

# 运行新镜像,创建一个cpu运行的容器
# -i: 交互式操作。
# -t: 终端。
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
docker run -it --name torch_cpu anibali/pytorch:1.7.0-cuda11.0 /bin/bash

# 运行新镜像,创建一个gpu运行的容器
docker run -it --name torch_gpu --gpus all anibali/pytorch:1.7.0-cuda11.0 /bin/bash

# 查看所有的容器命令如下:
docker ps -a

# 查看当前正在运行的容器命令如下:
docker ps -l

# 启动已被停止的容器
docker start CONTAINER_ID/CONTAINER_NAME

# 停止运行中的容器
docker stop CONTAINER_ID/CONTAINER_NAME

# 重启容器
docker restart CONTAINER_ID/CONTAINER_NAME

# 删除容器(-f是指强制执行)
docker rm -f CONTAINER_ID/CONTAINER_NAME
docker rm CONTAINER_ID/CONTAINER_NAME

# 进入容器
docker exec -it CONTAINER_ID/CONTAINER_NAME /bin/bash

# 重命名容器
# docker rename <Old_Name> <New_Name>
docker rename testtorch torch_gpu

# 拷贝本地文件到容器
# docker cp 本地路径 容器ID:容器路径
# docker cp <Local_File> <CONTAINER_ID/CONTAINER_NAME>:/workspace/
docker cp MLP 95909784d85b:/workspace/

# 查看容器端口的映射情况
docker port CONTAINER_ID/CONTAINER_NAME

# 指定宿主机与容器端口的映射(通过参数-p指定端口映射)
docker run -it -d --name CONTAINER_NAME -p 8088:80 IMAGE_NAME

# 保存容器为镜像
docker commit -a <Auther_Name> <CONTAINER_ID/CONTAINER_NAME> <Version_Number>

参考资料:

  1. pytorch: 使用docker
  2. Nvidia-Docker配置python3与pytorch环境
  3. Docker 简单的命令行总结
  • 16
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clichong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值