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

前置条件

  1. 已经包含驱动和固件的一台atlas 200dk物理机(配置正常联网,apt镜像源)。
  2. 已经在物理机正确的搭建一次samples的环境,样例测试无误,准备好第三方依赖包和driver包。主要是为了保证第三方依赖安装的没有问题,环境搭建中涉及到的编译的文件只需要拷贝和解压,节省时间。
  3. 准备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 不必多说

  2. 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. ascend_install.info 软件包安装日志文件,拷贝从host拷贝“/etc/ascend_install.info”文件。

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

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

  4. install.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. version.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++样例测试一下。
image.png
image.png

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值