已关闭
[Bug]: 分析msprof采集的数据时,如果存在${OUTPUT}/PROF_*/msprof_*.db*文件,则msprof-analyze cluster -m all -d ${OUTPUT}命令无法生成cluster_communication*.json文件 #57
文刀林创建于 7月25日关闭于 8月6日
Mrtutu
7月25日 评论:
7月25日 评论:
👋 您好,欢迎向 MindStudio-Profiler-Analyze 提交 Issue!
我们已收到您的反馈,感谢你对开源社区的支持。🎉
📅处理时效: 维护团队将在24小时内 查看并回复您的问题(工作日)。
🔍自助查询: 在等待期间,建议您先查阅以下资料,可能已有解决方案:
📖 MindStudio MindStudio-Profiler-Analyze官方文档
📝 贡献者指南
请确保 Issue 描述清晰,包含复现步骤和日志,这将帮助我们更快定位问题。谢谢!


7月25日 添加了label:triaged
7月25日 添加了label:bug
fanglanyue
7月27日 评论:
7月27日 评论:
${OUTPUT}/PROF_*/msprof_*.db* 这种DB数据场景,对应msprof-analyze cluster -m all 生成的是cluster_analysis.db,内容覆盖cluster_communication.json,也可在MindStudio Insight中可视化呈现


fanglanyue
7月27日 评论:
7月27日 评论:
/label add resolved


7月27日 添加了label:resolved
7月28日 关联了pull request:docs:安装指南优化
7月28日 删除了关联的pull request:docs:安装指南优化
ascend-robot
8月3日 评论:
8月3日 评论:
您好,当前Issue标记为resolved且有一段时间未进一步更新,因此我们将其标记为'stale'(闲置)状态。若您认为这是误操作,可通过添加任意评论来去除'stale'标签。标记为stale的Issue在4天内无更新活动将自动关闭。


8月3日 添加了label:stale
8月6日 issue状态由 TODO 改变为 DONE
8月6日 关闭了 issue
在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。
⚠️ 安全信息提醒:请仔细检查提供的文本内容,确保其不包含敏感数据信息,包括但不限于:
在分享配置信息或代码示例时,请将敏感信息脱敏处理,或使用
<TOKEN>等占位符替代原有内容。环境信息
🐛 问题描述
使用如下命令采集数据:
#!/bin/bash COLLECT_DURATION=${1:-5} OUTPUT="$PWD/profiling_$(date +%Y%m%d_%H%M%S)" LOG_FILE="${OUTPUT}/msprof_chain.log" mkdir -p ${OUTPUT} # export PROFILING_MODE=dynamic # 需要在vllm启动是设置环境变量 # 获取所有PID(采集至少2个rank才有集群通信数据) PIDS=$(ls -t ~/dynamic_profiling_socket_* 2>/dev/null | awk -F '_' '{print $4}' | head -1) # 将PID转换为数组 PID_ARRAY=($PIDS) # 函数:对单个PID执行采集 collect_profiling() { local PID=$1 local OUT_DIR=$2 echo -e "##################[$(date +%Y%m%d_%H%M%S)] Starting to collect profiling data for PID: $PID -> ${OUT_DIR}" # 使用 echo 管道自动交互 { echo "start" sleep ${COLLECT_DURATION} echo "stop" echo "quit" } | msprof \ --dynamic=on \ --pid=$PID \ --output=${OUT_DIR} \ --runtime-api=on \ --ascendcl=on \ --hccl=on \ --sys-interconnection-profiling=on \ --aicpu=on \ --l2=on \ --aic-metrics=PipeUtilization \ --msproftx=on \ --task-time=l2 echo "##################[$(date +%Y%m%d_%H%M%S)] Finished collecting profiling data for PID: $PID" } # ===== 正式采集 ===== for PID in "${PID_ARRAY[@]}"; do collect_profiling $PID ${OUTPUT} & done # 等待所有后台进程完成 wait # 检查 ffts_profile.data 是否存在,缺失表示没有采集到数据,退出 ffts_count=$(find ${OUTPUT}/PROF_*/device_*/data/ -name "ffts_profile.data.*" 2>/dev/null | wc -l) if [ "${ffts_count}" -eq 0 ]; then echo "##################[$(date +%Y%m%d_%H%M%S)] ERROR: 采集数据缺失,请重新执行." exit 1 fi exec &> >(tee -a "${LOG_FILE}") echo -e "\n\n##################[$(date +%Y%m%d_%H%M%S)] Starting to parse profiling data" # msprof --parse=on msprof --parse=on --output=${OUTPUT} echo -e "\n\n##################[$(date +%Y%m%d_%H%M%S)] Starting to export profiling data" # 导出 CSV 文件,不知为何会导出db文件 msprof --export=on --type=text --summary-format=csv --output=${OUTPUT} # 通信分析(生成 analyze/communication.json),注意必须分析PROF_子目录,这样msprof-analyze cluster才能分析整个集群 for prof_dir in ${OUTPUT}/PROF_*/; do echo -e "\n\n##################[$(date +%Y%m%d_%H%M%S)] Starting to analyze communication data" msprof --analyze=on --type=text --rule=communication,communication_matrix --output=${prof_dir} done # 删除 msprof_*.db 强制 TEXT 模式(如果不删除,msprof-analyze cluster会执行失败) rm -f ${OUTPUT}/PROF_*/msprof_*.db* echo -e "\n\n##################[$(date +%Y%m%d_%H%M%S)] Starting to analyze cluster data" msprof-analyze cluster -m all -d ${OUTPUT} # echo -e "\n\n##################[$(date +%Y%m%d_%H%M%S)] Starting to analyze advisor data" # # msprof-analyze advisor all -d ${OUTPUT} -o ${OUTPUT} --force find ${OUTPUT} -name "cluster_communication*.json" -exec ls -lh {} \; echo "##################[$(date +%Y%m%d_%H%M%S)] Finished all profiling for PID: $PIDS_STR, Results are in: $OUTPUT"可以正常生成cluster_communication*.json供ms_insight分析,输出部分日志如下,可见正常生成了cluster_communication.json:
但是如果把脚本中的 “rm -f ${OUTPUT}/PROF_/msprof_.db*”注释掉,则无法生成 cluster_communication.json文件。部分日志如下:
欢迎加入社区,感谢您对社区的贡献 🎉!