Skip to main content

配置项介绍

工具使用

  1. 设置程序所需环境变量。

    . ${MX_SDK_HOME}/set_env.sh
  2. 执行程序。

    进入到执行程序所在“bin”目录,执行如下命令。

    ./InspectAllPlugins
  3. 获取结果。

    程序输出结果保存在“AllPluginsInfo.json”文件。

父主题: 插件信息搜集工具

工具介绍

插件性能统计工具,可以快速测试分析MindX SDK的推理性能(所有性能统计数据涉及的时间单位都是微秒)。性能统计指标请见表1

图1 MindX SDK推理简易流程图

表1 性能统计指标

性能介绍
端到端耗时从appsrc输入插件的srcpad输出数据(t1时刻)开始计时统计,到appsink输出插件的sinkpad接收数据(t4时刻)结束计时统计。 端到端耗时 = 结束时间(t4) - 开始时间(t1)
单插件耗时统计单个插件(只涉及SDK开发的插件,即插件名以mxpi_开头,不包含Gstreamer插件)的耗时。 如mxpi_modelinfer插件的耗时,从这个插件sinkpad(t2时刻)开始计时,到这个插件srcpad(t3时刻)结束计时。 单插件耗时 = 结束时间(t3) - 开始时间(t2)
模型推理耗时模型推理只在模型插件中存在,因此在模型推理插件内部会统计模型推理耗时。
后处理耗时后处理只在modelinfer框架模型推理插件中存在,因此在modelinfer框架模型推理插件内部会统计后处理耗时。
吞吐率appsink输出插件每次从sinkpad接收一次数据,做一次统计。
队列长度每隔“ps_queue_size_interval_time”时间,获取一次队列的当前长度,获取“ps_queue_size_times”次数后,做一次队列长度的统计。

父主题: 插件性能统计工具

配置项介绍

插件性能统计功能新增了MindX SDK的配置文件“${MX_SDK_HOME}/config/sdk.conf”。如图1所示,配置项注释中如果注明了“[dynamic config]”,说明这个配置项是动态可配置。(如果配置项的值小于最小值,则会设置成最小值。如果配置项的值大于最大值,则会设置成最大值。)配置项说明请参见表1

note

须知

队列长度统计的时间间隔 * 队列长度统计次数需小于推理总时间,如未生成.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。

父主题: 插件性能统计工具

使用步骤

  1. 开启性能统计开关,在“${MX_SDK_HOME}/config/sdk.conf”配置文件中,设置“enable_ps”为“true”,开启性能统计开关。

  2. 调整性能统计时间间隔,默认值为60秒,统计时间偏长,调整“ps_interval_time”为“6”,每隔6秒,进行一次性能统计。

  3. Pipeline文件中,加入队列插件。如果pipeline中未使用队列插件,将不会统计队列长度。

    图1 Pipeline文件添加队列插件

  4. 启动MindX SDK服务。

父主题: 插件性能统计工具

观测结果

  1. 观察性能统计日志文件的生成。

    查看“ps_log_dir”配置项设置的目录下,是否生成插件性能统计日志。

    当配置项ps_interval_time=6时,程序会在启动6秒后,生成端到端日志文件、单插件日志文件、吞吐率日志文件。

    当配置项ps_queue_size_interval_time=50ps_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吞吐率日志文件。
  2. 观察端到端日志文件。

    以下为端到端日志文件的示例内容。

    {"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最小的一次端到端耗时。单位:微秒。
    streamNamepipeline中的“streamName”。
    totalTime端到端总耗时。单位:微秒。
    type统计类型,端到端类型为e2e。
    updateTime本次统计的当前时间。
  3. 观察单插件日志文件。

    以下为单插件日志文件的示例内容。

    {"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最小的一次耗时。单位:微秒。
    streamNamepipeline中的“streamName”。
    totalTime单插件总耗时。单位:微秒。
    type统计类型,单插件统计类型为“plugin”,模型推理统计类型为“modelInference”,后处理统计类型为“postProcessor”。
    updateTime本次统计的当前时间。
  4. 观察吞吐率日志文件。

    以下为吞吐率日志文件的示例内容。

    {"streamName":"classification+detection","throughput":3,"throughputRate":0.5,"type":"throughputRate","updateTime":"2021-03-29 20:13:59.721819"}

    表4 日志参数解释

    参数介绍
    streamNamepipeline中的“streamName”。
    throughput吞吐量。
    throughputRate吞吐率。
    type统计类型,吞吐率统计类型为“throughputRate”。
    updateTime本次统计的当前时间。
  5. 观察队列长度日志文件。

    以下为队列长度日志文件的示例内容。

    队列长度的数据一直显示为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”次数的队列长度数据列表。
    streamNamepipeline中的“streamName”。
    type统计类型,队列长度统计类型为“queueSize”。
    updateTime本次统计的当前时间。

父主题: 插件性能统计工具

在线提单