制作推理镜像
根据宿主机目录是否挂载到容器,容器部署分为如下两种安装方式,用户需根据实际情况进行选择。
- 将宿主机的目录挂载到容器中。该方式需要开放Kubeedge原生的容器挂载能力(如挂载卷、能力集等),存在容器安全风险,详情请参考container_capability_tool工具中的“工具使用方法”章节。
- 将驱动安装到镜像中,部署时不挂载驱动目录。该方式不存在容器逃逸的问题,但存在与宿主机驱动配套的问题,详情请参考推理容器升级约束章节。
- 本章节仅适用于Atlas 500 智能小站和Atlas 500 Pro 智能边缘服务器,本章将以Atlas 500 智能小站为例,进行容器镜像的制作与部署。
- Atlas 500 Pro 智能边缘服务器需要安装对应NPU设备的驱动后再参考使用。
业务典型场景示例
在AI应用中需要使用到边缘设备的NPU算力,下文以AtlasEdge平台部署为例,仅供参考。
该镜像具备以下特点:
- 该镜像不挂载主机路径。
- 该镜像以HwHiAiUser用户运行。
- 该容器应用部署时无需配置特权容器、能力集、主机网络等。
前提条件
- 容器OS镜像由用户自行准备,可从Docker Hub拉取。
- 请按下表所示,获取离线推理引擎包与业务推理程序压缩包。
软件包 |
说明 |
获取方法 |
---|---|---|
Ascend-cann-nnrt_{version}_linux-aarch64.run |
离线推理引擎包。 {version}表示软件包版本。 |
|
NPU的驱动软件 |
准备运行环境上NPU设备的驱动包,详情请参考驱动文档。 |
- |
Dockerfile |
制作镜像需要。 |
用户根据业务自行准备 |
业务推理程序压缩包 |
业务推理程序合集,包含模型文件、推理代码、配置文件等,可为tar、tar.gz等格式文件,install.sh安装业务推理程序的命令请根据实际情况适配。 说明:
|
用户根据业务自行准备 |
install.sh |
业务推理程序的安装脚本。 |
- |
run.sh |
业务推理程序的运行脚本。 |
- |
操作步骤
- 将准备的软件包及脚本上传至同一目录(如“/home/test”)。
- Ascend-cann-nnrt_{version}_linux-aarch64.run
- NPU的驱动软件
- 构建镜像前,需要将NPU的驱动安装路径下的driver目录提前拷贝到当前目录。Atlas 500 智能小站的NPU驱动安装路径为“/home/data/miniD/driver”,Atlas 500 Pro 智能边缘服务器的NPU驱动安装路径以实际安装路径为准。
- 如果在Atlas 500 智能小站构建镜像,则需要执行cp -r /home/data/miniD/driver/ /home/test命令。
- 如果在Atlas 500 Pro 智能边缘服务器构建镜像,则需要执行cp -r NPU实际安装路径/Ascend/driver/ /home/test命令。
- 业务推理程序压缩包
- Dockerfile、install.sh、run.sh
- 执行以下步骤准备dockerfile文件。
- 以root用户登录,执行id HwHiAiUser命令查询并记录镜像环境上HwHiAiUser用户的UID和GID(用于替换“Dockerfile”文件编写示例中的gid和uid)。
- 进入步骤 1中软件包上传目录,执行以下命令创建Dockerfile文件(文件名示例“Dockerfile”)。
vi Dockerfile
- 写入以下内容后执行:wq命令保存内容,内容以Ubuntu Arm操作系统为例(以下内容仅为编写示例,请用户根据实际情况结合自身理解进行二次开发)。
# 操作系统及版本号,根据实际修改 FROM ubuntu:18.04 # Build Arguments ARG NNRT_PKG ARG DIST_PKG ARG ASCEND_BASE=/usr/local/Ascend # 设置环境变量 ENV LD_LIBRARY_PATH=\ $LD_LIBRARY_PATH:\ $ASCEND_BASE/driver/lib64:\ $ASCEND_BASE/nnrt/latest/acllib/lib64 ENV ASCEND_AICPU_PATH=$ASCEND_BASE/nnrt/latest # 添加HwHiAiUser用户,用于运行业务容器 RUN umask 0022 && \ groupadd -g gid HwHiAiUser && \ useradd -u uid -g HwHiAiUser -m -d /home/HwHiAiUser HwHiAiUser #设置进入启动后的容器的目录, WORKDIR可根据业务设置,这里以/home/HwHiAiUser/app为例 RUN mkdir -p /home/HwHiAiUser/app WORKDIR /home/HwHiAiUser/app COPY $NNRT_PKG . COPY $DIST_PKG . COPY install.sh . # 安装NNRT。 RUN bash ${NNRT_PKG} --quiet --install --install-for-all && \ rm ${NNRT_PKG} # Install Driver # Atlas 500 智能小站和Atlas 500 Pro 智能边缘服务器需要将NPU的驱动安装路径下的driver目录提前拷贝到当前目录 # Atlas 500 智能小站的NPU驱动安装路径位于在/home/data/miniD/driver,Atlas 500 Pro 智能边缘服务器的NPU驱动安装路径以实际安装路径为准 COPY driver/ $ASCEND_BASE/driver/ #Install DIST,运行业务安装脚本 RUN sh install.sh && \ rm $DIST_PKG && \ rm install.sh COPY run.sh /home/HwHiAiUser/app/run.sh RUN chmod +x /home/HwHiAiUser/app/run.sh RUN chown -R HwHiAiUser:HwHiAiUser /home/HwHiAiUser/app/ RUN chown -R HwHiAiUser:HwHiAiUser $ASCEND_BASE/nnrt RUN chown -R HwHiAiUser:HwHiAiUser $ASCEND_BASE/driver USER HwHiAiUser:HwHiAiUser #Execute run.sh CMD bash /home/HwHiAiUser/app/run.sh
- 在创建Dockerfile文件后,执行以下命令修改Dockerfile文件权限。
chmod 600 Dockerfile
- “install.sh”脚本与“run.sh”脚本文件根据业务适配,且与dockerfile文件准备操作一致。
- install.sh编写示例:
#!/bin/bash #进入容器工作目录 cd /home/HwHiAiUser/app #解压业务推理程序压缩包,请根据压缩包格式适配,DIST为用户准备的业务推理程序压缩包名称 tar -xzvf DIST.tar
run.sh编写示例:#!/bin/bash #进入业务推理程序的可执行文件所在目录,用户需根据实际路径修改 cd /home/HwHiAiUser/app/FaceRecognition_b098/src/dist/HostCPU #运行可执行文件,用户需根据实际应用修改 ./AclFaceRecognitionHostCPU
- 进入软件包所在目录,执行以下命令,构建容器镜像。
docker build -t image-name:tag --build-arg NNRT_PKG=nnrt-name --build-arg DIST_PKG=distpackage-name .
注意不要遗漏命令结尾的“.”。
当出现“Successfully built xxx”表示镜像构建成功,命令解释如表3所示。
- 执行以下命令制作容器镜像软件包。
docker save image-name:tag |gzip -c > image-name.tar.gz
父主题: 配置容器应用