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

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

简要介绍:

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

image.png

  • 查看当前镜像

docker images

image.png

  • 运行image文件

docker run hello-world

image.png

  • 查看当前的容器

docker ps -a

image.png

  • 现在直接删除镜像是不行的,需要删除容器,再删除镜像

docker rm 2f9001bc1e8c # 其中2f9001bc1e8c是容器名

docker rmi feb5d9fea6a5 # 其中feb5d9fea6a5是镜像名

image.png

  • 现在下载一个pytorch的镜像(在docker.hub中寻找)

docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel

image.png

显示以上画面表示下载成功

  • 在镜像中创建一个容器

docker run -it pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel /bin/bash

image.png

可以看见,现在进入了容器的一个workspace目录里面了;@后面的0d10ba3b0aaf就是启动的容器id

  • 重命名容器

docker rename old_name new_name

这里我改为testtorch

  • 拷贝文件到容器中

docker cp MLP 95909784d85b:/workspace/

image.png

  • 进入容器中

docker exec -u 0 -it testtorch /bin/bash

image.png

查看路径文件,确实可以看见之前拷贝过来的MLP文件,pip install必要的包之后,就可以在容器里面跑代码了.

image.png

  • 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  # 安装


之后就可以正常代开编辑了:

image.png

但是我发现此时是没有使用gpu的,torch.cuda.is_available()显示为False

image.png

如何退出当前容器?在宿主机敲以下命令即可

docker stop testtorch

此时容器端就会主动退出,如下所示:

image.png

可以看见,我尝试过在容器内输入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这个项目

image.png

在这个容器内,可以跑gpu了

image.png

pip安装需要的包之后,就可以跑代码了,如下所示:

image.png

所以最后,这里创建了两个pytorch的深度学习环境,如下所示:

image.png


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>


参考资料:

pytorch: 使用docker

Nvidia-Docker配置python3与pytorch环境

Docker 简单的命令行总结

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
24天前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
199 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
3天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
18 7
|
26天前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
124 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
6天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
14 1
|
23天前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
73 1
|
25天前
|
网络安全 虚拟化 Docker
SSH后判断当前服务器是云主机、物理机、虚拟机、docker环境
结合上述方法,您可以对当前环境进行较为准确的判断。重要的是理解每种环境的特征,并通过系统的响应进行综合分析。如果在Docker容器内,通常会有明显的环境标志和受限的资源视图;而在云主机或虚拟机上,虽然它们也可能是虚拟化的,但通常提供更接近物理机的体验,且可通过硬件标识来识别虚拟化平台。物理机则直接反映硬件真实信息,较少有虚拟化痕迹。通过这些线索,您应该能够定位到您所处的环境类型。
20 2
|
24天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
288 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
27天前
|
网络协议 Docker 容器
docker中的DNS配置
【10月更文挑战第5天】
213 1
|
28天前
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
23 1
|
1月前
|
存储 监控 Shell
docker的底层原理二:容器运行时环境
本文深入探讨了Docker容器运行时环境的关键技术,包括命名空间、控制组、联合文件系统、容器运行时以及分离的进程树,这些技术共同确保了容器的隔离性、资源控制和可移植性。
38 5