香橙派昇腾AI使用docker容器进行推理的环境搭建记录
收藏回复举报
香橙派昇腾AI使用docker容器进行推理的环境搭建记录
新人帖
发表于2025-05-14 18:24:15
0 查看

以下所有的在板子上的操作我都用的root去做的,建议作为参考。

下载需要的驱动文件:链接地址

true 【用wget下载到板子上也可以,下载toolkit,nnrt的不用下载了,切记确认一下版本,目前香橙派官方镜像用的8.0.0,但是百度网盘给的驱动文件是7.0.0的,一定要和宿主机系统镜像的一致!

存储到自定义的一个目录下nnrt不需要了 true

创建Dockerfile和可执行的sh文件

文件名:Dockerfile_toolkit

# syntax = docker/dockerfile:experimental
FROM ubuntu:22.04 as buildtemp
WORKDIR /tmp
COPY . ./

FROM ubuntu:22.04

ARG ASCEND_BASE=/usr/local/Ascend
WORKDIR /home/AscendWork

# 安装系统依赖
RUN sed -i "s@http://.*ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \
    apt update && \
    apt upgrade -y && \
    apt install -y --no-install-recommends gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev \
    libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 curl git liblzma-dev bzip2 libbz2-dev && \
    apt clean && rm -rf /var/lib/apt/lists/*
 
ENV LD_LIBRARY_PATH=/usr/local/python3.9.2/lib:$LD_LIBRARY_PATH
ENV PATH=/usr/local/python3.9.2/bin:$PATH

# 推理程序需要使用到底层驱动,底层驱动的运行依赖HwHiAiUser,HwBaseUser,HwDmUser三个用户
# 创建运行推理应用的用户及组,HwHiAiUse,HwDmUser,HwBaseUser的UID与GID分别为1000,1101,1102为例
RUN umask 0022 && \
    groupadd  HwHiAiUser -g 1000 && \
    useradd -d /home/HwHiAiUser -u 1000 -g 1000 -m -s /bin/bash HwHiAiUser && \
    groupadd HwDmUser -g 1101 && \
    useradd -d /home/HwDmUser -u 1101 -g 1101 -m -s /bin/bash HwDmUser && \
    usermod -aG HwDmUser HwHiAiUser && \
    groupadd HwBaseUser -g 1102 && \
    useradd -d /home/HwBaseUser -u 1102 -g 1102 -m -s /bin/bash HwBaseUser && \
    usermod -aG HwBaseUser HwHiAiUser

# 安装python和python库
RUN umask 0022 && \
    curl -k https://repo.huaweicloud.com/python/3.9.2/Python-3.9.2.tgz -o Python-3.9.2.tgz && \
    tar -xf Python-3.9.2.tgz && cd Python-3.9.2 && ./configure --prefix=/usr/local/python3.9.2 --enable-shared --with-bz2  && \
    make -j20 && make install && \
    ln -sf /usr/local/python3.9.2/bin/python3 /usr/bin/python3 && \
    ln -sf /usr/local/python3.9.2/bin/python3 /usr/bin/python && \
    ln -sf /usr/local/python3.9.2/bin/pip3 /usr/bin/pip3 && \
    ln -sf /usr/local/python3.9.2/bin/pip3 /usr/bin/pip && \
    cd .. && \
    rm -rf Python*

# 安装python库和CANN包
RUN --mount=type=cache,target=/tmp,from=buildtemp,source=/tmp \
    cp /tmp/run.sh /home/AscendWork/ && \
    chmod +x /home/AscendWork/run.sh && \
    mkdir -p ~/.pip  && \
    echo '[global] \n\
    index-url=http://mirrors.aliyun.com/pypi/simple\n\
    trusted-host=mirrors.aliyun.com' >> ~/.pip/pip.conf && \
    pip3 install pip -U && \
    pip3 install -r /tmp/requirements.txt && \
    rm -rf /root/.cache/pip && \
    bash /tmp/Ascend-cann-toolkit*.run --quiet --install --install-path=$ASCEND_BASE --install-for-all --force && \
    chown -R HwHiAiUser:HwHiAiUser /home/AscendWork/ && \
    ln -sf /lib /lib64 && \
    mkdir /var/dmp && \
    mkdir /usr/slog && \
    mkdir /usr/lib64 && \
    cp /tmp/libdp.so /usr/lib64/libdp.so && \
    chown HwHiAiUser:HwHiAiUser /usr/slog && \
    chown HwHiAiUser:HwHiAiUser /var/dmp

ENV LD_PRELOAD=/lib/aarch64-linux-gnu/libc.so.6
ENV ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest
ENV TOOLCHAIN_HOME=${ASCEND_TOOLKIT_HOME}/toolkit
ENV PYTHONPATH=${ASCEND_TOOLKIT_HOME}/python/site-packages:${ASCEND_TOOLKIT_HOME}/opp/built-in/op_impl/ai_core/tbe
ENV ASCEND_AICPU_PATH=${ASCEND_TOOLKIT_HOME}
ENV ASCEND_OPP_PATH=${ASCEND_TOOLKIT_HOME}/opp
ENV ASCEND_HOME_PATH=${ASCEND_TOOLKIT_HOME}
ENV LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/lib64:${ASCEND_TOOLKIT_HOME}/lib64/plugin/opskernel:${ASCEND_TOOLKIT_HOME}/lib64/plugin/nnengine:/usr/local/python3.9.2/lib:/usr/local/Ascend/driver/lib64:/usr/lib64
ENV PATH=${ASCEND_TOOLKIT_HOME}/bin:${ASCEND_TOOLKIT_HOME}/compiler/ccec_compiler:/usr/local/python3.9.2/bin:$PATH

RUN git config --global http.sslVerify false && \
    pip3 install -v 'git+https://gitee.com/ascend/tools.git#egg=aclruntime&subdirectory=ais-bench_workload/tool/ais_bench/backend' && \
    pip3 install -v 'git+https://gitee.com/ascend/tools.git#egg=ais_bench&subdirectory=ais-bench_workload/tool/ais_bench'

# WORKDIR /home/HwHiAiUser/data/Project/Publish/CalProject/
USER 1000
CMD bash /home/AscendWork/run.sh
# CMD python start.py

文件名:build.sh

#!/bin/bash

version=24.0.RC1

cp -r /usr1/package/Ascend-cann-toolkit_*_linux-aarch64.run .

#检查cann
have_toolkit=$(find . | grep "toolkit" | grep "linux-aarch64" | wc -l )
if [ $have_toolkit == 0 ]; then
    echo "please put toolkit package here"
    exit 1
fi

DOCKER_BUILDKIT=1 docker build -t ascend-infer-310b:${version}-arm64 . -f Dockerfile || exit 1

文件名:run.sh 【这个文件有帖子可以查到,有博主遇到容器内npu-smi报错,故而加上的】

#!/bin/bash

mkdir /dev/shm/dmp
mkdir /home/HwHiAiUser/hdc_ppc
nohup /var/dmp_daemon -I -M -U 8087 >&/dev/null &
/var/slogd -d

文件名:requirements.txt

absl-py
attrs
cffi
cython
decorator
numpy==1.22.4
pathlib2
protobuf
psutil
pyyaml
requests
six
sympy
scipy
pillow==10.2.0
opencv-python-headless==4.9.0.80
torch==2.1.0
torchvision==0.16.0

【懒得改代码就直接往这个文件夹下放】 true

执行build.sh文件进行创建镜像

等待执行完成docker images 这里只需要一个dockerfile_toolkit 即下面对应的dev tag true

创建容器

docker run -it --net=host  --restart=always --privileged=true  \
--name yolov5zs1 \
--device=/dev/upgrade:/dev/upgrade \
--device=/dev/davinci0:/dev/davinci0 \
--device=/dev/davinci_manager \
--device=/dev/vdec:/dev/vdec \
--device=/dev/vpc:/dev/vpc \
--device=/dev/pngd:/dev/pngd \
--device=/dev/venc:/dev/venc \
--device=/dev/sys:/dev/sys \
--device=/dev/svm0 \
--device=/dev/ts_aisle:/dev/ts_aisle \
--device=/dev/dvpp_cmdlist:/dev/dvpp_cmdlist \
-v /etc/sys_version.conf:/etc/sys_version.conf:ro \
-v /etc/hdcBasic.cfg:/etc/hdcBasic.cfg:ro \
-v /usr/lib64/libaicpu_processer.so:/usr/lib64/libaicpu_processer.so:ro \
-v /usr/lib64/libaicpu_prof.so:/usr/lib64/libaicpu_prof.so:ro \
-v /usr/lib64/libaicpu_sharder.so:/usr/lib64/libaicpu_sharder.so:ro \
-v /usr/lib64/libadump.so:/usr/lib64/libadump.so:ro \
-v /usr/lib64/libtsd_eventclient.so:/usr/lib64/libtsd_eventclient.so:ro \
-v /usr/lib64/libaicpu_scheduler.so:/usr/lib64/libaicpu_scheduler.so:ro \
-v /usr/lib64/libcrypto.so.3:/usr/lib64/libcrypto.so.3:ro \
-v /usr/lib64/libdcmi.so:/usr/lib64/libdcmi.so:ro \
-v /usr/lib64/libmpi_dvpp_adapter.so:/usr/lib64/libmpi_dvpp_adapter.so:ro \
-v /usr/lib64/aicpu_kernels/:/usr/lib64/aicpu_kernels/:ro \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi:ro \
-v /dev:/dev \
-v /etc/localtime:/etc/localtime \
-v /usr/lib64/libstackcore.so:/usr/lib64/libstackcore.so:ro \
-v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64:ro \
-v /var/slogd:/var/slogd:ro \
-v /var/dmp_daemon:/var/dmp_daemon:ro \
-v /etc/slog.conf:/etc/slog.conf:ro \
-v /etc/ascend_install.info:/etc/ascend_install.info:ro \
-v /usr/lib64/libtensorflow.so:/usr/lib64/libtensorflow.so:ro \
-v /home/HwHiAiUser/data:/home/HwHiAiUser/data \
-d ascend-infer-310b:{tag}  \
/bin/bash

【这里有看到其他博主里面有yaml的so,但是在宿主机上没找到所以去掉了以下映射 -v /usr/lib64/libyaml-0.so.2:/usr/lib64/libyaml-0.so.2:ro \】 【另外有看到其他博主把最后的/bin/bash改成bash -c "/home/AscendWork/run.sh && sleep 8640000" 用sleep来防止容器停止的,没有尝试,觉得应该也没问题,有遇到容器里面npu-smi info还报错的我觉得可以尝试一下,当然,在dockerfile中把cmd直接改成这样效果应该也是一样的,这样创建容器倒是可以省一行】

【执行前尽量检查一下宿主文件是否都存在吧】

H1 最后进入容器确认一下

true

[/home/HwHiAiUser/data]这个地址是我python文件工作的目录,所以映射了一下,py文件在/home/HwHiAiUser/data/Project/Publish/CalProject/start.py,上述dockerfile中最后注释了workdir和cmd,放开以后在创建容器是去掉最后的/bin/bash,容器启动后就会直接开始执行python程序。 下面是案例下 docker logs --tail 100 -ft yolov5zs

true

本帖最后由 匿名用户2025/05/19 17:21:47 编辑

我要发帖子