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

### Atlas 200I DK A2 网络连接配置教程 为了成功完成 Atlas 200I DK A2 的网络连接配置,以下是详细的说明: #### 开发板硬件准备 开发板需要通过网线将其上方的网口与 PC 连接。确保 SD 卡已正确烧录镜像文件,并插入开发板中[^5]。 #### IP 地址设置 PC 需要调整其网络适配器的 IP 地址以匹配开发板所在的网段,默认情况下开发板的 IP 地址为 `192.168.137.100`。具体操作如下: - 打开控制面板 -> 网络和 Internet 选项 -> 网络共享中心。 - 更改适配器设置,右键点击以太网选择属性按钮。 - 在网络部分找到并单击 “Internet 协议版本 4 (TCP/IPv4)” 属性。 - 修改 IP 地址为 `192.168.137.XXX`(其中 XXX 可以为任意不冲突的数值),子网掩码设为 `255.255.255.0`。 #### 测试网络连通性 在确认双方设备均已完成上述配置后,可以通过命令提示符验证网络连通情况。按下 Win+R 键输入 cmd 后回车,在弹出窗口中执行以下指令来检测是否能够 ping 通开发板: ```bash ping 192.168.137.100 ``` 如果返回的结果显示请求超时,则可能存在问题;反之则表明可以正常通信。 #### SSH 登录 当 Ping 命令反馈无误之后,就可以利用 PuTTY 或其他类似的客户端软件来进行远程访问了。般用户名为 `HwHiAiUser` ,密码则是初始设定或者自定义后的值[^3]。 --- ### 注意事项 尽管 Atlas 200I DK A2 提供了一个强大的平台用于边缘侧推理运算,但在实际部署过程中可能会遇到些挑战比如某些特定框架的支持状况不佳等问题。例如有报告指出该款产品对于 MindSpore Ascend 版本存在兼容性障碍[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值