基于Dockerfile构建深度学习模型(OpenPCdet)

文章目录

 docker的安装(gpu)

Linux上安装显卡驱动

安装docker

安装 NVIDIA Container Toolkit

编写dockerfile

Docker镜像与容器的启动,打包导出

遇到的一些问题:

no module name 'pcdet'

libGL.so.1

以OpenPCdet为例

参考:[Docker] 镜像打包训练好的模型_Emery_learning的博客-CSDN博客

 docker的安装(gpu)

参考:Docker部署深度学习服务器,CUDA+cudnn+ssh_铜锣烧阿南Anan的博客-CSDN博客

以下是安装的步骤:

Linux上安装显卡驱动

参考:ubuntu安装显卡驱动的三种方法_u014682691的专栏-CSDN博客_ubuntu安装显卡驱动

网速好的推荐第一种方法,安装完成,输入nvidia-smi,会提示有点问题,重启电脑即可恢复正常

也可以考虑不更新自己的驱动

安装docker

1.如果安装了旧版本的docker,需要先卸载!

sudo apt-get remove docker docker-engine docker.io containerd runc

2.更新apt包索引并安装包以允许apt通过 HTTPS 使用存储库

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

3.添加Docker官方的GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4.使用以下命令设置稳定版存储库。

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5.安装Docker引擎

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

6.此时docker已经安装好了。运行如下命令来测试一下

sudo docker run hello-world

安装成功的显示:

安装 NVIDIA Container Toolkit

参考:Installation Guide — NVIDIA Cloud Native Technologies documentation

1.设置稳定版的存储库和GPG密钥

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

2.更新源并安装nvidia-container-toolkit

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

3.设置好默认运行后重启Docker守护进程完成安装

sudo systemctl restart docker

4.此时,可以通过运行基本 CUDA 容器来测试工作设置(需要先简单确认一下这个容器有没有)

sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu18.04 nvidia-smi

ps:上面是我经常出错的地方,之前安装的时候可能没有严格按照步骤,就出错了。(有的时候前一天是正常的,关电脑第二天打开又出错了)提示

could not select device driver "" with capabilities: [[gpu]]。

如果出现上面的问题,很可能是nvidia-container-toolkit没有安装成功,再输入一次命令:

sudo apt-get install -y nvidia-container-toolkit

如果还是不行就把docker卸载了,重新再严格按照前面的步骤执行一遍。或者再等等,重启一下电脑

如果正常,docker(gpu)的就安装成功了。下面就是关键的基于Dockerfile构建镜像,创建容器,搭建环境的步骤了。

编写dockerfile

选定一个基本的dockerfile(以OpenPCdet为例)

刚好前几天Openpcdet的作者提供了一个dockerfile,我就以它为基础,修改成适合自己环境

OpenPCDet docker地址:https://github.com/open-mmlab/OpenPCDet/tree/master/docker

其中的dockerfile地址:https://github.com/open-mmlab/OpenPCDet/blob/master/docker/Dockerfile

 其内容有些多,包含了一些安装环境相关的内容,我们可以在本地创建一个文件夹,然后创建一个Dockerfile

touch Dockerfile

把上面的内容复制到里面,参考里面的一些写法,根据自己的环境修改。

比如我本地的环境是 RTX3090,一般安装的cuda环境都是11.1 配合cudnn8版本的。那么我们就需要更改基础镜像,接着是要安装相应的pytorch 1.8 ,然后我还想把docker镜像里面的源换成清华源,直接把下好的OpenPCDet目录放到这个目录下。

 修改后的关键部分如下:

FROM nvidia/cuda:11.1.1-cudnn8-devel-ubuntu18.04
MAINTAINER Wjh<xxx@xxx.mail.com>
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections

RUN echo "export LANG=C.UTF-8" >>/etc/profile \
&& mkdir -p /.script \
&& cp /etc/apt/sources.list /etc/apt/sources.list.bak \
&& echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse\n\
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse\n\
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse\n\
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse" >/etc/apt/sources.list

# Install basics
RUN rm /etc/apt/sources.list.d/cuda.list # 原来没有这两句
RUN rm /etc/apt/sources.list.d/nvidia-ml.list # 解决报错GPG error "public key is not available"

RUN apt-get update -y \
    && apt-get install build-essential \
    && apt-get install -y apt-utils git curl ca-certificates bzip2 tree htop wget \
    && apt-get install -y libglib2.0-0 libsm6 libxext6 libxrender-dev bmon iotop g++ python3.7 python3.7-dev python3.7-distutils
...

# Install torch and torchvision
# See https://pytorch.org/ for other options if you use a different version of CUDA
RUN pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html

WORKDIR /root
COPY . /root
...

RUN pip install spconv-cu111

说明一下核心的内容:

FROM nvidia/cuda:11.1.1-cudnn8-devel-ubuntu18.04 代表nvidia/cuda:11.1.1-cudnn8-devel-ubuntu18.04 作为基础镜像(理解为父镜像)

MAINTAINER 设置镜像的作者,可以是任意字符串

RUN xxx 后面跟的就是在这个镜像里运行的命令

WORKDIR : 设置工作目录,上面的例子是设置为root ,我们自己也可以设置成其他的名字

COPY :用法为 COPY [src] [dest],上面的src为“.”,意思是将当前目录下的所有文件拷贝到dest(镜像目录中)

上面的基础镜像需要去网上的docker 寻找适合自己的。可以先搜索cuda,找到官方镜像,再找到自己需要的cuda版本

 比如根据我需要的环境,选择了下面这个

(附上链接:Docker Hub)

网上推荐装devel版本,是完整运行的,把上图pull指示的复制下来,按照规则放在Dockerfile中的第一行 From xxx

在当前目录下执行build命令,构建docker镜像 

docker build ./ -t xxx #xxx是自己取的名字 

ps:dockerfile基本语法参考:如何制作容器镜像?_容器镜像服务 SWR_常见问题_共享版_通用类_华为云

Docker镜像与容器的启动,打包导出

查看当前有的镜像

docker images

 创建完成后,从镜像创建容器,进入构建好的镜像容器

docker run -it --name xxx --gpus all xxxx
#(前面的name自己取,不取的话系统会随机取,后面的xxx为容器id或者名字)

ctrl + d 可以退出 当前容器

注意再次进入刚刚创建好的镜像容器,就不能用上面的那个命令了,一个name会固定一个容器,如果想要进入刚刚那个容器,先查看container id

查看生成的容器 ID(CONTAINER ID)

docker ps -a

运行该容器,并进入bash界面

docker start container_ID  #如果提示没有运行,就输入这个命令启动容器
docker exec -it container_ID /bin/bash #进入bash界面

可以将训练好的模型文件以及相关代码从本地复制到容器里

docker cp local_path container_ID:container:path

进去就相当于一个配置好环境的虚拟环境了,可以在这里面运行代码,进行测试。

将该容器生成新的镜像

docker commit container_ID your_image_name #比如 your_image_name = my/image:v1
#或者 只输入image_name

获取到新的镜像id:

docker images

打包新镜像,生成tar文件

docker save image_ID > XXX.tar
## docker save -o my_example.tar my_image_name:latest (latest是默认设置的镜像容器版本)

在其他主机上(或本地)导入上面的镜像

docker load -i my_example.tar

再执行 docker images 就能看到导入的镜像了

接着按上面的步骤,运行其中的容器。

遇到的一些问题:

no module name 'pcdet'

在容器内编译后,运行代码出现上面的提示,因此需要在容器内说明一下,执行以下命令:

export PYTHONPATH=$HOME/Cicv_task1_223/:$PYTHONPATH

即可正常运行

libGL.so.1

提示:libGL.so.1: cannot open shared object file: No such file or directory

在镜像环境内

apt update
apt install libgl1-mesa-glx

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dockerfile是用来创建Docker镜像的文件,可以用来部署深度学习模型环境,解决因为环境或版本不同而导致模型无法运行的问题。在Ubuntu下使用Dockerfile创建镜像的步骤如下: 1. 首先安装Docker。 2. 创建一个Dockerfile文件,其中包含以下内容: - 使用基础镜像FROM指令,例如FROM pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel。 - 设置时区和工作路径的环境变量。 - 将宿主机上的数据集和模型代码压缩包复制到镜像中,并解压。 - 配置工作目录和安装第三方依赖库。 3. 使用docker命令执行Dockerfile文件,例如docker build -f container/deeplabv3plus -t deeplabv3plus:1.0.0 .,这将制作一个名为deeplabv3plus:1.0.0的镜像。 4. 使用docker命令运行容器,例如docker run -it -v /root/container/result:/media/result --name="deeplabv3plus" --gpus=0 deeplabv3plus:1.0.0 /bin/bash。 5. 进入容器内部运行python文件,例如python deploy.py。 以上是使用Dockerfile创建深度学习模型镜像的基本步骤。在项目目录中,可以看到包含Dockerfile文件、模型代码压缩包和数据集压缩包等相关文件。这些文件可以根据具体的深度学习模型进行相应的配置和使用。 #### 引用[.reference_title] - *1* [Dockerfile 基于Docker快速部署深度学习环境](https://blog.csdn.net/weixin_45385568/article/details/123662741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [使用docker深度学习模型容器化](https://blog.csdn.net/qq_41770283/article/details/128055957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值