【Docker部署Torch深度学习项目】

Docker部署Torch深度学习项目

1 前置任务

1.1 安装docker

sudo apt-get update

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

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

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

sudo apt-get update

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

1.2 安装nvidia-docker

curl https://get.docker.com | sh \
  && sudo systemctl --now enable docker
sudo apt-get update

sudo apt-get install -y nvidia-docker2

sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:10.2-devel  nvidia-smi


查看docker镜像
nvidia-docker image ls

2 项目概况

作为一个打包文件,进行项目部署。编写的Dockerfile如下:

FROM anibali/pytorch #继承的基础镜像

USER root
WORKDIR /YOLOX_JYZ
RUN ln -sf /usr/bin/python3.8 /usr/bin/python
RUN apt-get update && apt-get install -y wget
RUN wget https://bootstrap.pypa.io/get-pip.py && \python get-pip.py && \rm get-pip.py

RUN apt-get update && apt-get install -y \
    build-essential \
    libgfortran5 \
    libatlas-base-dev

ENV PIP_INSTALL="python -m pip --no-cache-dir install"
RUN $PIP_INSTALL numpy==1.21 llvmlite
RUN apt-get update && apt-get install -y cmake
RUN apt-get update && apt-get install -y protobuf-compiler
RUN echo "Current directory contents:" && ls && echo "Current working directory:" && pwd

COPY requirements.txt /YOLOX_JYZ/requirements.txt
COPY . /YOLOX_JYZ
RUN $PIP_INSTALL -r /YOLOX_JYZ/requirements.txt
ADD . /

文件结构上:需要将Dockfile和项目的其他文件放在一起,并且Dockfile应当使用copy将项目打包入镜像。从而构建上下文关联

3 操作步骤

3.1 编写Dockfile文件,无后缀
3.2 首先从dockerhub上拉取基础镜像-相当于一个最小系统,纯净版

sudo docker pull anibali/pytorch:1.10.0-cuda11.3-ubuntu20.04

3.3 build一个自己的镜像

base> yufeixie@y-B460HD3:~/myprojects/YOLOX_JYZ$ sudo docker build -t jyz_dockerimage20.04 .
格式为:sudo docker build -t [image_name]

docker build 是用于构建 Docker 镜像的指令,它有很多参数可以配置构建过程。以下是一些常见的 docker build 参数解释:

-t, --tag: 为镜像指定一个标签 (tag),通常使用 [仓库名]/[镜像名]:[标签] 格式。例如:-t myrepo/myimage:latest。

-f, --file: 指定用于构建的 Dockerfile 文件的路径。默认情况下,Docker 会在当前目录下查找名为 Dockerfile 的文件,但您可以通过 -f 参数指定其他路径。例如:-f /path/to/Dockerfile。

--build-arg: 设置构建时的构建参数,这些参数可以在 Dockerfile 中使用。格式为 变量名=值。例如:--build-arg MYVAR=myvalue。

--network: 指定用于构建过程的网络类型。

--no-cache: 在构建过程中不使用缓存,强制重新下载所有依赖项和重新构建所有层。

--pull: 在构建过程中始终尝试从远程仓库拉取最新的基础镜像。

--compress: 在构建过程中使用压缩算法来减小镜像大小。

--squash: 在构建过程中对镜像进行压缩,以减小镜像大小。

--progress: 设置构建时的进度输出格式,可以是 auto, plain, tty。

--secret: 指定构建过程中使用的 Docker 构建秘钥。

--ssh: 指定构建过程中使用的 SSH 认证。

3.4 运行一个实例

sudo docker run -it --gpus all --name yolox_jyz_container yolox_jyz /bin/bash

参数解释:
docker run 是用于在容器中运行一个新的进程的指令。它有很多参数可以配置容器的运行方式和行为。以下是一些常见的 docker run 参数解析:

-i, --interactive: 保持标准输入 (stdin) 打开,允许用户与容器的进程进行交互。

-t, --tty: 分配一个伪终端 (pseudo-tty),通常与 -i 一起使用,允许容器中的进程与用户进行交互。

--name: 为容器指定一个名称。

-d, --detach: 让容器在后台运行 (守护模式)。

--rm: 当容器退出时自动删除容器。

--restart: 容器退出后自动重启策略。可以是 no (不重启), on-failure[:max-retries] (失败时重启,最多重试次数), always (总是重启) 等。

--volume, -v: 挂载主机目录到容器中,格式为 [主机路径]:[容器路径]。

--env, -e: 设置环境变量,格式为 变量名=值。

--network: 指定容器连接的网络类型。

--publish, -p: 将容器的端口映射到主机的端口,格式为 [主机端口]:[容器端口]。

--privileged: 以特权模式运行容器,拥有主机的所有权限。

--user: 指定运行容器的用户。

如果要创建一个同名容器,则需要进行stop和删除,才能再创建

sudo docker stop f48419b9453512a1e07f49e0fac80e90d658b425f9f7c95f96e56cbb05ae3cc4
sudo docker rm f48419b9453512a1e07f49e0fac80e90d658b425f9f7c95f96e56cbb05ae3cc4

3.5 保存导出导入

# 保存文件
docker save -o output-filename image-name
sudo docker save -o docker_image.tar docker_sample:latest

sudo docker load -i docker_image.tar

4 常见问题

4.1 FROM镜像提示不存在:

需要从dockerhub上下载 docker pull

4.2 docker run提示图形库没有:

需要将宿主的图形库挂载到镜像

sudo docker run -it --name yolox_jyz -v /usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu jyz_dockerimage /bin/bash

-v: 挂载主机目录到容器中,格式为 [主机路径]:[容器路径]

4.3 docker 环境变量问题,来源于项目中DJI测温irp文件,所以要加入环境变量

export LD_LIBRARY_PATH=/YOLOX_JYZ

这个可以写在dockfile里面也可以在产生容器后使用

参考文献:

https://blog.csdn.net/qq_40243750/article/details/130661104?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-130661104-blog-130378511.235%5Ev38%5Epc_relevant_default_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-130661104-blog-130378511.235%5Ev38%5Epc_relevant_default_base&utm_relevant_index=2

https://blog.csdn.net/whyAholic/article/details/111247081?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169137993316800180644276%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=169137993316800180644276&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-111247081-null-null.142v92koosearch_v1&utm_term=%20FROM%20centos%3Alatest&spm=1018.2226.3001.4187

https://blog.csdn.net/qq_41627642/article/details/127316515?ops_request_misc=&request_id=e9dd0df0b9ff4d069fd8abe53c8352f7&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2allkoosearch~default-2-127316515-null-null.142v92koosearch_v1&utm_term=docker%E6%89%93%E5%8C%85%E9%83%A8%E7%BD%B2%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A8%A1%E5%9E%8B&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值