AES200 容器内推理测试

8 篇文章 1 订阅
5 篇文章 0 订阅

AES200 容器内推理测试

前提条件


  1. 宿主机已经安装过Driver和Firmware,本文基于以下驱动和固件测试
软件包配套操作系统版本架构说明
Ascend-hdk-310p-npu-driver-soc_6.0.rc1_linux-aarch64.runOpenEuler 20.03ArmAtlas 200I SoC A1昇腾NPU驱动包(run格式),可以直接在OpenEuler命令行升级
Ascend-hdk-310p-npu-firmware-soc_6.0.rc1.runOpenEuler 20.03ArmAtlas 200I SoC A1昇腾固件安装包(run格式),可以直接在OpenEuler命令行升级
Ascend-hdk-310p-npu-firmware-soc_6.0.rc1.hpmOpenEuler 20.03ArmAtlas 200I SoC A1昇腾固件安装包(hpm格式),可以通过BMC来升级固件
Atlas-200i-soc-a1-mcu_3.3.4.zip--MCU固件zip包(内含MCU固件hpm包),可以通过BMC来升级MCU固件

详情请参见华为的官方文档:安装驱动安装固件

  1. 需用户在宿主机自行安装docker。

    yum install docker
    
  2. 重启服务与容器,命令为:

    systemctl daemon-reload
    systemctl restart docker
    
  3. 访问官方推理镜像网站

    image-20221227094753088

    点击获取镜像,注册华为用户,如果有则直接登录。

    选择22.0.RC3-mxvision镜像版本,并点击下载,将弹出以下窗口,根据窗口中说明的步骤,下载推理镜像。

    1. 查看镜像,命令为:

      [root@localhost ~]# docker images
      REPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZE
      ascendhub.huawei.com/public-ascendhub/infer-modelzoo   22.0.RC3-mxvision   3933143d0eea        3 weeks ago         6.2GB
      

操作步骤


  1. 在宿主机执行以下命令查看宿主机HwHiAiUser、HwDmUser、HwBaseUser用户的gid和uid,并记录该gid和uid的取值,如下图所示。

    id HwHiAiUser
    id HwDmUser
    id HwBaseUser
    

    如果用户安装Driver包时使用**–install-username=username** –install-usergroup=usergroup参数指定了其他非root用户,则需要使用同样的方法记录此非root用户的gid和uid,容器内创建非root用户时,需要使用该gid和uid,确保宿主机和容器内相关进程的非root用户同属组。

    查看宿主机HwHiAiUser、HwDmUser、HwBaseUser的gid和uid

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mOcfxtgQ-1672109167880)(https://download.huawei.com/mdl/image/download?uuid=d3e28f04a2a541098116f6b19d3da203)]

  2. 在宿主机创建并启动容器。

    docker run -it --rm -u root \
    	--device=/dev/davinci0 \
    	--device=/dev/xsmem_dev \
    	--device=/dev/event_sched \
    	--device=/dev/svm0 \
    	--device=/dev/sys \
    	--device=/dev/vdec \
    	--device=/dev/venc \
    	--device=/dev/vpc \
    	--device=/dev/davinci_manager \
    	--device=/dev/spi_smbus \
    	--device=/dev/upgrade \
    	--device=/dev/user_config \
    	--device=/dev/ts_aisle \
    	--device=/dev/memory_bandwidth \
    	-v /etc/sys_version.conf:/etc/sys_version.conf:ro \
    	-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro \
    	-v /usr/local/bin/aes200_container_prepare.sh:/usr/local/bin/aes200_container_prepare.sh:ro \
    	-v /var/dmp_daemon:/var/dmp_daemon:ro \
    	-v /var/slogd:/var/slogd:ro \
    	-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf:ro \
    	-v /etc/hdcBasic.cfg:/etc/hdcBasic.cfg:ro \
    	-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
    	-v /sys/fs/cgroup/memory:/sys/fs/cgroup/memory:ro \
    	-v /etc/ascend_install.info:/etc/ascend_install.info \
    	-v /usr/local/Ascend/ascend-toolkit:/usr/local/Ascend/ascend-toolkit \
    	-v /usr/lib64/aicpu_kernels:/usr/lib64/aicpu_kernels \
    	-v /usr/lib64/libtensorflow.so:/usr/lib64/libtensorflow.so:ro \
    	-v /home/HwHiAiUser:/home/HwHiAiUser \
    ascendhub.huawei.com/public-ascendhub/infer-modelzoo:22.0.RC3-mxvision /bin/bash -c "/usr/local/bin/aes200_container_prepare.sh; /bin/bash"
    

    其中:

    /usr/local/Ascend/driver: 为驱动的安装目录,需要映射到容器中
    /usr/local/Ascend/ascend-toolkit: CANN toolkit的安装目录需要映射到容器中,如果客户安装的是nnrt运行环境,则替换为nnrt的安装目录
    /home/HwHiAiUser: 此处我为了方便,直接把我的宿主机的HwHiAiUser的Home目录直接映射到了容器,主要是HwHiAiUser目录中有环境变量的配置和从http://www.gitee.com/ascend/samples下载的官方测试代码
    

    这里重点介绍一下容器初始化步骤,每次容器启动时,需要对容器进行初始化,我用aes200_container_prepare.sh来完成以下相应的初始化操作。

    a. 在容器内创建相关目录。

    mkdir -m 750 /var/driver -m 750 /var/dmp -m 750 /usr/slog
    mkdir -m 755 /home/drv 
    mkdir -m 750 /home/drv/hdc_ppc -m 750 /var/log/npu/slog
    

    b. 设置环境变量,用于在容器中加载驱动so:

    export LD\_LIBRARY\_PATH=/usr/local/Ascend/driver/lib64:${LD\_LIBRARY\_PATH}
    

    其中“/usr/local/Ascend”为默认安装路径,请根据实际情况修改。通过export方式设置环境变量,设置完成后立即生效,只在当前终端使用。

    c. 在容器内创建HwHiAiUser、HwDmUser、HwBaseUser用户及属组。

    groupadd -g _gid_ HwHiAiUser && useradd -u _uid_ -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && echo ok
    groupadd -g _gid_ HwDmUser && useradd -u _uid_ -g HwDmUser -d /home/HwDmUser -m HwDmUser && echo ok
    groupadd -g _gid_ HwBaseUser && useradd -u _uid_ -g HwBaseUser -d /home/HwBaseUser -m HwBaseUser && echo ok
    

    请将上述命令中的gid和uid替换为步骤1中查出的gid和uid值。若返回“ok”,则说明创建成功。

    如果用户创建了其他非root用户,请确保该用户所属的属组必须和Driver运行用户所属属组相同;如果不同,请用户自行添加到Driver运行用户属组。

    d. 配置HwHiAiUser、HwDmUser、HwBaseUser用户的相关属组信息。

    usermod -a -G HwBaseUser HwHiAiUser 
    usermod -a -G HwDmUser HwHiAiUser  
    usermod -a -G HwBaseUser HwDmUser 
    usermod -a -G HwHiAiUser HwDmUser
    

    e. 配置“/var/dmp ”、“/var/driver ”、“/usr/slog”目录属组信息。

    chown HwDmUser:HwDmUser /var/dmp 
    chown HwHiAiUser:HwHiAiUser /var/driver 
    chown HwHiAiUser:HwHiAiUser /usr/slog
    chown HwHiAiUser:HwHiAiUser /home/drv/hdc_ppc
    chown HwHiAiUser:HwHiAiUser /var/log/npu/slog
    

    f. 启动slogd与dmp_daemon进程。

    su - HwHiAiUser -c "export LD\_LIBRARY\_PATH=/usr/local/Ascend/driver/lib64/ && /var/slogd >/dev/null &"
    su - HwDmUser -c "export LD\_LIBRARY\_PATH=/usr/local/Ascend/driver/lib64/ && /var/dmp_daemon -I -M -U 8087 &"
    

    所以aes200_container_prepare.sh脚本内容如下:

    #!/bin/bash
    mkdir -m 750 /var/driver -m 750 /var/dmp -m 750 /usr/slog
    mkdir -m 755 /home/drv
    mkdir -m 750 /home/drv/hdc_ppc -m 750 /var/log/npu/slog
    export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64:${LD_LIBRARY_PATH}
    groupadd -g 1000 HwHiAiUser && useradd -u 1000 -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && echo ok
    groupadd -g 1002 HwDmUser && useradd -u 1002 -g HwDmUser -d /home/HwDmUser -m HwDmUser && echo ok
    groupadd -g 1003 HwBaseUser && useradd -u 1003 -g HwBaseUser -d /home/HwBaseUser -m HwBaseUser && echo ok
    usermod -a -G HwBaseUser HwHiAiUser
    usermod -a -G HwDmUser HwHiAiUser
    usermod -a -G HwBaseUser HwDmUser
    usermod -a -G HwHiAiUser HwDmUser
    chown HwDmUser:HwDmUser /var/dmp
    chown HwHiAiUser:HwHiAiUser /var/driver
    chown HwHiAiUser:HwHiAiUser /usr/slog
    chown HwHiAiUser:HwHiAiUser /home/drv/hdc_ppc
    chown HwHiAiUser:HwHiAiUser /var/log/npu/slog
    su - HwHiAiUser -c "export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/ && /var/slogd >/dev/null &"
    su - HwDmUser -c "export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/ && /var/dmp_daemon -I -M -U 8087 &"
    

    将脚本存放到/usr/local/bin/目录下,并将脚本aes200_container_prepare.sh映射到容器中,容器启动时调用此脚本完成初始化操作。

验证

  1. 准备推理测试程序

    [HwHiAiUser@localhost ~]$ git clone https://gitee.com/ascend/samples.git
    [HwHiAiUser@localhost ~]$ cd samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
    

    根据resnet50_imagenet_classification中的readme文件,下载模型文件、转换模型、下载测试文件,编译程序,并在宿主机上测试推理代码,保证测试代码能在宿主机上成功执行。

  2. 启动容器

    docker_run.sh
    

    注意需要修改你的容器启动脚本,将你的推理测试代码目录映射到容器中

  3. 运行npu-smi info 查看npu信息

    root@68354f94195d:/home/hwMindX# npu-smi info
    +--------------------------------------------------------------------------------------------------------+
    | npu-smi 22.0.3                                   Version: 22.0.3.130                                   |
    +-------------------------------+-----------------+------------------------------------------------------+
    | NPU     Name                  | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
    | Chip    Device                | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
    +===============================+=================+======================================================+
    | 0       310P1                 | OK              | NA           27                0    / 0              |
    | 0       0                     | NA              | 0            12233/ 43195                            |
    +===============================+=================+======================================================+
    
  4. 测试推理代码

    在容器中执行推理程序

    HwHiAiUser@eea18d81ae6a:~/samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification/out$ ./main
    [INFO]  acl init success
    [INFO]  set device 0 success
    [INFO]  create context success
    [INFO]  create stream success
    [INFO]  get run mode success
    [INFO]  load model ../model/resnet50.om success
    [INFO]  create model description success
    [INFO]  create model input success
    [INFO]  create model output success
    [INFO]  start to process file:../data/dog1_1024_683.bin
    [INFO]  model execute success
    [INFO]  top 1: index[161] value[0.764648]
    [INFO]  top 2: index[162] value[0.156616]
    [INFO]  top 3: index[167] value[0.038971]
    [INFO]  top 4: index[163] value[0.021698]
    [INFO]  top 5: index[166] value[0.011887]
    [INFO]  output data success
    [INFO]  start to process file:../data/dog2_1024_683.bin
    [INFO]  model execute success
    [INFO]  top 1: index[267] value[0.935059]
    [INFO]  top 2: index[266] value[0.041412]
    [INFO]  top 3: index[265] value[0.019104]
    [INFO]  top 4: index[219] value[0.002884]
    [INFO]  top 5: index[160] value[0.000311]
    [INFO]  output data success
    [INFO]  destroy model input success
    [INFO]  destroy model output success
    [INFO]  unload model success, modelId is 1
    [INFO]  destroy model description success
    [INFO]  execute sample success
    [INFO]  end to destroy stream
    [INFO]  end to destroy context
    [INFO]  end to reset device 0
    [INFO]  end to finalize acl
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值