【完美部署!】Windows系统部署wsl2+docker+torchserve测试mmrotate模型

瓜某人前段时间需要在win10系统上测试mmrotate(旋转目标检测框架)的.mar模型,根据官方文档,win10上必须部署docker创建对应镜像,然后在torchserve上测试。

来来回回翻了好多博客,踩了许多坑,最后终于成功部署!在此记录一下。

本文主要流程:wsl2—> docker —> torchserve测试
如果有一样要实现以上目的的小伙伴,希望本文有所帮助,请一定按照步骤来!!!
瓜某人当时遇到的部分报错相应解决方式也会说明。

1. Windows最新版

首先!!!看下自己的Windows系统是不是最新版本,相信我,这个很重要!不是最新版的要更新!

查看当前系统版本: Windows 键 + R—> 输入winver —>回车

更新系统:Windows设置—> 更新和安全—> Windows更新

瓜某人系统更新完后版本是21H2。

2. 安装wsl2

  1. 管理员身份PowerShell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重启电脑

  1. 管理员PowerShell 将WSL2设置为默认版本
wsl --set-default-version 2
  1. 进入微软商店下载并安装ubuntu版本
    瓜某人下载的是Ubuntu 18.04.5 LTS

  2. 打开下载好的ubuntu,然后进入管理员身份PowerShell,输入:

wsl -l -v

验证wsl2,结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/15f15ab921ae4b65996d
说明安装ok

3. 安装docker

不要在下载的ubuntu里安装docker!!!
这是之前踩的一个坑,搜了下说是ubuntu内部的docker会与Windows冲突… …

比如瓜某人之前按照网上教程给ubuntu里装了docker,但是win10系统调用不了,之后下载了Docker Desktop on Windows,在设置里里勾选了ubuntu,结果docker完全用不了。

经过一番摸索,重复结论:
不要在下载的ubuntu里安装docker!!!
不要在下载的ubuntu里安装docker!!!
不要在下载的ubuntu里安装docker!!!

直接下载Docker Desktop on Windows软件

  1. 安装条件
    1)docker for windows只适用于win8以上的系统,win10是现在的主流,所以这里我将介绍的是win10系统中docker的安装和使用。
    2)开启电脑的虚拟化,一般电脑都是默认开启的。可以在任务管理器->性能->CPU下查看虚拟化是否开启。
    3)查看Hyper-v是否开启,启用Hyper-v可以在电脑中配置虚拟机。开启步骤:控制面板->程序->启用或关闭Windows功能->把Hyper-v勾上->最后重启电脑就可以了。

  2. 下载Docker Desktop on Windows
    官网下载链接

下载完后打开,在右上角设置中勾选如图:
(跟瓜某人勾选的一样就么问题)
在这里插入图片描述在这里插入图片描述
最后别忘了重启docker

  1. 进入管理员身份PowerShell,输入:
wsl -l -v

结果显示:
在这里插入图片描述
说明docker已安装成功

也可以在管理员身份PowerShell中输入:

docker images	

显示已有镜像
如图表示成功:
在这里插入图片描述

到现在wsl2+docker已全部OK!!!

4. torchserve测试

主要参考mmrotate官方文档

第一步:创建mmrotate-serve docker镜像

按照官方文档,需要在mmrotate文件夹下打开终端,输入:

docker build -t mmrotate-serve:latest docker/serve/

但是,直接创建一定会失败!!!

  1. 在官方mmrotate文件包中,打开docker—>serve—> Dockerfile文件

在这里插入图片描述里面很多命令需要修改,以及镜像中的各个环境版本也需要修改!

在cmd终端中输入:

nvcc -V

查看自己电脑的nvidia版本,搜索相对应的版本,将Dockerfile文件中的版本修改为适合自己的。

以下是瓜某人自己的版本:

ARG PYTORCH="1.10.0"
ARG CUDA="11.3"
ARG CUDNN="8"
FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel

ARG MMCV="1.5.3"
ARG MMDET="2.25.0"
ARG MMROTATE="0.3.2"
ARG TORCHSERVE="0.6.0"

修改后的完整Dockerfile文件如下:
(注释掉的为原命令,除了修改了部分命令,还给下载命令后添加了镜像源,否则创建镜像时间会非常的漫长。。。)

# ARG PYTORCH="1.8.0"
# ARG CUDA="11.1"
# ARG CUDNN="8"
# FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel

# ARG MMCV="1.4.6"
# ARG MMDET="2.25.0"
# ARG MMROTATE="0.3.2"
# ARG TORCHSERVE="0.6.0"

ARG PYTORCH="1.10.0"
ARG CUDA="11.3"
ARG CUDNN="8"
FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel

ARG MMCV="1.5.3"
ARG MMDET="2.25.0"
ARG MMROTATE="0.3.2"
ARG TORCHSERVE="0.6.0"

ENV PYTHONUNBUFFERED TRUE

# RUN apt-get update && \
#     DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
#     ca-certificates \
#     g++ \
#     openjdk-11-jre-headless \
#     # MMDet Requirements
#     ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 \
#     && rm -rf /var/lib/apt/lists/*

RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
RUN rm /etc/apt/sources.list.d/cuda.list
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
    ca-certificates \
    g++ \
    openjdk-11-jre-headless \
    # MMDet Requirements
    ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 \
    && rm -rf /var/lib/apt/lists/*

ENV PATH="/opt/conda/bin:$PATH"
RUN export FORCE_CUDA=1

# TORCHSEVER
# torchserve>0.2.0 is compatible with pytorch>=1.8.1
RUN pip install torchserve==${TORCHSERVE} torch-model-archiver nvgpu -i https://pypi.tuna.tsinghua.edu.cn/simple/

# MMLAB
ARG PYTORCH
ARG CUDA
RUN ["/bin/bash", "-c", "pip install mmcv-full==${MMCV} -f https://download.openmmlab.com/mmcv/dist/cu${CUDA//./}/torch${PYTORCH}/index.html -i https://pypi.tuna.tsinghua.edu.cn/simple/"]
RUN pip install mmdet==${MMDET} -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN pip install mmrotate==${MMROTATE} -i https://pypi.tuna.tsinghua.edu.cn/simple/
# RUN ["/bin/bash", "-c", "pip install mmcv-full==${MMCV} -f https://download.openmmlab.com/mmcv/dist/cu${CUDA//./}/torch${PYTORCH}/index.html"]
# RUN pip install mmdet==${MMDET}
# RUN pip install mmrotate==${MMROTATE}

RUN useradd -m model-server \
    && mkdir -p /home/model-server/tmp

COPY entrypoint.sh /usr/local/bin/entrypoint.sh

RUN chmod +x /usr/local/bin/entrypoint.sh \
    && chown -R model-server /home/model-server

COPY config.properties /home/model-server/config.properties
RUN mkdir /home/model-server/model-store && chown -R model-server /home/model-server/model-store

EXPOSE 8080 8081 8082

USER model-server
WORKDIR /home/model-server
ENV TEMP=/home/model-server/tmp
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["serve"]

修改完Dockerfile文件后,先不要着急跟着官方文档命令创建镜像,因为还有一个huge坑在等着瓜某人。。。

  1. 打开docker—>serve—> entrypoint.sh文件
    在这里插入图片描述
    如果你跟瓜某人一样用的vs code的话,那么直接点击右下角CRLF,在上方弹框中点击LF。(此操作为将行尾序列从CRLF—>LF

在这里插入图片描述

右下角显示为LF即可
在这里插入图片描述

【注】如果不执行步骤2的话,之后运行创建好的镜像会出现entrypoint.sh不存在的报错!别问我怎么知道的。。。

现在,已经没有什么坑了(如果还有的话那应该是瓜某人没见过的问题捏),可以美滋滋地按照官方文档输入创建镜像的命令了,gogogo

  1. 在mmrotate文件夹中打开终端,输入:
docker build -t mmrotate-serve:latest docker/serve/

随后就是等待、等待、等待,等我们的windows电脑将镜像创建好。

创建完毕后可以在Docker Desktop on Windows软件中看到我们创建好的镜像,如图:
(瓜某人在创建时改了镜像名字,按照官方命令的话镜像名字是:mmrotate-serve)

在这里插入图片描述

现在我们第一步创建镜像就完美结束啦!

第二步:将模型从 MMRotate 转换为 TorchServe

也就是把.pth转为.mar模型。
如果已经生成了.mar模型,直接跳到第三步运行镜像。

按照mmrotate官方文档,在mmrotate文件夹中打开终端,运行:

python tools/deployment/mmrotate2torchserve.py ${CONFIG_FILE} ${CHECKPOINT_FILE} \
--output-folder ${MODEL_STORE} \
--model-name ${MODEL_NAME}

${CONFIG_FILE} :配置文件路径
${CHECKPOINT_FILE} :.pth模型
(注:最好不要使用mmrotate中的latest.pth模型,直接转化epoch模型,比如:12epoch.pth,不然模转化后的模型可能会有问题)
${MODEL_STORE}:转化后的.mar模型存放路径 ${MODEL_NAME}:.mar模型名字

这样就可以生成.mar模型。

第三步:运行mmrotate-serve

在终端中输入:

docker run --rm --cpus 8 --gpus all -p8080:8080 -p8081:8081 -p8082:8082 --mount type=bind,source=$MODEL_STORE,target=/home/model-server/model-store mmrotate-serve:latest

$MODEL_STORE:与第二步中的一样,.mar模型的存放路径
(路径这里需要注意,Windows中这里不要写D:/,应该为/d/
-p8080:8080 -p8081:8081 -p8082:8082:镜像运行时的端口映射

然后通过终端可以看到镜像已经成功运行。

第四步:测试部署

curl http://127.0.0.1:8080/predictions/${MODEL_NAME} -T ${image.jpg}

${MODEL_NAME}:第二步中转为.mar模型时设置的模型名字
${image.jpg}:测试图片(瓜某人用的绝对路径)

若得到类似下图格式的输出,说明部署成功:

[
  {
    "class_name": "small-vehicle",
    "bbox": [
      584.9473266601562,
      327.2749938964844,
      38.45665740966797,
      16.898427963256836,
      -0.7229751944541931
    ],
    "score": 0.9766026139259338
  },
  {
    "class_name": "small-vehicle",
    "bbox": [
      152.0239715576172,
      305.92572021484375,
      43.144744873046875,
      18.85024642944336,
      0.014928221702575684
    ],
    "score": 0.972826361656189
  }
]

经过上面这么多的操作,Windows系统部署wsl2+docker+torchserve测试mmrotate模型已经完美结束!撒花✿✿ヽ(°▽°)ノ✿

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值