程序执行出现libascendcl.so报错
配置项介绍
插件性能统计功能新增了MindX SDK的配置文件“${MX_SDK_HOME}/config/sdk.conf”。如图1所示,配置项注释中如果注明了“[dynamic config]”,说明这个配置项是动态可配置。(如果配置项的值小于最小值,则会设置成最小值。如果配置项的值大于最大值,则会设置成最大值。)配置项说明请参见表1。
须知
队列长度统计的时间间隔 * 队列长度统计次数需小于推理总时间,如未生成.queue日志,可通过降低时间间隔(ps_queue_size_interval_time)或统计次数(ps_queue_size_times)的方式进行调试。
图1 SDK配置文件示例

表1 配置项说明
| 配置项 | 说明 |
|---|---|
| enable_ps | 性能统计开关,默认为“false”。 |
| ps_log_dir | 性能统计日志目录,请在使用工具前配置到具体目录。 |
| ps_log_filename | 性能统计日志文件名。端到端日志文件会添加后缀.e2e。单插件、模型推理、后处理的日志文件会添加后缀.plugin。吞吐率日志文件会添加后缀.tpr。队列长度日志文件会添加后缀.queue。 |
| ps_max_log_size | 性能统计日志文件最大长度,日志文件大小超过这个值,将切换新的日志文件,单位MB,默认为100,取值范围为[1, 1024]。 |
| ps_queue_size_warn_percent | 队列长度告警值百分比。当队列当前长度达到了队列总长度的告警值,将会打印告警日志,默认为80,取值范围为[1, 100]。 |
| ps_interval_time | 性能统计时间间隔,端到端、单插件、模型推理、后处理的性能统计时间间隔,默认为60,取值范围为[1, 24*3600]。 |
| ps_queue_size_interval_time | 队列长度统计的时间间隔,默认为50,取值范围为[10, 1000]。 |
| ps_queue_size_times | 队列长度统计次数,默认为100,取值范围为[1, 1000]。 |
| malloc_max_data_size | 设置申请内存的上限字节数,默认为1GByte,最大可支持至4GByte。 |
父主题: 插件性能统计工具
使用步骤
-
开启性能统计开关,在“${MX_SDK_HOME}/config/sdk.conf”配置文件中,设置“enable_ps”为“true”,开启性能统计开关。
-
调整性能统计时间间隔,默认值为60秒,统计时间偏长,调整“ps_interval_time”为“6”,每隔6秒,进行一次性能统计。
-
Pipeline文件中,加入队列插件。如果pipeline中未使用队列插件,将不会统计队列长度。
图1 Pipeline文件添加队列插件

-
启动MindX SDK服务。
父主题: 插件性能统计工具
观测结果
-
观察性能统计日志文件的生成。
查看“ps_log_dir”配置项设置的目录下,是否生成插件性能统计日志。
当配置项ps_interval_time=6时,程序会在启动6秒后,生成端到端日志文件、单插件日志文件、吞吐率日志文件。
当配置项ps_queue_size_interval_time=50、ps_queue_size_times=100时,程序会在启动**50 × 100毫秒(即5秒)**后,生成队列长度日志文件。如下图:

表1 文件类型解释
文件名 文件类型 performance—statistics.log.e2e.20210329-183958.877032 端到端日志文件。 performance—statistics.log.plugin.20210329-183958.877905 单插件日志文件。 performance—statistics.log.queue.20210329-183957.893092 队列长度日志文件。 performance—statistics.log.tpr.20210329-183958.883263 吞吐率日志文件。 -
观察端到端日志文件。
以下为端到端日志文件的示例内容。
{"average":"45138","frequency":"3","maxTime":"73058","minTime":"30511","streamName":"classification+detection","totalTime":"135416","type":"e2e","updateTime":"2021-03-29 20:13:59.717927"}表2 日志参数解释
参数 介绍 average 端到端平均耗时。单位:微秒。 frequency 端到端统计次数。 maxTime 最大的一次端到端耗时。单位:微秒。 minTime 最小的一次端到端耗时。单位:微秒。 streamName pipeline中的“streamName”。 totalTime 端到端总耗时。单位:微秒。 type 统计类型,端到端类型为e2e。 updateTime 本次统计的当前时间。 -
观察单插件日志文件。
以下为单插件日志文件的示例内容。
{"average":"18546","elementName":"mxpi_modelinfer0","factory":"mxpi_modelinfer","frequency":"3","maxTime":"18608","minTime":"18493","streamName":"classification+detection","totalTime":"55638","type":"plugin","updateTime":"2021-03-29 20:13:59.720010"}表3 日志参数解释
参数 介绍 average 统计的单个插件平均耗时。单位:微秒。 elementName 插件元件名称。 factory 插件类型。 frequency 插件处理的推理次数。 maxTime 最大的一次耗时。单位:微秒。 minTime 最小的一次耗时。单位:微秒。 streamName pipeline中的“streamName”。 totalTime 单插件总耗时。单位:微秒。 type 统计类型,单插件统计类型为“plugin”,模型推理统计类型为“modelInference”,后处理统计类型为“postProcessor”。 updateTime 本次统计的当前时间。 -
观察吞吐率日志文件。
以下为吞吐率日志文件的示例内容。
{"streamName":"classification+detection","throughput":3,"throughputRate":0.5,"type":"throughputRate","updateTime":"2021-03-29 20:13:59.721819"}表4 日志参数解释
参数 介绍 streamName pipeline中的“streamName”。 throughput 吞吐量。 throughputRate 吞吐率。 type 统计类型,吞吐率统计类型为“throughputRate”。 updateTime 本次统计的当前时间。 -
观察队列长度日志文件。
以下为队列长度日志文件的示例内容。
队列长度的数据一直显示为0,即使在推理过程中,统计到的队列长度依然为0。说明在推理过程中,数据留在队列中的时间非常短,很快就被下游插件取走,导致统计队列长度时,获取到的队列长度为0。只有当推理过程中,出现阻塞现象,数据留在队列才会出现队列长度不为0的情况。
{"curSize":0,"elementName":"queue0","intervalTime":50000,"maxSize":0,"maxSizeBuffers":200,"recentSize":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"streamName":"classification+detection","type":"queueSize","updateTime":"2021-03-29 20:14:45.953312"}表5 日志参数解释
参数 介绍 curSize 当前的队列长度,即“recentSize”列表中的最后一个值。 elementName 插件元件名称。 intervalTime 统计间隔时间,即与配置项“ps_queue_size_interval_time”含义相同。 maxSize 统计的这段时间内,最大的队列长度,即“recentSize”列表中的最大值。 maxSizeBuffers 队列总长度。 recentSize 每隔“ps_queue_size_interval_time”毫秒,统计“ps_queue_size_times”次数的队列长度数据列表。 streamName pipeline中的“streamName”。 type 统计类型,队列长度统计类型为“queueSize”。 updateTime 本次统计的当前时间。
父主题: 插件性能统计工具
程序执行出现libascendcl.so报错
问题现象
程序在执行过程中出现如下报错:
error while loading shared libraries: libascendcl.so: cannot open shared object file: No such file or directory
原因分析
“LD_LIBRARY_PATH”环境变量中CANN环境变量路径未正确配置。
解决方案
请参考《CANN 软件安装指南》配置CANN环境变量。
父主题: FAQ
使用yum命令出现No module named 'dnf'报错
问题现象
在系统为CentOS或EulerOS时,使用yum命令出现以下错误:
Traceback (most recent call last):
File "/usr/bin/yum", line 57, in <module>
from dnf.cli import main
ModuleNotFoundError: No module named 'dnf'
解决方案
请删除“LD_LIBRARY_PATH”环境变量中的Python路径,使用系统的Python路径。
父主题: FAQ
使用yum命令出现No module named '_conf'错误
问题现象
在系统为CentOS或EulerOS时,使用yum命令出现以下错误:
ImportError: /lib64/libcurl.so.4: symbol SSLv3_client_method version OPENSSL_1_1_0 not defined in file libssl.so.1.1 with link time reference
ModuleNotFoundError: No module named '_conf'
解决方案
请删除“LD_LIBRARY_PATH”环境变量中的“${MX_SDK_HOME}/opensource/lib”,使用系统的“libssl.so”。
父主题: FAQ
执行命令查看版本号时,出现Permission denied报错
问题现象
使用以下命令查看版本号时:
./Ascend-mindxsdk-mxvision_{version}_linux-{arch}.run --version
出现类似如下的错误提示信息:
rm: cannot remove "xxx": Permission denied
原因分析
安装过其他未正确安装的软件包,该软件包在“/tmp”路径下留有缓存,影响到当前版本。
解决方案
可执行以下命令解决:
sudo rm -rf /tmp/mxVision
如果无sudo权限可执行:
chmod u+w -R /tmp/mxVision && rm -rf /tmp/mxVision
命令中的“/tmp/mxVision”请以实际情况自行替换。
父主题: FAQ
在线提单