跳到主要内容

工具介绍

工具介绍

单插件测试工具可以根据待测试插件的配置,自动添加Load与Dump数据,生成待测插件的pipeline文件,并对待测插件进行串流测试。

父主题: 单插件测试工具

工具使用

  1. 在“${MX_SDK_HOME}/toolkit/TestPlugin/config/config.py”文件中,配置待测插件属性,config文件大小限制为100M。

    "factory": "mxpi_pluginname", # 插件类型
    "plugin_name": "mxpi_pluginname0", # 插件名称
    "props": { # 插件属性
    "dataSource": "mxpi_parentName0",
    "resizeHeight": "416",
    "resizeWidth": "416"
    }
  2. 在“${MX_SDK_HOME}/toolkit/TestPlugin/config/config.py”文件“load”参数中,配置插件的数据输入文件。若插件为多输入,可以配置多个数据输入文件。

    数据输入文件中的内容必须是待测插件的输入数据。

    "load": [ # load插件的输入文件名,一个输入文件对应一个load插件
    "input/pluginname0.json"
    ]
  3. 在“${MX_SDK_HOME}/toolkit/TestPlugin/config/config.py”文件“dump”参数中,若插件为多输出,可以配置多个数据输出文件。

    "dump": [ # dump插件的输出文件名,一个输出文件对应一个dump插件
    "pluginname0-output.json"
    ]
  4. 运行单插件测试工具,生成待测插件的pipeline文件,并对待测插件进行串流测试。

    执行run.sh脚本,会在pipeline目录下生成待测插件的pipeline文件,并对待测插件进行串流测试,生成“dump”参数中配置的数据输出文件(其最终执行文件为main.py)。

    chmod +x run.sh && ./run.sh

父主题: 单插件测试工具

单插件测试样例

  1. 在“${MX_SDK_HOME}/toolkit/TestPlugin/config/config.py”配置文件中配置待测插件mxpi_imageresize的配置信息。配置信息如下:

    • 如果待测插件是多输入插件,“load”配置项可以配置多个输入文件。
    • 如果待测插件是多输出插件,“dump”配置项可以配置多个输出文件。
    PipelineConfig = {
    "stream_config": {
    "deviceId": "0"
    },
    "factory": "mxpi_imageresize", # 插件名称
    "props": { # 插件属性
    "dataSource": "mxpi_imagedecoder0",
    "resizeHeight": "416",
    "resizeWidth": "416"
    },
    "load": [ # load插件的输入文件名,一个输入文件对应一个load插件
    "input/imageresize0.json"
    ],
    "dump": [ # dump插件的输出文件名,一个输出文件对应一个dump插件
    "imageresize0-output.json"
    ]
    }
  2. 创建待测插件的数据输入文件“input/imageresize0.json”。

    {
    "buffer": {
    },
    "metaData": [{
    "key": "ExternalObjects",
    "protoDataType": "MxpiObjectList"
    },
    {
    "key": "ReservedFrameInfo",
    "protoDataType": "MxpiFrameInfo"
    },
    {
    "key": "ReservedVisionList",
    "content": "mxpi_imagedecoder0"
    },
    {
    "key": "mxpi_imagedecoder0",
    "content": "{\"visionVec\":[{\"visionInfo\":{\"format\":1,\"width\":512,\"height\":512,\"widthAligned\":512,\"heightAligned\":512},\"visionData\":{\"dataPtr\":\"17695267880960\",\"dataSize\":393216,\"memType\":\"MXPI_MEMORY_DVPP\"}}]}",
    "visionData": [{
    "dataPtr": "17695267880960", // dataPtr对应MxpiVisionData的dataPtr的地址
    "content": "vLu6ury9vr68vLy8" // 存在Device侧的图像数据,经过base64编码后的值
    }],
    "protoDataType": "MxpiVisionList"
    }]
    }
  3. 运行单插件测试工具,生成待测插件的pipeline文件,并对待测插件进行串流测试。命令如下:

    chmod +x run.sh && ./run.sh
  4. 检测单插件测试工具生成了pipeline文件。执行命令如下:

    cat pipeline/mxpi_imageresize0.pipeline
    {
    "TestPlugin": {
    "stream_config": {
    "deviceId": "0"
    },
    "mxpi_imageresize0": {
    "factory": "mxpi_imageresize",
    "next": [
    "mxpi_dumpdata0"
    ],
    "props": {
    "dataSource": "mxpi_imagedecoder0",
    "resizeHeight": "416",
    "resizeWidth": "416"
    }
    },
    "filesrc0": {
    "factory": "filesrc",
    "next": "mxpi_loaddata0",
    "props": {
    "location": "input/imageresize0.json",
    "blocksize": "40960000"
    }
    },
    "mxpi_loaddata0": {
    "factory": "mxpi_loaddata",
    "next": "mxpi_imageresize0:0"
    },
    "mxpi_dumpdata0": {
    "factory": "mxpi_dumpdata",
    "next": "fakesink0",
    "props": {
    "location": "imageresize0-output.json"
    }
    },
    "fakesink0": {
    "factory": "fakesink"
    }
    }
    }
  5. 检测单插件测试工具生成了待测插件的输出文件“imageresize0-output.json”。

  6. 检测串流结果,串流成功后,会显示如图1所示的成功日志。

    图1 成功日志

父主题: 单插件测试工具

工具介绍

插件信息收集工具用于快速搜集所有插件信息。

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

工具使用

  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

备注

须知

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

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

在线提单