华为Atlas 500小站Docker镜像制作【我们都是华为云专家】
1 Atlas 500概述
基于华为Ascend处理器开发AI应用程序,一般需要搭建开发环境和运行环境。开发环境可以在非昇腾设备和昇腾设备上进行搭建。而运行环境则需要在昇腾AI设备上进行搭建。其中的 Atlas 500 是华为面向广泛边缘应用场景的轻量边缘设备,具有超强计算性能、大容量存储、配置灵活、体积小、支持温度范围宽、环境适应性强、易于维护管理等特点。它主要应用在智能视频监控、分析、数据存储等应用场景,可以广泛部署在各类边缘、中心机房,满足在社区、园区、商场、超市等复杂环境区域的应用。关于各类硬件设备,可以参考官网:https://www.hiascend.com/document?tag=hardware 。其中的华为Atlas 500小站硬件的官网地址如下:
https://support-it.huawei.cn/server-3d/res/server/atlas500/index.html
华为Atlas 500小站示意图如下:
官网给出的产品特定如下:
边缘场景易用性
实时性:它可以在本地处理数据,提供实时的响应。
低带宽:只将必要的信息传送到云上。
隐私保护:客户可以决定要传送到云上和保留在本地的信息。所有传送到云上的信息都是可以加密的。
16路视频分析和存储能力
支持16路视频分析能力(最大16路1080p解码,22TOPS INT8算力)。
支持12TB存储容量,16路1080p@4Mb码流视频缓存7天,8路1080p@4Mb码流视频缓存30天。
极强环境适应能力,边缘环境部署
工业防护等级:IP40。
无风扇设计,支持-40℃~+70℃宽温度工作环境。
灵活选配,无线回传
支持选配3G或4G模块(无线回传)。
可靠性高
系统内所有固件均有双镜像备份,故障时可自动进行主备区切换。
支持软件、硬件故障检测与告警。
提供双机解决方案,内置双机备份软件,支持两台Atlas 500 智能小站组成双机备份系统,单台Atlas 500 智能小站故障时自动发起倒换。
注意:Atlas 500 智能小站自带的欧拉操作系统由于某些限制,安装相关库较为繁琐。因此,可以通过制作容器镜像来部署。
2 Atlas 500 Docker镜像制作
Atlas 500 智能小站中可以运行Docker环境,首先可以通过如下命令进行查看:
Euler:~ # docker --version
Docker version 18.09.0, build 384e3e9
从上可以看出,Docker版本为18.09.0 ,如果不能执行,则需要用户自行安装Docker(版本要求大于等于18.03 )。首先可以通过如下命令进行查看已经存在的镜像列表:
docker images
在制作容器镜像时,首先需要登录 Atlas 500 小站,查看一下固件版本信息,可以输入如下命令查看:
npu-smi info
这里显示如下:
注意:其中登录后,需要通过timeout 0 和 TMOUT=0 重置超时时间,否则超时后,会话会自动关闭,退出操作窗口。
此处的 Atlas 500 固件版本为21.0.2,后续的相关软件依赖性需要下载对应匹配的版本。下面给出制作镜像的依赖软件,镜像在Atlas 500 小站内进行制作。否则基于开发环境X86架构的虚拟机,则可能出现CPU架构不匹配的情况,而导致制作的Docker镜像无法正确启动。经测试,从官网Docker 拉取的镜像,当部署到Atlas 500 小站内后,也由于CPU架构差异,而导致启动异常。
制作镜像(配套CANN 5.0.2版本)需要的依赖如下:
具体可以参考官网: https://support.huawei.cn/enterprise/zh/doc/EDOC1100133176/6ec53ce4
首先,在Windows上准备需要的软件 Ascend-cann-nnrt_20.3.0_linux-aarch64.run (从官网下载) 和业务推理程序压缩包dist.tar 。其次,在本地创建文件 Dockerfile,内容如下:
#操作系统及版本号,根据实际修改
FROM ubuntu:18.04
#设置离线推理引擎包参数
ARG NNRT_PKG
#设置环境变量
ARG ASCEND_BASE=/usr/local/Ascend
ENV LD_LIBRARY_PATH=\
$LD_LIBRARY_PATH:\
$ASCEND_BASE/nnrt/latest/acllib/lib64:\
/home/data/miniD/driver/lib64
ENV ASCEND_AICPU_PATH=\
$ASCEND_BASE/nnrt/latest
#设置进入启动后的容器的目录
WORKDIR /root
#拷贝离线推理引擎包
COPY $NNRT_PKG .
#安装离线推理引擎包
RUN umask 0022 && \
groupadd -g 1001 HwHiAiUser && useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && usermod -u 1001 HwHiAiUser &&\
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
本容器OS镜像从Docker Hub拉取,是基于Ubuntu 18.04版本。其中的 1001 为在下站上运行如下命令显示的id信息:
Euler:~ # id HwHiAiUser
uid=1001(HwHiAiUser) gid=1001(HwHiAiUser) groups=1001(HwHiAiUser)
然后创建安装推理程序(解压)的install.sh文件,内容分别如下:
#!/bin/bash
#进入容器工作目录
cd /root
#解压业务推理程序压缩包,请根据压缩包格式适配
tar xf dist.tar
再创建运行推理程序的run.sh文件,内容分别如下:
#!/bin/bash
#进入业务推理程序的可执行文件所在目录
cd /root/dist
#运行可执行文件
#./main
python3 ./src/acl_net.py
以上两个文件的目录和文件名,可以更加自己的情况来进行调整。由于这些准备软件和文件都在Windows操作系统上,可以通过sftp命令上传到Atlas 500 小站上,如首先上传到/tmp目录中,具体命令如下:
sftp admin@192.168.0.111
sftp> put K:\atlas500_proj\Ascend-cann-nnrt_20.3.0_linux-aarch64.run
sftp> put K:\atlas500_proj\Dockerfile
sftp> put K:\atlas500_proj\install.sh
sftp> put K:\atlas500_proj\run.sh
sftp> put K:\atlas500_proj\dist.tar
以root(admin)用户登录Atlas 500 小站,首先将/tmp目录中的上述文件通过 mv 命令移动到 /opt/mount/docker01中。这个目录是我自行创建的分区并挂载的目录,示意图如下:
登录小站,可以通过如下命令查看各目录大小:
Euler:/opt/mount/docker01 # df -h
当文件就绪后,可以在 /opt/mount/docker01目录中,用如下命令查看:
Euler:/tmp # cd /opt/mount/docker01/
Euler:/opt/mount/docker01 # ls
Ascend-cann-nnrt_20.3.0_linux-aarch64.run Dockerfile lost+found
install.sh run.sh
然后,需要设置用户权限:
Euler:/opt/mount/docker01 # chmod 600 Dockerfile
Euler:/opt/mount/docker01 # chmod 600 run.sh
Euler:/opt/mount/docker01 # chmod 600 install.sh
执行如下命令,构建Docker镜像:
Euler:/opt/mount/docker01 # docker build -t workload-image:v1.0 --build-arg \
NNRT_PKG=Ascend-cann-nnrt_20.3.0_linux-aarch64.run --build-arg DIST_PKG=dist.tar .
其中的参数说明如下:
image-name:tag 是镜像名称与标签,用户可自行设置:workload-image:v1.0。
--build-arg: 指定dockerfile文件内的参数。
NNRT_PKG:为离线推理引擎包名称,注意不要遗漏文件后缀,如 Ascend-cann-nnrt_20.3.0_linux-aarch64.run。
DIST_PKG:为业务推理程序压缩包名称,注意不要遗漏文件后缀,如dist.tar。
当出现如下信息提示时,则表示镜像构建成功:
Successfully built 5533b1d161d8
Successfully tagged workload-image:v1.0
Euler:/opt/mount/docker01 # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
workload-image v1.0 5533b1d161d8 15 seconds ago 585MB
ubuntu 18.04 7266638574fb 4 weeks ago 56.6MB
k8s.gcr.io/pause latest 3df7a9f2d9f8 15 months ago 1.57MB
3 Atlas 500 Docker镜像启动
Atlas 500 智能小站中Docker容器成功构建后,可以通过如下命令启动:
Euler:/opt/mount/docker01 # docker run --device=/dev/davinci0 --device=/dev/davinci_manager \
--device=/vice /dev/devmm_svm -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /home/data/miniD/driver/lib64:driver/lib64 -v /run/board_cfg.ini:/run/board_cfg.ini -it workload-image:v1.0 bash
root@b033cf7a0eb1:~#
root@b033cf7a0eb1:~# python
bash: python: command not found
其中末尾的 bash 则直接进入容器。另外,此容器中,python环境并未安装。下面给出基本环境的构建。首先安装OS依赖项:
sudo apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev
sudo apt-get install -y unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev libncursesw5-dev
然后在线安装python3.7,命令如下:
root@b033cf7a0eb1:~# apt-get install python3.7
root@b033cf7a0eb1:~# python3.7
#让python3指向python3.7
root@b033cf7a0eb1:~# update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1
root@b033cf7a0eb1:~# python3
Python 3.7.5 (default, Feb 23 2021, 13:22:40)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
下面安装pip工具和vim工具,命令如下:
apt-get install python3-pip
apt-get install vim
pip3 install --upgrade pip
升级完成后,安装如下命令:
pip3 install attrs
pip3 install numpy
pip3 install decorator
pip3 install sympy
pip3 install cffi
pip3 install pyyaml
pip3 install pathlib2
pip3 install psutil
pip3 install protobuf
pip3 install scipy
pip3 install requests
pip3 install pillow
设置环境变量:
export PYTHONPATH=/home/data/miniD/driver/lib64:$PYTHONPATH
export LD_LIBRARY_PATH=/home/data/miniD/driver/lib64:$LD_LIBRARY_PATH
否则可能会报如下措施:
root@b033cf7a0eb1:~/dist# python3 ./src/acl_net.py
Traceback (most recent call last):
File "./src/acl_net.py", line 16, in <module>
import acl
ModuleNotFoundError: No module named 'acl'
最后,容器内执行推理程序,代码如下:
root@b033cf7a0eb1:~/dist# python3 ./src/acl_net.py
输出结果如下所示:
最后,给出几个Docker常见的命令:
docker images #查看镜像列表
docker --version #查看版本
docker rmi -f id-cc31800c9c24 #强制以ID来删除镜像
docker load < /opt/mount/docker01/ubuntu18.04.tar #从指定文件进行加载
docker tag id-cc31800c9c24 ubuntu18:18.04 #指定ID镜像的Tag
docker save id-cc31800c9c24 > /opt/mount/docker01/ubuntu18.04.tar #保存镜像到指定文件
- 点赞
- 收藏
- 关注作者
评论(0)