cluster_analyse(集群分析工具)是在集群场景下,通过此工具来进行集群数据的分析,当前主要对基于通信域的迭代内耗时分析、通信时间分析以及通信矩阵分析为主, 从而定位慢卡、慢节点以及慢链路问题。
当前集群调优工具主要支持Ascend PyTorch Profiler采集方式下的集群数据。采集方式参考:Profiling数据采集,此工具只需要通过Ascend PyTorch Porfiler工具采集NPU的性能数据即可。
我们要求至少是L1级别的数据。
experimental_config = torch_npu.profiler._ExperimentalConfig(
profiler_level=torch_npu.profiler.ProfilerLevel.Level1
)
打开采集到的某张卡数据(*ascend_pt结尾的文件夹),可用的数据应该具备:
或者具备:
以上csv、json文件与db文件只能存在一类,否则集群分析工具解析异常。
确认这几个文件生成后,继续下面的集群分析。
参见《性能工具》完成工具安装。建议安装最新版本。
将所有卡的数据拷贝并汇集到一个目录下,在本目录下运行以下命令即可生成cluster_analysis_output文件夹。
msprof-analyze cluster -d {cluster profiling data path} -m {mode}
或
python3 cluster_analysis.py -d {cluster profiling data path} -m {mode}
参数说明:
参数名 | 说明 | 是否必选 |
---|---|---|
--collection_path或-d | 性能数据汇集目录,运行分析脚本之后会在该目录下自动创建cluster_analysis_output文件夹,保存分析数据。 | 是 |
--mode或-m | 数据解析模式,取值详见“--mode参数说明”表。 | 否 |
--parallel_mode | 设置收集多卡、多节点db数据时的并发方式。取值为concurrent(使用concurrent.feature进程池实现并发)。 只有-m配置cann_api_sum、compute_op_sum、hccl_sum、mstx_sum时可配置此参数。 |
否 |
--export_type | 设置导出的数据形式。取值为db(.db格式文件)和notebook(Jupyter Notebook文件),默认值为db。 只有-m配置cann_api_sum、compute_op_sum、hccl_sum、mstx_sum时可配置此参数。 |
否 |
--rank_list | 对特定Rank上的数据进行统计,默认值为all(表示对所有Rank进行统计),须根据实际卡的Rank ID配置。应配置为大于等于0的整数,若所配置的值大于实际训练所运行的卡的Rank ID,则仅解析合法的RankID的数据,比如当前环境Rank ID为0到7,实际训练运行0到3卡,此时若配置Rank ID为0, 3, 4或不存在的10等其他值,则仅解析0和3。配置示例:--rank_list 0, 1, 2。 只有-m配置cann_api_sum、compute_op_sum、hccl_sum、mstx_sum时可配置此参数。 |
否 |
--top_num | 设置TopN耗时的通信算子的数量,默认值为15,配置示例:--top_num 20。 只有-m配置hccl_sum时可配置此参数。 |
否 |
--mode参数说明:
参数名 | 说明 | 是否必选 |
---|---|---|
communication_matrix | 解析通信矩阵数据。 | 否 |
communication_time | 解析通信耗时数据。 | 否 |
all | 同时解析通信矩阵communication_matrix和通信耗时数据communication_time,--mode参数默认值为all。 | 否 |
cann_api_sum | 集群API性能数据汇总分析,输入性能数据需要基于ascend_pytorch_profiler_{rank_id}.db文件。--export_type为db时,输出交付件cluster_analysis.db;--export_type为notebook时,在cluster_analysis_output/CannApiSum目录下输出交付件stats.ipynb。 | 否 |
compute_op_sum | 集群场景性能数据的device运行算子信息汇总分析,输入性能数据需要基于ascend_pytorch_profiler_{rank_id}.db文件。--export_type为db时,输出交付件cluster_analysis.db;--export_type为notebook时,在cluster_analysis_output/ComputeOpSum目录下输出交付件stats.ipynb。 | 否 |
hccl_sum | 集合通信算子耗时分析,输入性能数据需要基于ascend_pytorch_profiler_{rank_id}.db文件。--export_type为db时,输出交付件cluster_analysis.db;--export_type为notebook时,在cluster_analysis_output/HcclSum目录下输出交付件stats.ipynb。 | 否 |
mstx_sum | 集群场景mstx打点信息汇总分析,输入性能数据需要基于ascend_pytorch_profiler_{rank_id}.db文件。--export_type为db时,输出交付件cluster_analysis.db;--export_type为notebook时,在cluster_analysis_output/MstxSum目录下输出交付件stats.ipynb。 | 否 |
--parallel_mode参数示例如下:
msprof-analyze cluster -d {cluster profiling data path} -m cann_api_sum --parallel_mode concurrent
或
python3 cluster_analysis.py -d {cluster profiling data path} -m cann_api_sum --parallel_mode concurrent
集群分析工具的交付件通过Ascend Insight工具展示,详见《MindStudio Ascend Insight用户指南》。
数据解析模式为communication_matrix、communication_time或all时均生成。
A列: Step数,是采集性能数据时设置的,一般来说集群性能数据采集一个step足够,如果采集多个step,需要先筛选一下。
B列: Type,主要分两种,rank和stage, 和后面的index强相关,可以理解为一个是单卡rank,一个是rank group(pp 并行的stage),如果type为stage,则后面D-K列信息为rank group下的最大值。
C列:Index,与type相关,表示卡号。
D列:Computing, 此列统计计算时间。
E列:Communication(Not Overlapped),此列统计未被掩盖的通信耗时。
F列:Overlapped,统计计算与通信重叠的耗时。
G列:Communication,通信时间的全部耗时。
H列:Free,空闲时间,只device侧既不在通信也不在计算的耗时,可能在做sdma拷贝或者空等。
I列:Stage时间,I、J、K列属于pp并行时有效的数值,stage时间代表除recieve算子时间外的时间。
J列:Bubble时间,指receive时间的总和。
K列:Communication(Not Overlapped and Exclude Receive)指剔除recieve算子外的并且不被掩盖的通信时间。
L列:Preparing,指迭代开始到首个计算或通信算子运行的时间。
Tips:先筛选B列type为stage, 看stage间是否有问题,再筛选B列type为rank,看rank是否有问题,根据以下几点排查。
根据Computing的时间差异判断是否有慢卡,或者有负载不均衡的现象。
根据Free统计是否有host bound或者分布不均现象。
根据Communication(Not Overlapped and Exclude Receive)时间判断是否通信耗时占比过大。
根据Bubble时间的占比和理论计算公式判断bubble设置是否合理,是否stage间有不均衡现象。
以上时间理论上都应该处于持平状态,即最大值小于最小值5%,否则就可能出现慢卡。
数据解析模式为communication_matrix或all时生成。
直接打开json(vscode或json查看器), 搜索"Total", 会有多个搜索结果,一般来说链路带宽信息的结构:
{src_rank}-{dst_rank}: {
"Transport Type": "LOCAL",
"Transit Time(ms)": 0.02462,
"Transit Size(MB)": 16.777216,
"Bandwidth(GB/s)": 681.4466
}
Tips:可以根据rank互联的带宽以及链路类型,判断是否有慢链路的问题。
数据解析模式为communication_time或all时生成。
主要为通信耗时数据。
解析analysis.db或ascend_pytorch_profiler_{rank_id}.db生成的交付件,根据数据解析模式不同而解析不同的数据,可以使用Ascend Insight工具展示。
数据解析模式为cann_api_sum时生成,保存在cluster_analysis_output/CannApiSum目录下。
可使用jupyter notebook工具或Ascend Insight工具打开,主要展示集群API耗时信息。
数据解析模式为compute_op_sum时生成,保存在cluster_analysis_output/ComputeOpSum目录下。
可使用jupyter notebook工具或Ascend Insight工具打开,主要展示集群计算算子耗时分析(将集群所有计算算子进行汇总并以图表展示),集群Rank计算算子耗时分析(将每个Rank的计算算子进行各自汇总)。
数据解析模式为hccl_sum时生成,保存在cluster_analysis_output/HcclSum目录下。
可使用jupyter notebook工具或Ascend Insight工具打开,主要展示集群通信算子耗时分析(将集群所有通信算子进行汇总并以图表展示),集群Rank通信算子耗时分析(将每个Rank的通信算子进行各自汇总)、Top通信算子信息展示。
数据解析模式为mstx_sum时生成,保存在cluster_analysis_output/MstxSum目录下。
可使用jupyter notebook工具或Ascend Insight工具打开,主要展示集群场景mstx打点信息,分为框架侧、CANN侧和Device侧三部分的打点信息。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。