gpt4 book ai didi

实践分析丨AscendCL应用编译&运行案例

转载 作者:我是一只小鸟 更新时间:2023-07-26 14:31:19 24 4
gpt4 key购买 nike

本文分享自华为云社区《 AscendCL应用编译&运行问题案例 》,作者: 昇腾CANN.

AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发深度神经网络推理应用的C语言API库,该API库中提供运行资源管理、内存管理等基础API.

本期就分享几个关于编译、运行AscendCL应用程序的典型问题案例,并给出原因分析及解决方法.

01 编译应用样例报错,提示找不到头文件

问题现象描述

编译 Ascend Sample仓 中的样例应用程序源码时,报错提示找不到头文件acl.h.

报错示例如下:

                          fatal error: acl/
                          
                            acl.h: No such file or directory

#include 
                          
                          
                            "
                          
                          
                            acl/acl.h
                          
                          
                            "
                          
                          

^~~~~~~~~~~
                          
                            

compilation terminated.

CMakeFiles
                          
                          /main.dir/build.make:
                          
                            62
                          
                          : recipe 
                          
                            for
                          
                           target 
                          
                            '
                          
                          
                            CMakeFiles/main.dir/main.cpp.o
                          
                          
                            '
                          
                          
                             failed

make[
                          
                          
                            2
                          
                          ]: *** [CMakeFiles/main.dir/main.cpp.o] Error 
                          
                            1
                          
                          
                            

CMakeFiles
                          
                          /Makefile2:
                          
                            67
                          
                          : recipe 
                          
                            for
                          
                           target 
                          
                            '
                          
                          
                            CMakeFiles/main.dir/all
                          
                          
                            '
                          
                          
                             failed

make[
                          
                          
                            1
                          
                          ]: *** [CMakeFiles/main.dir/all] Error 
                          
                            2
                          
                          
                            

Makefile:
                          
                          
                            129
                          
                          : recipe 
                          
                            for
                          
                           target 
                          
                            '
                          
                          
                            all
                          
                          
                            '
                          
                           failed
                        

原因分析

编译应用源码依赖定义AscendCL接口的头文件,样例中的编译脚本是根据“{DDK_PATH}环境变量值/runtime/include/acl”目录查找编译依赖的头文件,当前报错提示找不到头文件,则可能是{DDK_PATH}环境变量配置不正确.

处理步骤

1、登录编译源码的环境,使用如下命令查看{DDK_PATH}环境变量的值.

                          echo $DDK_PATH
                        

回显信息示例如下:

                          /home/HwHiAiUser/Ascend/ascend-toolkit/latest
                        

若无回显信息,则环境变量未配置,跳转到第3步配置该环境变量.

2、根据第1步中获取到的{DDK_PATH}环境变量值,检查“{DDK_PATH}环境变量值/runtime/include/acl”路径以及该路径下的acl.h头文件是否存在.

检查路径是否存在时,可直接切换到该目录下看是否成功,命令示例如下:

                          cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/runtime/include/acl
                        

若目录存在,可直接执行以下命令检查acl.h是否存在:

                          ll acl.h
                        

若路径或头文件不存在,则需跳转到第3步重新配置{DDK_PATH}环境变量 。

3、配置环境变量.

  • 当开发环境与运行环境的操作系统架构相同时,配置示例如下所示:
                          export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
                        
  • 当开发环境与运行环境的操作系统架构不同时,配置示例如下所示:

例如,当开发环境为X86架构、运行环境为AArch64架构时,则涉及交叉编译,需在开发环境上安装AArch64架构的软件包,将{DDK_PATH}环境变量的路径指向AArch64架构的软件包安装目录(如下所示),便于使用与运行环境架构相同的软件包中的头文件来编译代码.

                          export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest/arm64-linux
                        

​​​​​注意:

  • 您可以登录对应的环境,执行uname -a命令查询其操作系统的架构。
  • 如果不清楚“Ascend-cann-toolkit”包的安装路径,也可以使用find -name "filename"命令,查找acl.h文件所在的路径,再配置环境变量。

若找不到acl.h文件,则需要重新安装“Ascend-cann-toolkit”包.

当环境上安装多个软件版本时,请根据实际情况选择版本,其中,latest目录默认指向最后安装的软件版本.

当同一个版本下有多个acl.h文件时,是由于兼容旧版本的原因,其中部分文件是软链接,方便用户在旧版本下编译应用源码.

02 编译应用样例报错,提示找不到库文件

问题现象描述

编译 Ascend Sample仓 中的样例应用程序源码时,报错提示找不到库文件libascendcl.so(报错中的-lascendcl,-l表示查找库文件,ascendcl前后分别加上lib和.so组成库文件的名称libascendcl.so).

报错示例如下:

                          /usr/bin/ld: cannot find -
                          
                            lascendcl

collect2: error: ld returned 
                          
                          
                            1
                          
                          
                             exit status

CMakeFiles
                          
                          /main.dir/build.make:
                          
                            94
                          
                          : recipe 
                          
                            for
                          
                           target 
                          
                            '
                          
                          
                            /home/HwHiAiUser/sample/resnet50_firstapp/out/main
                          
                          
                            '
                          
                          
                             failed

make[
                          
                          
                            2
                          
                          ]: *** [/home/HwHiAiUser/sample/resnet50_firstapp/
                          
                            out
                          
                          /main] Error 
                          
                            1
                          
                          
                            

CMakeFiles
                          
                          /Makefile2:
                          
                            67
                          
                          : recipe 
                          
                            for
                          
                           target 
                          
                            '
                          
                          
                            CMakeFiles/main.dir/all
                          
                          
                            '
                          
                          
                             failed

make[
                          
                          
                            1
                          
                          ]: *** [CMakeFiles/main.dir/all] Error 
                          
                            2
                          
                          
                            

Makefile:
                          
                          
                            129
                          
                          : recipe 
                          
                            for
                          
                           target 
                          
                            '
                          
                          
                            all
                          
                          
                            '
                          
                           failed
                        

原因分析

编译应用源码依赖定义AscendCL接口的库文件,样例中的编译脚本会根据{NPU_HOST_LIB}环境变量指向的路径查找编译依赖的库文件,当前报错提示找不到库文件,则可能是{NPU_HOST_LIB}环境变量配置不正确.

处理步骤

1、登录编译源码的环境,使用如下命令查看{ NPU_HOST_LIB}环境变量的值.

                          echo $NPU_HOST_LIB
                        

回显信息示例如下:

                          /home/HwHiAiUser/Ascend/ascend-toolkit/latest/runtime/lib64/stub
                        

若无回显信息,则环境变量未配置,跳转到第3步配置该环境变量.

2、根据第1步中获取到的{NPU_HOST_LIB}环境变量值,检查{NPU_HOST_LIB}环境变量指向的路径以及该路径下的libascendcl.so库文件是否存在.

检查路径是否存在时,可直接切换到该目录下看是否成功,命令示例如下:

                          cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/runtime/lib64/stub
                        

若目录存在,可直接执行以下命令检查libascendcl.so是否存在:

                          ll libascendcl.so
                        

若路径或头文件不存在,则需跳转到第3步重新配置{NPU_HOST_LIB}环境变量.

  1. 配置环境变量。
  • 当开发环境与运行环境的操作系统架构相同时,配置示例如下所示:
                          export NPU_HOST_LIB=$HOME/Ascend/ascend-toolkit/latest/runtime/lib64/stub
                        
  • 当开发环境与运行环境的操作系统架构不同时,配置示例如下所示:

例如,当开发环境为X86架构、运行环境为AArch64架构时,则涉及交叉编译,需在开发环境上安装AArch64架构的软件包,将{DDK_PATH}环境变量的路径指向AArch64架构的软件包安装目录(如下所示),便于使用与运行环境架构相同的软件包中的头文件来编译代码.

                          export NPU_HOST_LIB=$HOME/Ascend/ascend-toolkit/latest/ arm64-linux/runtime/lib64/stub
                        

​​​​​注意:

  • 您可以登录对应的环境,执行uname -a命令查询其操作系统的架构。
  • 如果不清楚“Ascend-cann-toolkit”包的安装路径,也可以使用find -name "filename"命令,查找libascendcl.so文件所在的路径,再配置环境变量。

若找不到libascendcl.so文件,则需要重新安装“Ascend-cann-toolkit”包.

当环境上安装多个软件版本时,请根据实际情况选择版本,其中,latest目录默认指向最后安装的软件版本.

当同一个版本下有多个libascendcl.so文件时,是由于兼容旧版本的原因,其中部分文件是软链接,方便用户在旧版本下编译应用源码.

03 执行应用程序的权限不足导致AscendCL初始化报错

问题现象描述

用户进程报错并退出.

查看应用类日志,提示获取Device信息失败,最终导致AscendCL初始化失败,日志片段示例如下:

                          [ERROR] RUNTIME(
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            635
                          
                           [runtime.cc:
                          
                            1065
                          
                          ]
                          
                            89696
                          
                           CheckHaveDevice:[INIT][DEFAULT]Call halGetDeviceInfo failed: drvRet=
                          
                            4
                          
                          , module type=
                          
                            0
                          
                          , info type=
                          
                            1
                          
                          
                            .

[ERROR] ASCENDCL(
                          
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            723
                          
                           [acl.cpp:
                          
                            164
                          
                          ]
                          
                            89696
                          
                           aclInit: [INIT][DEFAULT][Init][Version]init soc version failed, ret = 
                          
                            507008
                          
                          
                            

[ERROR] RUNTIME(
                          
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            774
                          
                           [api_impl.cc:
                          
                            3490
                          
                          ]
                          
                            89696
                          
                           GetDevErrMsg:report error module_type=
                          
                            3
                          
                          , module_name=
                          
                            EE8888

[ERROR] RUNTIME(
                          
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            798
                          
                           [api_impl.cc:
                          
                            3490
                          
                          ]
                          
                            89696
                          
                           GetDevErrMsg:ctx 
                          
                            is
                          
                           NULL!
                          
                            

[ERROR] RUNTIME(
                          
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            827
                          
                           [api_impl.cc:
                          
                            3546
                          
                          ]
                          
                            89696
                          
                           GetDevMsg:Failed to GetDeviceErrMsg, retCode=
                          
                            0x7070001
                          
                          
                            .

[ERROR] RUNTIME(
                          
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            849
                          
                           [logger.cc:
                          
                            1348
                          
                          ]
                          
                            89696
                          
                           GetDevMsg:GetDeviceMsg failed, getMsgType=
                          
                            0
                          
                          
                            .

[ERROR] RUNTIME(
                          
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            888
                          
                           [api_c.cc:
                          
                            3595
                          
                          ]
                          
                            89696
                          
                           rtGetDevMsg:ErrCode=
                          
                            107002
                          
                          , desc=[context pointer 
                          
                            null
                          
                          ], InnerCode=
                          
                            0x7070001
                          
                          
                            

[ERROR] RUNTIME(
                          
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            910
                          
                           [error_message_manage.cc:
                          
                            49
                          
                          ]
                          
                            89696
                          
                           FuncErrorReason:report error module_type=
                          
                            3
                          
                          , module_name=
                          
                            EE8888

[ERROR] RUNTIME(
                          
                          
                            89696
                          
                          ,main):
                          
                            2023
                          
                          -
                          
                            03
                          
                          -
                          
                            07
                          
                          -
                          
                            17
                          
                          :
                          
                            13
                          
                          :
                          
                            27.994
                          
                          .
                          
                            932
                          
                           [error_message_manage.cc:
                          
                            49
                          
                          ]
                          
                            89696
                          
                           FuncErrorReason:rtGetDevMsg execute failed, reason=[context pointer 
                          
                            null
                          
                          
                            ]

EL0003: The argument 
                          
                          
                            is
                          
                          
                             invalid.

Solution: Try again with a valid argument.

TraceBack (most recent call last):

[Init][Version]init soc version failed, ret 
                          
                          = 
                          
                            507008
                          
                          [FUNC:ReportInnerError][FILE:log_inner.cpp][LINE:
                          
                            145
                          
                          
                            ]

ctx 
                          
                          
                            is
                          
                           NULL![FUNC:GetDevErrMsg][FILE:api_impl.cc][LINE:
                          
                            3490
                          
                          
                            ]

rtGetDevMsg execute failed, reason
                          
                          =[context pointer 
                          
                            null
                          
                          ][FUNC:FuncErrorReason][FILE:error_message_manage.cc][LINE:
                          
                            49
                          
                          
                            ]



[ERROR] acl init failed

[ERROR] Sample init resource failed
                          
                        

原因分析

可能存在以下原因:

  • Device状态异常,未正常启动。
  • 执行应用程序的用户权限不足,无法查询Device信息。

处理步骤

1.先首,确认Device是否正常启动.

  • 以root用户登录安装Driver包的环境,执行以下命令查询其安装路径。
                          cat /etc/ascend_install.info
                        

在该文件中,Driver_Install_Path_Param表示Driver包的安装路径.

  • 进入Driver安装路径,使用upgrade-tool工具查看下Device侧运行文件系统版本,如果能正常查询,则说明Device侧已经正常启动。
                          ./upgrade-tool --device_index -
                          
                            1
                          
                           --system_version
                        

正常查询返回信息类似如下:

​​​​​​ 。

2.其次,检查运行应用程序的用户权限是否正确.

要求运行应用程序的用户,需与Driver运行用户在一个属组内。在“cat /etc/passwd”文件中,可查看用户属组,Driver的默认运行用户为HwHiAiUser.

修改用户属组的命令示例如下:

                          ./upgrad usermod -g 组名 用户名
                        

3.如果以上方法解决不了问题,则需要参考如下步骤将获取日志,并在 modelzoo仓 通过提Issue反馈给华为工程师.

  1. 登录到运行应用程序的环境,执行如下命令将日志级别设置为Debug。
                          export ASCEND_GLOBAL_LOG_LEVEL=
                          
                            0
                          
                        
  1. 重新运行应用程序。
  2. 从日志存放路径下获取应用类日志,存放日志的默认路径为“$HOME/ascend/log”。
  3. 使用msnpureport工具,获取指定Device上的Debug日志。

命令示例如下,其中deviceID需要设置为指定Device的ID:

                          msnpureport -g debug -d deviceID
                        

04 更多介绍

[1]昇腾文档中心: https://www.hiascend.com/zh/document 。

[2]昇腾社区在线课程: https://www.hiascend.com/zh/edu/courses 。

[3]昇腾论坛: https://www.hiascend.com/forum 。

  。

点击关注,第一时间了解华为云新鲜技术~ 。

  。

最后此篇关于实践分析丨AscendCL应用编译&运行案例的文章就讲到这里了,如果你想了解更多关于实践分析丨AscendCL应用编译&运行案例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com