文档首页/ AI开发平台ModelArts/ 最佳实践/ AIGC模型训练推理/ Yolov8基于DevServer适配MindSpore Lite推理指导(6.3.909)
更新时间:2024-12-17 GMT+08:00
分享

Yolov8基于DevServer适配MindSpore Lite推理指导(6.3.909)

方案概览

本方案介绍了在ModelArts的DevServer上使用昇腾Atlas 300I Duo推理卡计算资源,部署Yolov8 Detection模型推理的详细过程。

本方案目前仅适用于企业客户。

资源规格要求

推荐使用“西南-贵阳一”Region上的DevServer资源和Atlas 300I Duo。

表1 资源规格要求

名称

版本

资源规格

Atlas 300I Duo

PyTorch

2.1.0

驱动

24.1.RC2.3

Python

3.9

CANN

8.0.RC3

MindSpore Lite

2.3.0

OS

arm

ultralytics

8.2.70

获取软件和镜像

表2 获取软件和镜像

分类

名称

获取路径

插件代码包

AscendCloud-6.3.909-xxx.zip软件包中的AscendCloud-CV-6.3.909-xxx.zip

说明:

包名中的xxx表示具体的时间戳,以包名的实际时间为准。

获取路径:Support-E

说明:

如果没有下载权限,请联系您所在企业的华为方技术支持下载获取。

基础镜像

西南-贵阳一:

swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2406-aarch64-snt3p-20240906180137-154bd1b

从SWR拉取。

约束限制

本文档适配昇腾云ModelArts 6.3.909版本,请参考表2获取配套版本的软件包和镜像,请严格遵照版本配套关系使用本文档。

确保容器可以访问公网。

步骤一:准备环境

  1. 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。

    购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。

    当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据

  2. SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。
    npu-smi info                    # 在每个实例节点上运行此命令可以看到NPU卡状态
    npu-smi info -l | grep Total    # 在每个实例节点上运行此命令可以看到总卡数

    如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先释放被挂载的NPU或者联系华为方技术支持。

  3. 检查驱动版本。

    运行如下命令查询驱动版本,回显信息中的“Software Version”字段值表示驱动版本。NPU ID表示设备编号,可通过npu-smi info -l命令查询。

    npu-smi info -t board -i NPU ID

    如果Atlas 300I Duo推理卡的驱动版本低于24.1.RC2.3,请参考升级文档升级驱动(24.1.RC2.3升级操作和24.1.RC2相同),24.1.RC2.3驱动软件包获取地址参考驱动软件包

  4. 检查docker是否安装。
    docker -v   #检查docker是否安装

    如尚未安装,运行以下命令安装docker。

    yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
  5. 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。
    sysctl -p | grep net.ipv4.ip_forward

    如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。

    sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf
    sysctl -p | grep net.ipv4.ip_forward

步骤二:获取基础镜像

建议使用官方提供的镜像部署服务。镜像地址{image_url}参见表2。

docker pull {image_url}

步骤三:启动容器镜像

启动容器镜像。启动前请先按照参数说明修改${}中的参数。
docker run -it --net=host \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
--shm-size=32g \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /var/log/npu/:/usr/slog \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v ${work_dir}:${container_work_dir} \
--name ${container_name} \
${image_id}  \
/bin/bash

参数说明:

  • device=/dev/davinci0,..., --device=/dev/davinci7:挂载NPU设备,示例中挂载了8张卡davinci0~davinci7。
  • ${work_dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统,work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_dir为要挂载到的容器中的目录。为方便两个地址可以相同。
  • shm-size:共享内存大小。
  • ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。
  • ${image_id}:镜像ID,通过docker images查看刚拉取的镜像ID。

容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。

driver及npu-smi需同时挂载至容器。

不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。

步骤四:获取代码并上传

上传推理代码AscendCloud-CV-6.3.909-xxx.zip到宿主机的工作目录中,包获取路径请参见表2。

上传代码到宿主机时使用的是root用户,此处需要在容器中执行如下命令统一文件属主为ma-user用户。

#统一文件属主为ma-user用户
sudo chown -R ma-user:ma-group  ${container_work_dir}
# ${container_work_dir}:/home/ma-user/ws 容器内挂载的目录
#例如:sudo chown -R ma-user:ma-group  /home/ma-user/ws

步骤五:准备推理环境

  1. 安装ultralytics,用于转换模型。
    pip install ultralytics==8.2.70 numpy==1.23.0 onnxslim==0.1.34
  2. 获取推理代码。
    cd ${container_work_dir}
    unzip AscendCloud-CV-6.3.909-xxx.zip
    cd Yolov8/yolov8_infer/mindspore_lite
  3. 获取yolov8 detection pt模型文件。下载地址:https://github.com/autogyro/yolo-V8
    图1 下载yolov8 detection pt模型文件
  4. pt模型转onnx模型。以转换yolov8n.pt为例,执行如下命令,执行完会在当前目录生成yolov8n.onnx文件。
    python pt2onnx.py --pt yolov8n.pt
  5. onnx模型转mindir格式,执行如下命令,转换完成后会生成yolov8n.mindir文件。
    converter_lite --fmk=ONNX --modelFile=yolov8n.onnx --outputFile=yolov8n --inputShape='images:1,3,640,640' --saveType=MINDIR --optimize=ascend_oriented

    如果要使用动态batch,使用如下转换命令

    converter_lite --fmk=ONNX --modelFile=yolov8n.onnx --outputFile=yolov8n_dy --saveType=MINDIR --optimize=ascend_oriented --configFile=convert_config.ini

    配置文件convert_config.ini的内容如下:

    [acl_build_options]
    input_format="ND"
    input_shape="images:-1,3,640,640"
    ge.dynamicDims="1;8;16"

    其中input_shape中的-1表示设置动态batch,ge.dynamicDims表示支持的batch值,上面的配置表示输入模型shape支持[1,3,640,640],[8,3,640,640],[16,3,640,640]这三种。

    关于动态batch配置说明详见:https://www.mindspore.cn/lite/docs/zh-CN/r2.3.0/use/cloud_infer/converter_tool_ascend.html

    使用converter_lite转换模型时,如果报E10001: Value [linux] for parameter [--host_env_os] is invalid. Reason: os not supported, support setting are the OS types of opp package。

    建议在步骤三:启动容器镜像中通过docker run启动容器时,加上--privileged=true参数。

步骤六:开始推理

执行如下命令开始推理,推理完成后会生产*_result.jpg,即检测结果。

python infer.py --model yolov8n.mindir

infer.py是NPU上使用MindSpore Lite推理的样例,与GPU推理代码区别主要参考infer函数,不同业务场景需根据实际情况做相应修改。infer.py文件预置在AscendCloud-CV-6.3.909-xxx.zip软件包中。

模型每次推理的图片数量必须是支持的batchsize,比如当前转换的mindir模型batchsize仅支持1,那么模型推理输入的图片数只能是1张;如果当前转换的mindir模型的batchsize支持多个,比如1,2,4,8,那么模型推理输入的图片数可以是1,2,4,8。

如果使用动态batch模型,需要将infer.py中如下图红框中的两行代码取消注释。

图2 修改infer.py

相关文档