将本地的anaconda环境封装到docker中并导出为压缩包

1. 在本地(ubuntu20.0)安装docker

安装命令如下:

sudo apt-get update
sudo apt-get install -y docker.io

启动docker,检查docker是否安装成功

sudo systemctl enable docker
sudo docker version

2. 进入docker官网pull一个需要的镜像

例如从网址->:
link
抽取镜像: cddlyf/pytorch1.1.0-tensorflow-py36-cuda10.0
命令如下:

sudo docker pull cddlyf/pytorch1.1.0-tensorflow-py36-cuda10.0

在这里插入图片描述


注:其它Docker镜像操作命令

docker ps # 查看启动镜像时创建的Docker容器信息(包括id,name...)
docker run 镜像id # 启动镜像
docker rmi -f 镜像id # 删除指定镜像, -f表示强制删除
docker rmi -f $(docker images -aq) # 全部删除
exit # 退出docker镜像

3. 进入本地虚拟环境,获得requirement.txt

命令如下:

pip freeze > requirements.txt # 或使用conda list -e > requirements.txt

4. 创建自己的Docker容器

虽然在每次启动镜像时都会创建一个Docker容器,但名字无法确定,这里我们创建一个名为:elon 的Docker容器。命令如下:

exit # 创建容器前先退出Docker镜像
# 为镜像image_name创建一个名为elon的容器
sudo docker run --name elon -idt image_name

在这里插入图片描述

5. 将第3步获得的requirement.txt拷贝到第4步创建的docker容器中

sudo docker cp 本地路径 docker路径,例子如下:

sudo docker cp /home/guest/requirements.txt demo:/home

在这里插入图片描述


注:其它Docker容器操作命令

docker ps # 列出当前正在运行的容器信息
-a        # 列出当前正在运行的容器和历史运行过的所有容器信息
-q        # 只显示容器id

docker start 容器id   # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id    # 停止当前正在运行的容器
docker kill 容器id    # 强制停止当前容器

docker exec -it 容器id /bin/bash
docker attach 容器id

# 区别
# docker exec   # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach # 进入容器正在执行的终端,不会开启新的终端

docker rm id容器 # 删除指定容器,不能删除正在运行的容器,可用 rm -f 强制删除
# 骚操作,linux下有效
docker rm -f $(docker ps -aq)      # 删除所有容器
docker ps -a -q|xargs docker rm -f # 删除所有容器


6. 进入第4步创建的名字为:elon的容器中,安装需要的包

sudo docker exec -it demo /bin/bash
pip install -r requirements.txt #一定要进入requirement.txt目录下运行

7. 退出容器,提交我们的新镜像

docker commit -m=“描述信息” -a=“作者” 容器id 目标镜像名:[tag]

sudo docker ps -a # 查看容器id
docker commit -m="add scikit packages" -a="lynnh" 8cd9c9935d2a

返回类似如下信息表示提交成功:

sha256:b285a729c32b3a20411dcd09bc39acfdef93054e5091b0054bef08d665c27643

在这里插入图片描述

8. 将镜像导出为压缩包

sudo docker images # 查看容器名
docker save image_name -o compressed_package_name

在这里插入图片描述

9.将压缩包上传到浪潮服务器

在这里插入图片描述

10. 在服务器上使用第9步获得的镜像文件进行深度学习模型训练

基本思路:通过镜像文件构建容器然后进行训练。假设我的镜像文件名:open-mmlab_v3.0.tar, 服务器中需要运行的代码在/home/elon/Projects/UltraLiDAR_nusc_waymo-master,数据集在/data/elon/nuscenes。以下是详细步骤:

  1. 步骤 1:加载 Docker 镜像
    首先,您需要确保 Docker 已经安装在您的系统上。如果还没有安装,可以从 Docker 的官方网站下载并安装。安装后,使用以下命令将 open-mmlab_v3.0.tar 文件加载到 Docker 中:
docker load -i open-mmlab_v2.0.tar

这个命令会加载您的镜像,并在 Docker 中创建一个镜像 ID 或名字,您可以使用 docker images 命令来验证镜像是否已成功加载。

  1. 步骤 2:创建并运行容器
    接下来,您可以使用加载的镜像创建并运行 Docker 容器。在构建容器时,您可能想要将项目目录和数据集目录挂载到容器中,以便在容器中访问这些文件。假设加载的镜像 ID 是 open-mmlab:v3.0,以下是运行容器的基本命令:
docker run -it --name mmdet3d \
  --gpus all \
  -v /home/elon/Projects/UltraLiDAR_nusc_waymo-master:/workspace/project \
  -v /data/elon/nuscenes:/workspace/dataset \
  open-mmlab:v3.0

解释一下这个命令:

  • –gpus all 如果训练需要 GPU 支持
  • -it:表示以交互模式运行容器,并打开终端。
  • –name my_training_container:给容器命名为 my_training_container。
  • -v /home/elon/Projects/UltraLiDAR_nusc_waymo-master:/workspace/project:将主机上的项目目录挂载到容器的
    /workspace/project。
  • -v /data/elon/nuscenes:/workspace/dataset:将主机上的数据集目录挂载到容器的 /workspace/dataset。 open-mmlab:3.0:用于指定构建容器的镜像名称。
  1. 步骤 3:在容器中进行训练
    运行上述命令后,您将进入 Docker 容器的终端环境。在这里,您可以像在本地环境中一样运行训练脚本。假设您的训练脚本位于项目目录 /workspace/project,您可以执行相关的 Python 代码进行训练。例如:
cd /workspace/project
python train.py --dataset /workspace/dataset/nuscenes
  1. 注意:如果 Docker 容器中的代码提示 “Found no NVIDIA driver on your system”,这可能表示 Docker 容器无法访问主机上的 NVIDIA GPU 驱动程序。要解决这个问题,您需要确保以下几点:

-确保主机系统上安装了 NVIDIA 驱动程序

nvidia-smi
  • 安装 NVIDIA Container Toolkit
    要让 Docker 容器访问主机的 NVIDIA GPU,您需要安装并配置 NVIDIA Container Toolkit。
    根据您的操作系统,安装过程略有不同。以 Ubuntu 为例:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker.gpg
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

  • 然后,重启 Docker 服务:
sudo systemctl restart docker

  • 在 Docker 容器中验证 GPU
docker exec -it mmdet3d nvidia-smi

11. 容器中更新了镜像,如何导出新的镜像文件

在容器中更新了镜像后,如果想将这些更改保存为新的镜像文件,您可以通过 Docker 的 docker commit 和 docker save 命令来导出镜像文件。以下是具体的步骤:

  • 第一步:提交更改
    假设您已经在名为 mmdet4d 的容器中进行了更改。首先,您需要使用 docker commit 将容器的当前状态保存为新的镜像。
# 使用特定的版本号标签提交容器
sudo docker commit mmdet3d my_new_image:v3.0
  • 第二步:导出镜像文件
    接下来,使用 docker save 命令将镜像导出到文件。
# 加载镜像
docker load -i my_new_image_v1.1.tar

这会将 my_new_image:v1.1 加载到 Docker 中。
保存新的镜像文件

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值