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

这篇具有很好参考价值的文章主要介绍了实践分析丨AscendCL应用编译&运行案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文分享自华为云社区《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

 文章来源地址https://www.toymoban.com/news/detail-604578.html

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

 

到了这里,关于实践分析丨AscendCL应用编译&运行案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch的实践应用与案例

    ElasticSearch是一个开源的搜索和分析引擎,基于Lucene库开发。它可以实现实时搜索、文本分析、数据聚合等功能。ElasticSearch的核心特点是分布式、可扩展、高性能。它适用于各种场景,如电商、搜索引擎、日志分析等。 2.1 ElasticSearch的组件 ElasticSearch主要包括以下组件: - 集群

    2024年02月20日
    浏览(36)
  • IDEA项目实践——VUE介绍与案例分析

    IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring集成mybatis、spring当中的事务 IDEA项目实践——Spring当中的切面AOP IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——Spring框架简介,以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 文

    2024年02月11日
    浏览(44)
  • VLAN的划分以及ACL的使用实践案例分析

    需求: 某公司以前没有划分VLAN,用的一台Cisco 2918二层交换机,但是他们没有做任何配置,现在由于他们的有一部分计算机(192.168.1.0/24)配置比较差,当交换机发送一个广播包的时候就导致部分计算机假死机状态,于是他们买了一台Cisco 3560三层交换机想把192.168.1.0/24这个网

    2024年02月08日
    浏览(44)
  • 【用户案例】太美医疗基于Apache DolphinScheduler的应用实践

    大家好,我叫杨佳豪,来自于太美医疗。今天我为大家分享的是Apache DolphinScheduler在太美医疗的应用实践。今天的分享主要分为四个部分: 使用历程及选择理由 稳定性的改造 功能定制与自动化部署 运维巡检与优化 公司介绍 我们是一家专注于生命科学产业的运营平台公司,

    2024年04月15日
    浏览(36)
  • Weibull Distribution韦布尔分布的深入详述(3)分析案例建模实践

    前两个章节,我们对韦伯分布的分布函数,以及相关的曲线参数已经做了比较深入的了解,现在,我们结合统计的实际案例进行分析,这样有助于我们应用于工程实践和理解参数的最终意义。 本章我们针对实际的分析案例进行分析。 包括:真空吸尘器的生命周期、移动硬盘

    2024年02月12日
    浏览(47)
  • 数仓调优实践丨多次关联发散导致数据爆炸案例分析改写

    本文分享自华为云社区《GaussDB(DWS)性能调优:求字段全体值中大于本行值的最小值——多次关联发散导致数据爆炸案例分析改写》,作者: Zawami 。   语句中存在同一个表多次自关联,且均为发散关联,数据爆炸导致性能瓶颈。 从SQL中不难看出,物理表HOLIDAY_D使用WH_ID为关联

    2024年02月05日
    浏览(52)
  • idea运行main方法或Test避免编译整个应用的方法

    光标点到main函数里,右键-Modify Run COnfigurations-Modify options 或者单独在每个test里 右键-Modify Run COnfigurations-移除build File-New Project Settings-Run/Debug Configuration Tmepliates for New Project Test模块不build: 标注 1:Build Project,编译项目; 标注 2:Build Module,编译模块; 标注 3:Recomplie,重新编

    2024年02月09日
    浏览(38)
  • 人工智能在风险管理中的应用:最佳实践与案例

    风险管理是企业在面对不确定性和潜在损失的过程中采取的措施,以最小化风险对业务的影响。随着数据量的增加和计算能力的提高,人工智能(AI)技术在风险管理领域的应用逐渐成为主流。本文将从以下几个方面进行探讨: 背景介绍 核心概念与联系 核心算法原理和具体操作

    2024年02月22日
    浏览(56)
  • 云计算的应用实践分析:如何实现云计算的应用实践策略

    云计算是一种基于互联网的计算资源分配和共享模式,它可以让用户在不同地理位置和不同的计算设备上实现资源的共享和协同工作。云计算的核心思想是将计算资源、存储资源和网络资源等基础设施转化为服务,并通过网络提供给用户使用。 云计算的发展背景主要有以下几

    2024年04月17日
    浏览(31)
  • 【案例教程】FVCOM流域、海洋水环境数值模拟方法及实践技术应用

    近年来,随着人类活动产生营养负荷的增加,流域、海洋生态系统面临严重威胁。近岸水质数值模是近岸水环境保护的有效工具,已经应用于近岸水环境污染控制、水质规划管理中。FVCOM在近岸水环境模拟方面具有一定优势,如采用非结构化三角形网格易于拟合岸线和局部加

    2023年04月21日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包