构建推理容器镜像
前提条件
- 容器场景,需用户自行安装docker(版本要求大于等于18.03)。
- 容器OS镜像可从Docker Hub拉取。
- 容器内非root用户运行时,需具备执行文件的相关权限。
- 请按照表1所示,获取离线推理引擎包与业务推理程序压缩包。
表1 所需软件 软件包
说明
获取方法
Ascend-cann-nnrt_{version}_linux-aarch64.run
离线推理引擎包。
{version}表示软件包版本。
Dockerfile
制作镜像需要。
用户根据业务自行准备
业务推理程序压缩包
业务推理程序合集,支持tar、tgz格式。
业务推理程序的压缩包格式,应为容器内自带的压缩程序支持的格式,且install.sh中解压业务推理程序压缩包的命令请根据实际格式适配。
说明:容器内的运行用户需具备业务推理程序压缩包的相关权限。
用户根据业务自行准备
install.sh
业务推理程序的安装脚本。
run.sh
业务推理程序的运行脚本。
操作步骤
- 将准备的软件包上传到Atlas 200I SoC A1核心板的同一目录(如“/home/test”)。
- Ascend-cann-nnrt_{version}_linux-aarch64.run
- 业务推理程序压缩包
- 执行以下步骤准备dockerfile文件。
- 以root用户登录Atlas 200I SoC A1核心板,执行id HwHiAiUser命令查询并记录宿主机上HwHiAiUser用户的UID和GID。
- 进入1中软件包上传目录,执行以下命令创建dockerfile文件(文件名示例“Dockerfile”)。
vi Dockerfile
- 写入以下内容后执行:wq命令保存内容,内容以Ubuntu arrch64操作系统为例。(以下内容仅为编写示例,请用户根据实际情况结合自身理解进行二次开发)
#操作系统及版本号,根据实际修改 FROM ubuntu:18.04 #设置离线推理引擎包参数 ARG NNRT_PKG #设置环境变量 ARG ASCEND_BASE=/usr/local/Ascend ENV LD_LIBRARY_PATH=\ $LD_LIBRARY_PATH:\ $ASCEND_BASE/driver/lib64:\ $ASCEND_BASE/nnrt/latest/acllib/lib64:\ /usr/lib64 ENV ASCEND_AICPU_PATH=$ASCEND_BASE/nnrt/latest #设置进入启动后的容器的目录,本示例以root用户运行为例,如果想使用非root用户运行,可将命令改为WORKDIR /home WORKDIR /root #在容器内创建HwHiAiUser、HwDmUser、HwBaseUser用户及属组。 RUN groupadd -g gid HwHiAiUser && useradd -u uid -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && echo ok && \ groupadd -g gid HwDmUser && useradd -u uid -g HwDmUser -d /home/HwDmUser -m HwDmUser && echo ok && \ groupadd -g gid HwBaseUser && useradd -u uid -g HwBaseUser -d /home/HwBaseUser -m HwBaseUser && echo ok #配置HwHiAiUser、HwDmUser、HwBaseUser用户的相关属组信息。 RUN usermod -a -G HwBaseUser HwHiAiUser && \ usermod -a -G HwDmUser HwHiAiUser && \ usermod -a -G HwBaseUser HwDmUser && \ usermod -a -G HwHiAiUser HwDmUser #创建驱动进程访问目录 RUN mkdir -m 750 /var/driver -m 750 /var/dmp -m 750 /usr/slog -p -m 750 /home/drv/hdc_ppc #配置“/var/dmp ”、“/var/driver ”、“/usr/slog”目录属组信息。 RUN chown HwDmUser:HwDmUser /var/dmp && \ chown HwHiAiUser:HwHiAiUser /var/driver && \ chown HwHiAiUser:HwHiAiUser /usr/slog && \ chown HwHiAiUser:HwHiAiUser /home/drv/hdc_ppc #拷贝离线推理引擎包 COPY $NNRT_PKG . RUN mkdir -p /var/davinci/driver && \ mkdir -p /usr/lib64/aicpu_kernels #由于ARM Ubuntu 18.04系统没有lib64目录,需将lib软链接到lib64目录 RUN ln -s /lib /lib64 #安装离线推理引擎包 RUN umask 0022 && \ chmod +x ${NNRT_PKG} &&\ ./${NNRT_PKG} --quiet --install &&\ rm ${NNRT_PKG} #拷贝业务推理程序压缩包、安装脚本与运行脚本 ARG DIST_PKG COPY $DIST_PKG . COPY install.sh . COPY run.sh /usr/local/bin/ #运行安装脚本 RUN chmod +x /usr/local/bin/run.sh && \ sh install.sh && \ rm $DIST_PKG && \ rm install.sh #容器启动时默认执行的程序 CMD run.sh
Dockerfile中
groupadd -g gid HwHiAiUser && useradd -u uid -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && echo ok groupadd -g gid HwDmUser && useradd -u uid -g HwDmUser -d /home/HwDmUser -m HwDmUser && echo ok groupadd -g gid HwBaseUser && useradd -u uid -g HwBaseUser -d /home/HwBaseUser -m HwBaseUser && echo ok
为在容器内创建HwHiAiUser、HwDmUser 和HwBaseUser用户。gid、uid为宿主机上对应用户的UID和GID,用户可根据2.a自行替换,容器内用户的UID和GID需要和宿主机保持一致。
- 在创建Dockerfile文件后,执行以下命令修改Dockerfile文件权限。
- “install.sh”脚本与“run.sh”脚本文件准备与dockerfile文件准备操作一致,文件内容如编写示例所示。
- 进入软件包所在目录,执行以下命令,构建容器镜像。
docker build -t image-name:tag --build-arg NNRT_PKG=nnrt-name --build-arg DIST_PKG=distpackage-name .
注意不要遗漏命令结尾的“.”,命令解释如表2所示。
如需在此步配置系统网络代理,命令参考如下:
docker build -t image-name:tag --build-arg NNRT_PKG=nnrt-name --build-arg DIST_PKG=distpackage-name --build-arg http_proxy=http://proxyserverip:port --build-arg https_proxy=http://proxyserverip:port .
其中proxyserverip为代理服务器的ip地址,port为端口。
表2 命令参数说明 参数
说明
image-name:tag
镜像名称与标签,用户可自行设置。
--build-arg
指定dockerfile文件内的参数。
NNRT_PKG
nnrt-name为离线推理引擎包名称,注意不要遗漏文件后缀,请用户自行更换。
DIST_PKG
distpackage-name为业务推理程序压缩包名称,注意不要遗漏文件后缀,请用户自行更换。
当出现“Successfully built xxx”表示镜像构建成功。
- 构建完成后,执行以下命令查看镜像信息。
docker images
显示示例:
REPOSITORY TAG IMAGE ID CREATED SIZE workload-image v1.0 1372d2961ed2 About an hour ago 249MB
编写示例
install.sh编写示例(请根据实际情况编写):
#!/bin/bash #进入容器工作目录,本示例以root用户运行为例,如果想使用非root用户运行,可将命令改为cd /home cd /root #解压业务推理程序压缩包,请根据压缩包格式适配 tar xf dist.tar
run.sh编写示例(请根据实际情况编写):
#!/bin/bash #安装后配置 source ~/.bashrc . /usr/local/Ascend/nnrt/set_env.sh #启动slogd守护进程 su - HwHiAiUser -c "export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/ && /var/slogd &" #启动DMP(设备管理)守护进程 su - HwDmUser -c "export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/ && /var/dmp_daemon -I -M -U 8087 &" #进入业务推理程序的可执行文件所在目录(本示例以root用户运行为例,如果想使用非root用户运行,可将命令改为cd /home/dist) cd /root/dist #运行可执行文件 ./main