搭建一个atlas 200 带运行环境的docker镜像

搭建一个atlas 200 带运行环境的docker镜像

搭建一个atlas 200 带运行环境的docker镜像

最近在学习docker,实战是最好的提升,于是就想着慢慢出一波案例来感受。

 

场景描述

altas 200dk RC ubuntu18.04 分设模式下 + 参考Ascend/samples v0.6.0+(不过目前环境指导没啥变化。之后版本应当也可以)开发c++和python应用

 

之前都是装在物理机上的,但是目前出现了docker的场景,但官方提供的镜像貌似有问题,且不包含python和C++环境,于是产生制作一个docker镜像的想法,搭建支持samples c++和python样例的环境,达到开箱即用,之前也没学过docker,现在正好学习一下。我这里的docker使用的都是root用户,望周知。

 

官方文档参考连接:

https://support.huawei.com/enterprise/zh/doc/EDOC1100191942/f3364285

 

前置条件

已经包含驱动和固件的一台atlas 200dk物理机(配置正常联网,apt镜像源)。

已经在物理机正确的搭建一次samples的环境,样例测试无误,准备好第三方依赖包和driver包。主要是为了保证第三方依赖安装的没有问题,环境搭建中涉及到的编译的文件只需要拷贝和解压,节省时间。

准备Ascend-cann-nnrt_5.0.3.1_linux-aarch64.run安装包

安装过程


一. 安装docker>18.03

在物理机上

 

su root

apt remove docker docker-engine docker-ce docker.io

apt update

apt install -y apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

apt update

apt install  docker-ce

systemctl status docker

 

检查一下docker版本:

 

docker -v



二. 准备以下文件

Ascend-cann-nnrt_5.0.3.1_linux-aarch64.run

Dockerfile

ascend_install.info

3rdenv.tar.gz

driver.tar.gz

install.sh

version.info

 

统一放置在同一目录。其中:

 

  1. Ascend-cann-nnrt_5.0.3.1_linux-aarch64.run 不必多说

 

  1. Dockerfile docker镜像制作操作文件,内容如下

 

#操作系统及版本号,根据实际修改

FROM ubuntu:18.04

#设置离线推理引擎包参数

ARG NNRT_PKG

#设置环境变量

ARG ASCEND_BASE=/usr/local/Ascend

ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ASCEND_BASE/nnrt/latest/lib64:/usr/lib64

ENV ASCEND_AICPU_PATH=$ASCEND_BASE/nnrt/latest

#设置进入启动后的容器的目录,本示例以root用户运行为例,如果想使用非root用户运行,可将命令改为WORKDIR /home

WORKDIR /root

ENV DEBIAN_FRONTEND=noninteractive

#拷贝离线推理引擎包c79_withruntime:0.6.0

COPY 3rdenv.tar.gz .

COPY driver.tar.gz .

COPY install.sh .

#配置样例主要环境变量

ENV CPU_ARCH=aarch64

ENV THIRDPART_PATH=/root/Ascend/thirdpart/${CPU_ARCH}

ENV INSTALL_DIR=$ASCEND_BASE/nnrt/latest

ENV PYTHONPATH=${THIRDPART_PATH}/acllite:$PYTHONPATH

ENV LD_LIBRARY_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH}/lib:$LD_LIBRARY_PATH

# 运行环境安装脚本

RUN sh install.sh && \

 rm install.sh

#创建驱动进程访问目录

RUN mkdir -p /usr/slog

RUN mkdir -p /run/driver

RUN mkdir -p /var/driver

#修改目录权限(非root用户运行时需要修改)

#RUN chown -R HwHiAiUser:HwHiAiUser /usr/slog/

#RUN chown -R HwHiAiUser:HwHiAiUser /var/driver/

#USER HwHiAiUser

 

  1. info 软件包安装日志文件,拷贝从host拷贝“/etc/ascend_install.info”文件。

 

  1. tar.gz对应安装样例环境时的Ascend/thirdpart,不过为了不进行移动操作,我在外面套了一个Ascend文件然后压缩,这样镜像制作过程中解压就完成了环境的安装。

 

  1. tar.gz 对应安装样例时的I N S T A L L D I R / d r i v e r / , 这 里 镜 像 制 作 过 程 中 解 压 后 到 {INSTALL_DIR}/driver/,这里镜像制作过程中解压后到{INSTALL _DIR}/driver/,这里镜像制作过程中解压后到{INSTALL_DIR}/driver/就完成安装

 

  1. sh为安装样例环境的主要shell命令操作,安装样例环境的主要环境变量配置操作,我放到了Dockerfile中

主要内容如下:

 

#!/bin/bash

 

echo ". /usr/local/Ascend/nnrt/set_env.sh">> ~/.bashrc

echo "export ASCEND_GLOBAL_EVENT_ENABLE=0">> ~/.bashrc

 

source ~/.bashrc

apt update

 

# v0.6.0 sample c++ ENV

cd /root

 

tar xvf 3rdenv.tar.gz

 

rm 3rdenv.tar.gz

 

mkdir -p ${INSTALL_DIR}/driver

 

tar xvf driver.tar.gz -C ${INSTALL_DIR}/driver

 

apt-get install libopencv-dev python3.6 python3-pip -y

 

python3.6 -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

 

pip3 config set  global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

 

 

# v0.6.0 sample python ENV

 

python3.6 -m pip install Cython numpy tornado==5.1.0 protobuf

 

apt-get install python3-opencv -y

 

apt-get install -y libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev libavresample-dev

 

apt-get install pkg-config libxcb-shm0-dev libxcb-xfixes0-dev -y

python3.6 -m pip install av==6.2.0

 

apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk -y

 

python3.6 -m pip install Pillow

 

 

  1. info是驱动版本文件,从host拷贝"/var/davinci/driver/version.info"文件

 

 

三 开始构建

su root

chmod 600 Dockerfile

chmod 600 install.sh

docker build -t 镜像名称:tag号 --build-arg NNRT_PKG=nnrt软件包名称 .

 

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

–build-arg 指定dockerfile文件内的参数。

NNRT_PKG=软件包名称

举个例子

docker build -t nnrt5.0.3_sample0.6:0.1 --build-arg NNRT_PKG=Ascend-cann-nnrt_5.0.3.1_linux-aarch64.run .

 

中间会持续一段时间,耐心等待即可
当出现“Successfully built xxx”表示镜像构建成功。

然后我们可以查看一下image信息

docker images

 

创建容器实例

执行下列操作,不过中间的镜像和tag号要对应修改

docker run -it --device=/dev/davinci0 --device=/dev/davinci_manager --device=/dev/svm0 --device=/dev/log_drv --device=/dev/event_sched --device=/dev/upgrade --device=/dev/hi_dvpp --device=/dev/memory_bandwidth --device=/dev/ts_aisle -v /usr/local/Ascend/driver/tools:/usr/local/Ascend/driver/tools -v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi -v /var/hdc_ppc:/var/hdc_ppc -v /etc/hdcBasic.cfg:/etc/hdcBasic.cfg -v /etc/rc.local:/etc/rc.local -v /sys:/sys -v /usr/bin/sudo:/usr/bin/sudo -v /usr/lib/sudo/:/usr/lib/sudo/ -v /etc/sudoers:/etc/sudoers/ -v /etc/sys_version.conf:/etc/sys_version.conf 镜像名称:tag号 /bin/bash -c "/usr/local/Ascend/driver/tools/minirc_container_prepare.sh;/bin/bash"

 

进入后
我们用vgg测试,和C++样例测试一下。


订阅快讯

通过快讯订阅,您将及时收到我们的信息更新通知。