AscendCL应用编译&运行问题案例
AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发深度神经网络推理应用的C语言API库,该API库中提供运行资源管理、内存管理等基础API。
本期就分享几个关于编译、运行AscendCL应用程序的典型问题案例,并给出原因分析及解决方法:
- 编译运行应用样例报错,提示找不到头文件
- 编译运行应用样例报错,提示找不到库文件
- 执行应用程序的权限不足导致AscendCL初始化报错
01 编译应用样例报错,提示找不到头文件
问题现象描述
编译Ascend Sample仓中的样例应用程序源码时,报错提示找不到头文件acl.h。
报错示例如下:
原因分析
编译应用源码依赖定义AscendCL接口的头文件,样例中的编译脚本是根据“{DDK_PATH}环境变量值/runtime/include/acl”目录查找编译依赖的头文件,当前报错提示找不到头文件,则可能是{DDK_PATH}环境变量配置不正确。
处理步骤
1、登录编译源码的环境,使用如下命令查看{DDK_PATH}环境变量的值。
回显信息示例如下:
若无回显信息,则环境变量未配置,跳转到第3步配置该环境变量。
2、根据第1步中获取到的{DDK_PATH}环境变量值,检查“{DDK_PATH}环境变量值/runtime/include/acl”路径以及该路径下的acl.h头文件是否存在。
检查路径是否存在时,可直接切换到该目录下看是否成功,命令示例如下:
若目录存在,可直接执行以下命令检查acl.h是否存在:
若路径或头文件不存在,则需跳转到第3步重新配置{DDK_PATH}环境变量
3、配置环境变量。
- 当开发环境与运行环境的操作系统架构相同时,配置示例如下所示:
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
- 当开发环境与运行环境的操作系统架构不同时,配置示例如下所示:
例如,当开发环境为X86架构、运行环境为AArch64架构时,则涉及交叉编译,需在开发环境上安装AArch64架构的软件包,将{DDK_PATH}环境变量的路径指向AArch64架构的软件包安装目录(如下所示),便于使用与运行环境架构相同的软件包中的头文件来编译代码。
注意:
- 您可以登录对应的环境,执行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)。
报错示例如下:
原因分析
编译应用源码依赖定义AscendCL接口的库文件,样例中的编译脚本会根据{NPU_HOST_LIB}环境变量指向的路径查找编译依赖的库文件,当前报错提示找不到库文件,则可能是{NPU_HOST_LIB}环境变量配置不正确。
处理步骤
1、登录编译源码的环境,使用如下命令查看{ NPU_HOST_LIB}环境变量的值。
回显信息示例如下:
2、根据第1步中获取到的{NPU_HOST_LIB}环境变量值,检查{NPU_HOST_LIB}环境变量指向的路径以及该路径下的libascendcl.so库文件是否存在。
检查路径是否存在时,可直接切换到该目录下看是否成功,命令示例如下:
若路径或头文件不存在,则需跳转到第3步重新配置{NPU_HOST_LIB}环境变量。
配置环境变量。
- 当开发环境与运行环境的操作系统架构相同时,配置示例如下所示:
- 当开发环境与运行环境的操作系统架构不同时,配置示例如下所示:
例如,当开发环境为X86架构、运行环境为AArch64架构时,则涉及交叉编译,需在开发环境上安装AArch64架构的软件包,将{DDK_PATH}环境变量的路径指向AArch64架构的软件包安装目录(如下所示),便于使用与运行环境架构相同的软件包中的头文件来编译代码。
注意:
- 您可以登录对应的环境,执行uname -a命令查询其操作系统的架构。
- 如果不清楚“Ascend-cann-toolkit”包的安装路径,也可以使用find -name "filename"命令,查找libascendcl.so文件所在的路径,再配置环境变量。
若找不到libascendcl.so文件,则需要重新安装“Ascend-cann-toolkit”包。
当环境上安装多个软件版本时,请根据实际情况选择版本,其中,latest目录默认指向最后安装的软件版本。
当同一个版本下有多个libascendcl.so文件时,是由于兼容旧版本的原因,其中部分文件是软链接,方便用户在旧版本下编译应用源码。
03 执行应用程序的权限不足导致AscendCL初始化报错
问题现象描述
用户进程报错并退出。
查看应用类日志,提示获取Device信息失败,最终导致AscendCL初始化失败,日志片段示例如下:
原因分析
可能存在以下原因:
- Device状态异常,未正常启动。
- 执行应用程序的用户权限不足,无法查询Device信息。
处理步骤
- 首先,确认Device是否正常启动。
- 以root用户登录安装Driver包的环境,执行以下命令查询其安装路径。
- 进入Driver安装路径,使用upgrade-tool工具查看下Device侧运行文件系统版本,如果能正常查询,则说明Device侧已经正常启动。
其次,检查运行应用程序的用户权限是否正确。
要求运行应用程序的用户,需与Driver运行用户在一个属组内。在“cat /etc/passwd”文件中,可查看用户属组,Driver的默认运行用户为HwHiAiUser。
修改用户属组的命令示例如下:
- 如果以上方法解决不了问题,则需要参考如下步骤将获取日志,并在modelzoo仓通过提Issue反馈给华为工程师。
- 登录到运行应用程序的环境,执行如下命令将日志级别设置为Debug。
- 重新运行应用程序。
- 从日志存放路径下获取应用类日志,存放日志的默认路径为“$HOME/ascend/log”。
使用msnpureport工具,获取指定Device上的Debug日志。
命令示例如下,其中deviceID需要设置为指定Device的ID:
04 更多介绍
[1]昇腾文档中心:https://www.hiascend.com/zh/document
[2]昇腾社区在线课程:https://www.hiascend.com/zh/edu/courses
[3]昇腾论坛:https://www.hiascend.com/forum
- 点赞
- 收藏
- 关注作者
评论(0)