msprof解析工具
简介
msprof命令行工具是通过msprof.py封装的,支持性能数据的通用解析。
工具使用流程
- 自动解析:一般情况下,在执行msprof命令行采集性能数据时,默认即解析并导出性能数据文件。
- 离线解析:
使用前准备
环境准备
-
安装配套版本的CANN Toolkit开发套件包和ops算子包并配置CANN环境变量,具体请参见CANN快速安装。
Ascend EP场景下msprof工具路径为:
${INSTALL_DIR}/tools/profiler/bin,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。若安装的Toolkit软件包,以root安装举例,则安装后文件存储路径为:/usr/local/Ascend/cann。Ascend RC场景下msprof工具路径为:/var。
-
设置Python相关环境变量。
存在多个Python3版本时,以指定python3.7.5为例,请根据实际修改。
export PATH=/usr/local/python3.7.5/bin:$PATH #设置python3.7.5库文件路径 export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
Note
上述环境变量只在当前窗口生效,用户可以将上述命令写入~/.bashrc文件,使其永久生效,操作如下:
- 以安装用户在任意目录下执行
vi ~/.bashrc,在该文件最后添加上述内容。 - 执行
:wq!命令保存文件并退出。 - 执行
source ~/.bashrc使环境变量生效。
约束
使用该工具前,请了解相关使用约束:
-
权限约束
- 用户须自行保证使用最小权限原则(如禁止other用户拥有写权限,常见如禁止666、777)。
- 使用性能分析工具前请确保执行用户的umask值大于等于0027,否则会导致获取的性能数据所在目录和文件权限过大。
- 出于安全性及权限最小化角度考虑,本工具不应使用root等高权限账户,建议使用普通用户权限执行。
- 本工具为开发调测工具,不建议在生产环境使用。
- 请确保性能数据保存在不含软链接的当前用户目录下,否则可能引起安全问题。
-
数据落盘约束
解析性能数据过程中如果配置的落盘路径磁盘或用户目录空间已满,会出现解析失败或文件无法落盘的情况,须自行清理磁盘或用户目录空间。
-
兼容性和场景约束
工具要求Python 3.7.5及以上版本。
-
其他约束
本工具中需要指定路径的参数,要求路径中不能包含如下特殊字符。
"\n", "\\n", "\f", "\\f", "\r", "\\r", "\b", "\\b", "\t", "\\t", "\v", "\\v", "\u007F", "\\u007F", "\"", "\\\"", "'", "\'", "\\", "\\\\", "%", "\\%", ">", "\\>", "<", "\\<", "|", "\\|", "&", "\\&", "$", "\\$", ";", "\\;", "`", "\\`"
解析并导出性能数据
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
功能说明
本功能用于解析并导出性能数据。
注意事项
- 请先完成使用前准备。
- 请先完成性能数据采集。
- Atlas 200I/500 A2 推理产品的Ascend RC场景不支持在设备上直接解析,需要将采集到的PROF_XXX目录拷贝到安装了Toolkit软件包的环境下进行解析。
命令格式
msprof --export=on --output=<dir> [--type=<type>] [--reports=<reports_sample_config.json>] [--model-id=<number>] [--iteration-id=<number>] [--summary-format=<csv/json>] [--python-path=<python_path>] [--clear=on]
参数说明
| 参数 | 可选/必选 | 说明 |
|---|---|---|
| --export | 必选 | 解析并导出性能数据。可选on或off,默认值为off。 • on:表示开启 • off:表示关闭 若需导出个别模型(Model ID)/迭代(Iteration ID)的数据,可在msprof采集命令执行完成后重新执行msprof --export命令配置--model-id、--iteration-id参数。 对于未解析的PROF_XXX文件,自动解析后再导出。 示例:msprof --export=on --output=/home/profiler_data/PROF_XXX |
| --output | 必选 | 性能数据文件目录。须指定为PROF_XXX目录或PROF_XXX目录的父目录,例如:/home/profiler_data/PROF_XXX。 |
| --type | 可选 | 设置性能数据导出结果文件格式,即可以选择msprof命令行执行采集后自动解析的结果文件格式,取值为: • text:表示解析为json和csv格式的timeline和summary文件和db格式文件(msprof_时间戳.db),详见性能数据文件参考。支持CANN 7.0.0及以上版本的性能数据解析。 • db:仅解析为一个汇总所有性能数据的db格式文件(msprof_时间戳.db),使用MindStudio Insight工具展示。当前该格式数据与text参数解析的数据信息量存在差异,建议使用text方式采集。配置db时,仅支持msprof --export命令的 --output参数,不支持msprof --export命令的其他参数。 默认为text。 |
| --reports | 可选 | 传入用户自定义的reports_sample_config.json配置文件,会根据配置文件中指定的范围导出相应的性能数据。详见使用示例(--reports参数)。 |
| --model-id | 可选 | 模型ID。需配置为正整数。与--iteration-id必须同时配置,导出该Model下指定计算迭代的性能数据。--model-id与--iteration-id均未配置时,默认导出所有性能数据。 • 对于Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持--model-id=4294967295,为Step模式,即--iteration-id配置的值以Step为粒度解析。仅支持解析MindSpore(版本号大于等于2.3)框架的性能数据。 • --model-id配置为其他值时,指定以Graph为粒度统计的迭代ID(每个Graph执行一次,Iteration ID加1,当一个脚本被编译为多个Graph时,该ID与脚本层面的Step ID不一致)。 |
| --iteration-id | 可选 | 迭代ID。需配置为正整数。与--model-id必须同时配置,导出该Model下指定计算迭代的性能数据。--model-id与--iteration-id均未配置时,默认导出所有性能数据。 • 对于Atlas A2 训练系列产品/Atlas A2 推理系列产品和Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持--model-id=4294967295,表示指定以Step为粒度统计的迭代ID(每执行完成一个Step,Iteration ID加1)。仅支持解析MindSpore(版本号大于等于2.3)框架的性能数据。 • --model-id配置为其他值时,指定以Graph为粒度统计的迭代ID(每个Graph执行一次,Iteration ID加1,当一个脚本被编译为多个Graph时,该ID与脚本层面的Step ID不一致)。 |
| --summary-format | 可选 | summary数据文件的导出格式,取值为: • json:导出的summary数据文件为json格式。 • csv:导出的summary数据文件为csv,默认值。 仅--type=text时支持。 |
| --python-path | 可选 | 指定解析使用的Python解释器路径,要求Python 3.7.5及以上版本。 |
| --clear | 可选 | 数据精简模式,开启后将在导出性能数据后删除PROF_XXX/device_{id}下的sqlite目录,以节省存储空间。可选on或off,默认值为off。 |
Note
- 默认情况下,导出所有性能数据。
- 单算子场景和仅执行采集昇腾AI处理器系统数据的场景(即
msprof采集命令未配置用户应用程序参数--application的情况),不支持--iteration-id和--model-id参数。
使用示例
指定性能数据文件目录的为/home/profiler_data/PROF_XXX目录,执行导出命令。
msprof --export=on --output=/home/profiler_data/PROF_XXX
指定的性能数据文件目录为/home/profiler_data/PROF_XXX目录,传入用户自定义的reports_sample_config.json配置文件,执行导出命令。
msprof --export=on --output=/home/profiler_data/PROF_XXX --reports=${INSTALL_DIR}/tools/profiler/profiler_tool/analysis/msconfig/reports_sample_config.json
${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。若安装的Toolkit软件包,以root安装举例,则安装后文件存储路径为:/usr/local/Ascend/cann。
Note
- --reports参数指定的是reports_sample_config.json文件。需要与--export同时配置,仅支持--type=text,且仅支持对json文件的timeline数据进行控制,csv文件的summary数据依然为全量导出。
- 不支持软链接,文件大小最大阈值为64M,文件路径加上文件名长度最大阈值为1024字符。
reports_sample_config.json文件默认保存在${INSTALL_DIR}/tools/profiler/profiler_tool/analysis/msconfig/目录下,内容如下:
支持在任意有读写权限的目录下自行创建reports_sample_config.json文件。
{
"json_process": {
"ascend": true,
"acc_pmu": true,
"cann": true,
"ddr": true,
"stars_chip_trans": true,
"hbm": true,
"communication": true,
"hccs": true,
"os_runtime_api": true,
"network_usage": true,
"disk_usage": true,
"memory_usage": true,
"cpu_usage": true,
"msproftx": true,
"npu_mem": true,
"overlap_analyse": true,
"pcie": true,
"sio": true,
"stars_soc": true,
"step_trace": true,
"freq": true,
"llc": true,
"nic": true,
"roce": true,
"qos": true,
"device_tx": true,
"ccu": true,
"biu_perf": true,
"ub": true,
"block_detail": true
}
}
以上为控制相应性能数据的开关,可配置开启(true)或关闭(false或删除字段)。控制的性能数据包括msprof_*.json文件的timeline数据层级(包括CANN,Ascend Hardware、AI Core Freq、片上内存、Communication、Overlap Analysis、NPU_MEM层级等)。
Note
- 导出以上数据的前提是原始性能数据中已存在相应数据,即相应数据已采集。
- 需确保reports_sample_config.json文件格式正确,否则可能导致文件内容错误(如拼写错误,--reports参数不生效,导出全量性能数据)或文件读取失败(如权限问题、文件不存在等,导致--reports无法读取配置文件,中断导出进程并报错)。
输出说明
执行完msprof --export命令后,会在PROF_XXX目录下生成mindstudio_profiler_output目录。
生成的性能数据目录结构如下所示。
-
单采集进程
└── PROF_XXX ├── device_0 │ └── data ├── device_1 │ └── data ├── host │ └── data ├── msprof_*.db └── mindstudio_profiler_output ├── msprof_*.json ├── step_trace_*.json ├── xx_*.csv ... └── README.txt -
多采集进程
└── PROF_XXX1 ├── device_0 │ └── data ├── host │ └── data ├── msprof_*.db └── mindstudio_profiler_output ├── msprof_*.json ├── step_trace_*.json ├── xx_*.csv ... └── README.txt └── PROF_XXX2 ├── device_1 │ └── data ├── host │ └── data ├── msprof_*.db └── mindstudio_profiler_output ├── msprof_*.json ├── step_trace_*.json ├── xx_*.csv ... └── README.txt
Note
- msprof_*.db为汇总所有性能数据的db格式文件。mindstudio_profiler_output目录下的json文件为timeline信息文件,主要收集算子、任务等运行耗时,以色块形式展示;csv文件为summary信息文件,主要以表格形式汇总运行耗时。性能数据详细介绍请参见性能数据文件参考。
- 多Device场景下,若启动单采集进程,则仅生成一个PROF_XXX目录,若启动多采集进程则生成多个PROF_XXX目录,其中device目录在PROF_XXX目录下生成,每个PROF_XXX目录下生成多少个device目录与用户实际操作有关,不影响性能数据分析。
- mindstudio_profiler_output目录中的文件是根据采集的实际性能数据进行生成,如果实际的性能数据没有相关的数据文件,就不会导出对应的timeline和summary数据。
- 对于被强制中断的msprof采集进程,工具会保存已采集的原始性能数据。用户可通过
msprof --parse功能重新解析后,再次执行msprof --export。
查询性能数据文件信息
| 产品 | 是否支持 |
|---|---|
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
本功能用于查询性能数据文件信息,确认导出时指定迭代(Iteration ID)/模型(Model ID)。
性能数据解析时自动打印展示性能数据文件信息,故本功能在数据解析中为可选操作,主要用于已解析的历史PROF_XXX目录重新查询性能数据文件信息。
- 请先完成使用前准备。
- 请先完成性能数据采集。
- Atlas 200I/500 A2 推理产品的Ascend RC场景不支持在设备上直接解析,需要将采集到的PROF_XXX目录拷贝到安装了Toolkit软件包的环境下进行解析。
msprof --query=on --output=<dir>
| 参数 | 可选/必选 | 说明 |
|---|---|---|
| --query | 必选 | 查询性能数据文件信息。可选on或off,默认值为off。 • on:表示开启 • off:表示关闭 当完成解析后,可以通过本参数查询性能数据文件信息。 |
| --output | 必选 | 解析后的性能数据文件目录。须指定为PROF_XXX目录或PROF_XXX目录的父目录,例如:/home/profiler_data/PROF_XXX。 |
指定解析后的性能数据文件目录为/home/profiler_data/PROF_XXX,开启查询性能数据文件信息功能。
msprof --query=on --output=/home/profiler_data/PROF_XXX
msprof工具的查询功能获取到的信息如下表所示。
表 2 Profiling数据文件信息
| 字段 | 含义 |
|---|---|
| Job Info | 任务名。 |
| Device ID | 设备ID。 |
| Dir Name | 文件夹名称。 |
| Collection Time | 数据采集时间。 |
| Model ID | 模型ID。 |
| Iteration Number | 总迭代数。 |
| Top Time Iteration | 耗时最长的5个迭代。 |
| Rank ID | 集群场景的节点识别ID。 |
解析性能数据
| 产品 | 是否支持 |
|---|---|
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
该功能只会进行性能数据解析,不会导出性能数据文件,导出性能数据文件功能请参见解析并导出性能数据。
一般情况下,解析性能数据功能不需要单独使用,主要有如下两种使用场景:
- 对于性能数据文件解析失败的场景(例如:当存在首次解析由于某些原因导致解析失败,残留文件时),可以使用msprof --parse功能重新解析后,再次执行msprof --export。
- 对于需要指定 --model-id和 --iteration-id参数进行msprof --export导出时,可以先执行msprof --parse解析并打印迭代(Iteration ID)/模型(Model ID)后,选择需要的Iteration ID和Model ID进行导出。
- 请先完成使用前准备。
- 请先完成性能数据采集。
- Atlas 200I/500 A2 推理产品的Ascend RC场景不支持在设备上直接解析,需要将采集到的PROF_XXX目录拷贝到安装了Toolkit软件包的环境下进行解析。
msprof --parse=on --output=<dir> [--python-path=<python_path>]
| 参数 | 可选/必选 | 说明 |
|---|---|---|
| --parse | 必选 | 解析原始性能数据文件。可选on或off,默认值为off。 • on:表示开启 • off:表示关闭 |
| --output | 必选 | 原始性能数据文件目录。须指定为PROF_XXX目录或PROF_XXX目录的父目录,例如:/home/profiler_data/PROF_XXX。 |
| --python-path | 可选 | 指定解析使用的Python解释器路径,要求Python 3.7.5及以上版本。 |
解析原始性能数据文件,指定/home/profiler_data/PROF_XXX为原始性能数据文件目录。
msprof --parse=on --output=/home/profiler_data/PROF_XXX
执行完上述命令,会在PROF_XXX的device_{id}和host目录下生成sqlite目录,sqlite目录下会有db文件生成。需要继续执行解析并导出性能数据,导出最终结果的timeline数据或db文件。
通信性能数据解析
| 产品 | 是否支持 |
|---|---|
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | x |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
msprof通信性能数据解析功能主要用于统计通信类的分段耗时、拷贝、带宽等信息,以便进行通信类数据分析。通信类数据只有在多卡、多节点或集群场景下存在。
-
请先完成使用前准备。
-
请先对PROF_XXX目录执行msprof的解析导出操作,同时关闭数据精简模式,命令示例如下:
msprof --export=on --output=/home/xxx/profiler_data/PROF_XXX --clear=off -
Atlas 200I/500 A2 推理产品的Ascend RC场景不支持在设备上直接解析,需要将采集到的PROF_XXX目录拷贝到安装了Toolkit软件包的环境下进行解析。
msprof命令行方式:
msprof --analyze=on [--type=<type>] [--rule=<rule>] --output=<dir> [--clear=on]
msprof.py脚本方式:
python3 msprof.py analyze [--type <type>] --rule communication -dir <dir> [--clear]
表 1 参数说明(msprof命令行方式)
| 参数 | 可选/必选 | 说明 |
|---|---|---|
| --analyze | 必选 | 分析性能数据文件,可选on或off,默认值为off。 • on:表示开启 • off:表示关闭 |
| --type | 可选 | 设置性能数据解析结果文件格式,即可以选择msprof命令行执行后自动解析的结果文件格式,取值为: text:表示解析为json格式文件和communication_analyzer.db文件。 db:表示解析为communication_analyzer.db文件。 默认为text。 |
| --rule | 可选 | 分析规则,取值为: • communication:分析通信类数据。 ‣ --type=text时,在PROF_XXX/analyze目录下生成communication.json文件,展示单卡所有通信算子通信耗时、带宽等详细信息,如图4所示;以及生成communication_analyzer.db文件。 ‣ --type=db时,在PROF_XXX/analyze目录下仅生成communication_analyzer.db文件,保存CommAnalyzerTime(通信耗时)和CommAnalyzerBandwidth(通信带宽)信息表。 • communication_matrix:分析通信矩阵数据。 ‣ --type=text时,在PROF_XXX/analyze目录下生成communication_matrix.json文件,展示通信小算子基本的信息,包含通信size、通信带宽、通信rank等信息,用于分析通信细节,如图5所示;以及生成communication_analyzer.db文件。 ‣ --type=db时,在PROF_XXX/analyze目录下仅生成communication_analyzer.db文件,保存CommAnalyzerMatrix(通信矩阵)信息表。 以上两个参数值可以二选一也可以同时配置,使用逗号分隔,例如:--rule=communication,communication_matrix。 默认同时设置以上两个参数值。 |
| --output | 必选 | 性能数据文件目录。须指定为PROF_XXX目录,例如:/home/HwHiAiUser/profiler_data/PROF_XXX。 |
| --clear | 可选 | 数据精简模式,开启后将在导出性能数据后删除PROF_XXX目录下的sqlite目录,以节省存储空间。可选on或off,默认值为off。 |
表 2 参数说明(msprof.py脚本方式)
| 参数 | 可选/必选 | 说明 |
|---|---|---|
| analyze | 必选 | 分析性能数据文件。 |
| --type | 可选 | 设置性能数据解析结果文件格式,即可以选择msprof.py脚本执行后自动解析的结果文件格式,取值为: • text:表示解析为json格式文件和communication_analyzer.db文件。 • db:表示解析为communication_analyzer.db文件。默认为text。 |
| -r或--rule | 必选 | 分析规则,取值为: • communication:分析通信类数据。 ‣ --type text时,在PROF_XXX/analyze目录下生成communication.json文件,展示单卡所有通信算子通信耗时、带宽等详细信息,如图4所示;以及生成communication_analyzer.db文件。 ‣ --type db时,在PROF_XXX/analyze目录下仅生成communication_analyzer.db文件,保存CommAnalyzerTime(通信耗时)和CommAnalyzerBandwidth(通信带宽)信息表。 • communication_matrix:分析通信矩阵数据。 ‣ --type text时,在PROF_XXX/analyze目录下生成communication_matrix.json文件,展示通信小算子基本的信息,包含通信size、通信带宽、通信rank等信息,用于分析通信细节,如图5所示;以及生成communication_analyzer.db文件。 ‣ --type db时,在PROF_XXX/analyze目录下仅生成communication_analyzer.db文件,保存CommAnalyzerMatrix(通信矩阵)信息表。 以上两个参数值可以二选一也可以同时配置,同时配置时使用逗号分隔,例如:--rule communication,communication_matrix。 |
| -dir或--collection-dir | 必选 | 性能数据文件目录。须指定为PROF_XXX目录,例如:/home/profiler_data/PROF_XXX。 |
| --clear | 可选 | 数据精简模式,开启后将在导出性能数据后删除PROF_XXX目录下的sqlite目录,以节省存储空间。配置该参数时表示开启数据精简模式,默认未配置该参数,表示关闭。 |
指定/home/profiler_data/PROF_XXX目录为性能数据文件目录,开启解析通信性能数据文件功能。
msprof --analyze=on --output=/home/profiler_data/PROF_XXX
-
以Toolkit软件包的运行用户登录开发环境。
-
切换至msprof.py脚本所在目录。
${INSTALL_DIR}/tools/profiler/profiler_tool/analysis/msprof,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。若安装的Toolkit软件包,以root安装举例,则安装后文件存储路径为:/usr/local/Ascend/cann。 -
设置解析通信类数据,指定/home/profiler_data/PROF_XXX目录为性能数据文件目录,执行解析命令。
python3 msprof.py analyze --rule communication -dir /home/profiler_data/PROF_XXX
- --type=text或--type=db以及--rule=communication
表 3 CommAnalyzerTime
| 字段 | 说明 |
|---|---|
| hccl_op_name | 通信算子名称。 |
| group_name | 通信算子的分组。 |
| start_timestamp | 通信开始时间戳。 |
| elapse_time | 算子的通信总耗时,单位ms。 |
| transit_time | 通信时长,单位ms。表示通信算子的通信耗时,如果通信耗时过长,可能是某条链路存在问题。 |
| wait_time | 等待时长,单位ms。节点之间通信前首先需要进行同步,确保通信的两个节点同步完成,再进行通信。 |
| synchronization_time | 同步时长,单位ms。节点之间进行同步需要的时长。 |
| idle_time | 空闲时间,单位ms。空闲时间(idle_time) = 算子的通信总耗时(elapse_time) - 通信时长(transit_time) - 等待时长(wait_time)。 |
表 4 CommAnalyzerBandwidth
| 字段 | 说明 |
|---|---|
| hccl_op_name | 通信算子名称。 |
| group_name | 通信算子的分组。 |
| transport_type | 通信传输类型,包含:LOCAL、SDMA、RDMA、PCIE、HCCS、SIO。 |
| transit_size | 通信数据量,单位MB。 |
| transit_time | 通信时长,单位ms。表示通信算子的通信耗时,如果通信耗时过长,可能是某条链路存在问题。 |
| bandwidth | 通信带宽大小,单位GB/s。 |
| large_packet_ratio | 通信数据大包占比。 |
| package_size | 一次传输的通信数据包大小,单位MB。 |
| count | 通信传输次数。 |
| total_duration | 数据传输总耗时,单位ms。 |
| 字段 | 说明 |
|---|---|
| hccl_op_name | 通信算子名称。 |
| group_name | 通信算子的分组。 |
| src_rank | 通信源Rank。 |
| dst_rank | 通信目的Rank。 |
| transport_type | 通信传输类型,包含:LOCAL、SDMA、RDMA、PCIE、HCCS、SIO。 |
| transit_size | 通信数据量,单位MB。 |
| transit_time | 通信时长,单位ms。表示通信算子的通信耗时,如果通信耗时过长,可能是某条链路存在问题。 |
| bandwidth | 通信带宽大小,单位GB/s。 |




