文档
注册
评分
提单
论坛
小AI

制作推理镜像

本章节介绍如何制作包含推理程序的镜像。
  • 本文以一个resnet50图像分类样例为例,该样例已编译完成且带有模型。样例压缩包为“vpc_resnet50_imagenet_classification.tar.gz”,样例可执行文件为“main”,在解压后的“vpc_resnet50_imagenet_classification/out”目录中,将样例压缩包上传到服务器任意目录,如“/home/test”

业务典型场景示例

在AI应用中需要使用到边缘设备的NPU算力,下文将展示怎样制作相应推理镜像,仅供参考。

该镜像具备以下特点:
  • 该镜像以HwHiAiUser用户运行。
  • 该容器应用部署时无需配置特权容器、能力集、主机网络等。

前提条件

  • 容器OS镜像由用户自行准备。
  • 请按下表所示,获取离线推理引擎包与业务推理程序压缩包。
表1 所需软件

软件包

说明

获取方法

Ascend-cann-nnrt_{version}_linux-aarch64.run

离线推理引擎包。

{version}表示软件包版本。推荐nnrt 6.2及以上版本。

获取链接

Dockerfile

制作镜像需要。

用户根据业务自行准备。

业务推理程序压缩包

业务推理程序合集,包含模型文件、推理代码、配置文件等,可为tar、tar.gz等格式文件,install.sh安装业务推理程序的命令请根据实际情况适配。

说明:

容器应用内的运行用户需具备业务推理程序压缩包的相关权限。

用户根据业务自行准备。

slog.conf

日志配置文件。每个推理镜像需要使用独立的配置文件,因此需要在制作推理镜像时拷贝到镜像里。

从镜像制作环境或用户运行环境中获取。

install.sh

业务推理程序的安装脚本。

用户根据业务自行准备。

run.sh

业务推理程序的运行脚本。

用户根据业务自行准备。

软件数字签名验证

为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的数字签名文件用于完整性验证。

在软件包下载之后,请参考《OpenPGP签名验证指南》,对从Support网站下载的软件包进行PGP数字签名校验。如果校验失败,请不要使用该软件包,先联系华为技术支持工程师解决。

使用软件包安装/升级之前,也需要按上述过程先验证软件包的数字签名,确保软件包未被篡改。

运营商客户请访问:http://support.huawei.com/carrier/digitalSignatureAction

企业客户请访问:https://support.huawei.com/enterprise/zh/tool/pgp-verify-TL1000000054

操作步骤

  1. 将准备的软件包及脚本上传至同一目录(如“/home/test”)。
    • Ascend-cann-nnrt_{version}_linux-aarch64.run
    • 业务推理程序压缩包
    • Dockerfile
    • slog.conf
    • install.sh
    • run.sh
  2. 执行以下步骤准备Dockerfile文件。
    1. root用户登录,依次执行以下命令查询并记录镜像环境上用户HwHiAiUser,HwBaseUser,HwDmUser的UID和GID(“Dockerfile”文件中会使用到)。
      id HwHiAiUser
      id HwBaseUser
      id HwDmUser
    2. 进入步骤 1中软件包上传目录,执行以下命令创建Dockerfile文件(文件名示例“Dockerfile”)。
      vi Dockerfile
    3. 写入以下内容后执行:wq命令保存,以Ubuntu Arm操作系统为例(以下内容仅为编写示例,请用户根据实际情况结合自身理解进行二次开发)。
      # 容器操作系统及TAG,根据实际修改
      FROM ubuntu:22.04
      
      ARG NNRT_PKG
      ARG DIST_PKG
      # 本文以/usr/local/Ascend目录为例作为NNRT安装目录,如果您希望安装在其他目录,请修改为您希望的目录
      ARG ASCEND_BASE=/usr/local/Ascend
      WORKDIR /home/AscendWork
      COPY $NNRT_PKG .
      COPY $DIST_PKG .
      COPY install.sh .
      
      # 推理程序需要使用到底层驱动,底层驱动的运行依赖HwHiAiUser,HwDmUser,HwBaseUser三个用户
      # 创建运行推理应用的用户及组,以步骤2第1点中查到的HwHiAiUse,HwDmUser,HwBaseUser的UID与GID分别为1000,1101,1102为例
      RUN umask 0022 && \
          groupadd  HwHiAiUser -g 1000 && \
          useradd -d /home/HwHiAiUser -u 1000 -g 1000 -m -s /bin/bash HwHiAiUser && \
          groupadd HwDmUser -g 1101 && \
          useradd -d /home/HwDmUser -u 1101 -g 1101 -m -s /bin/bash HwDmUser && \
          usermod -aG HwDmUser HwHiAiUser && \
          groupadd HwBaseUser -g 1102 && \
          useradd -d /home/HwBaseUser -u 1102 -g 1102 -m -s /bin/bash HwBaseUser && \
          usermod -aG HwBaseUser HwHiAiUser
         
      # 安装nnrt,解压推理程序
      RUN chmod +x $NNRT_PKG && \
          echo y | ./$NNRT_PKG --quiet --install --install-path=$ASCEND_BASE \
          --install-for-all --force && \
          sh install.sh && \
          chown -R HwHiAiUser:HwHiAiUser /home/AscendWork/ && \
          rm $NNRT_PKG && \
          rm $DIST_PKG && \
          rm install.sh
      
      ENV LD_LIBRARY_PATH=/usr/local/Ascend/nnrt/latest/lib64:/usr/local/Ascend/driver/lib64:/usr/lib64
      ENV LD_PRELOAD=/lib/aarch64-linux-gnu/libc.so.6
      
      RUN ln -sf /lib /lib64 && \
          mkdir /var/dmp && \
          mkdir /usr/slog && \
          chown HwHiAiUser:HwHiAiUser /usr/slog && \
          chown HwHiAiUser:HwHiAiUser /var/dmp
      
      # 拷贝日志配置文件
      COPY --chown=HwHiAiUser:HwHiAiUser slog.conf /etc
      
      COPY --chown=HwHiAiUser:HwHiAiUser run.sh /home/AscendWork/run.sh
      RUN chmod 640 /etc/slog.conf && \
          chmod +x /home/AscendWork/run.sh
      	
      # 若用户需要使用AICPU算子,则请用户将如下指令中的注释“#”删除
      #RUN cp /usr/local/Ascend/nnrt/latest/opp/Ascend/aicpu/Ascend-aicpu_syskernels.tar.gz /home/HwHiAiUser/ && \
      #    rm -rf /usr/local/Ascend/nnrt/latest/opp/Ascend/aicpu/Ascend-aicpu_syskernels.tar.gz && \
      #    echo $(wc -c /home/HwHiAiUser/Ascend-aicpu_syskernels.tar.gz|awk ' {print$1} ') > /home/HwHiAiUser/aicpu_package_install.info && \
      #    tail -c +8449 /home/HwHiAiUser/Ascend-aicpu_syskernels.tar.gz > /home/HwHiAiUser/aicpu.tar.gz && \
      #    rm -rf /home/HwHiAiUser/Ascend-aicpu_syskernels.tar.gz && \
      #    chown HwHiAiUser:HwHiAiUser /home/HwHiAiUser/aicpu.tar.gz && \
      #    mkdir -p /home/HwHiAiUser/aicpu_kernels
      #RUN tar -xvf /home/HwHiAiUser/aicpu.tar.gz -C /home/HwHiAiUser/ 2>/dev/null;exit 0
      #RUN rm -rf /home/HwHiAiUser/aicpu.tar.gz && \
      #    mv /home/HwHiAiUser/aicpu_kernels_device/* /home/HwHiAiUser/aicpu_kernels/ && \
      #    chown -R HwHiAiUser:HwHiAiUser /home/HwHiAiUser/
      
      # 若用户不需要使用AICPU算子,请将如下指令的注释“#”删除
      #RUN rm -rf /usr/local/Ascend/nnrt/latest/opp/Ascend/aicpu/Ascend-aicpu_syskernels.tar.gz && \
      #    chown -R HwHiAiUser:HwHiAiUser /home/HwHiAiUser/
      
      USER 1000
      CMD bash /home/AscendWork/run.sh
    4. 在创建Dockerfile文件后,执行以下命令修改Dockerfile文件权限。
      chmod 600 Dockerfile
    5. install.sh编写示例:
      cd /home/AscendWork
      #解压业务推理程序压缩包,请根据压缩包格式适配
      tar -xzvf vpc_resnet50_imagenet_classification.tar.gz
      run.sh编写示例:
      #!/bin/bash
      mkdir /dev/shm/dmp
      nohup /var/dmp_daemon -I -M -U 8087 >&/dev/null &
      /var/slogd -d
      #进入业务推理程序的可执行文件所在目录,用户需根据实际路径修改
      cd /home/AscendWork/vpc_resnet50_imagenet_classification/out
      #运行可执行文件,用户需根据实际应用修改
      ./main
  3. 进入软件包所在目录,执行以下命令,构建容器镜像。
    docker build -t image-name:tag --build-arg NNRT_PKG=nnrt-name --build-arg DIST_PKG=distpackage-name .

    当出现“Successfully built xxx”表示镜像构建成功,命令解释如表2所示。

    注意不要遗漏命令结尾的“.”

    表2 命令参数说明

    参数

    说明

    image-name:tag

    镜像名称与标签,用户可自行设置。

    NNRT_PKG

    nnrt-name为离线推理引擎包名称,注意不要遗漏文件后缀,请用户自行更换。

    DIST_PKG

    distpackage-name为业务推理程序压缩包名称,注意不要遗漏文件后缀,请用户自行更换。

  4. 执行以下命令保存容器镜像到磁盘。
    docker save image-name:tag |gzip -c > image-name.tar.gz
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词