👋 您好,欢迎向 MindStudio-Agent 提交 Issue!
我们已收到您的反馈,感谢你对开源社区的支持。🎉
📅处理时效: 维护团队将在24小时内 查看并回复您的问题(工作日)。
🔍自助查询: 在等待期间,建议您先查阅以下资料,可能已有解决方案:
📖 MindStudio-Agent 官方文档
📝 贡献者指南
请确保 Issue 描述清晰,包含复现步骤和日志,这将帮助我们更快定位问题。谢谢!


/label add pending


更正:撤回本 Issue 初版中「Free 数值与数据源不匹配」的指控
提交后我做了一次逐表复核,发现初版的核心指控不成立,在此撤回并致歉。
错在哪里:初版用数据包自带 cluster_analysis_output/cluster_analysis.db 的 ClusterStepTraceTime 表作基准,而 Profiler 实际读取的是 msprof-analyze cluster -m cluster_time_summary 新生成的 ClusterTimeSummary 表。两张表的 free 定义相差一个 memory 分量。
逐 rank 核对后,Profiler 输出的数值与占比全部正确:
Rank ClusterTimeSummary.free Profiler 输出 差 表内占比 Profiler 占比
0 625006.10 μs = 625.0061 ms 625.0 ms 0.006 ms 44.20% 44.2%
1 869528.84 μs = 869.5288 ms 869.5 ms 0.029 ms 61.50% 61.5%
2 823581.26 μs = 823.5813 ms 823.6 ms 0.019 ms 58.22% 58.2%
3 628357.42 μs = 628.3574 ms 628.4 ms 0.043 ms 44.40% 44.4%
差异仅来自四舍五入到 1 位小数。初版所称的「系统性偏低 7.5~8.0ms」实为两表口径差:
ClusterStepTraceTime.free − ClusterTimeSummary.free == memoryNotOverlapComputationCommunication
rank0 7435.3000 == 7435.3000
rank1 7994.3800 == 7994.3800
rank2 7813.3700 == 7813.3700
rank3 7786.2250 == 7786.2250
ClusterTimeSummary 自身是严格自洽的(实测差 0.000000):
computation + communicationNotOverlapComputation + free + memoryNotOverlapComputationCommunication == stepTime
正文已改写,保留经复核仍然成立的三点:
- 第 3 轮「周期耗时」列跨行混用 step_trace_time.csv 与 cluster_time_summary(Rank0/1 来自前者,Rank2/3 来自后者);
- 表中省略 memory 分量,导致每行的分项之和与该行周期耗时对不上;
- 未提示 free 口径——ClusterTimeSummary.free 极差 244522.74 μs, 而 MindStudio Insight 26.1.0 使用的 ClusterStepTraceTime.free 极差为 245081.82 μs。


step_trace_time.csv / cluster_time_summary 里面关于free时间的不一致是真实存在的,cluster_time_summary里面的free是去掉了memcpy的时间,这个是后做的
1.这个更多取决于模型自己的能力,不会固定复现
2.导致每行的分项之和与该行周期耗时对不上;这个agent只是打印了关键指标,省略了一些列,要看具体的可以查看原表
3.未提示 free 口径——ClusterTimeSummary.free 极差 244522.74 μs, 而 MindStudio Insight 26.1.0 使用的 ClusterStepTraceTime.free 极差为 245081.82 μs。无需纠结这个


/label add resolved


环境
v26.1.0a2,子 AgentProfiler(默认)openai,base_urlhttps://api.deepseek.com,modeldeepseek-v4-flashmsprof-mcpEnabled8.5.2quay.io/ascend/vllm-ascend:v0.13.0,aarch64cc302d549c3c7cdd671746fc9cf046a896110bf38abb8d17a2a69bc8e6e435ee-o指定目录,输入目录 mtime 未变现状问题
对该数据连续提问快慢卡后,第 3 轮(
评估快慢卡问题造成的影响,拖慢了多少时间)输出的「当前基线」表存在三个问题。三者都不影响定性结论(Rank1/2 为 Host 下发型慢卡,经核对正确),
但都会阻碍用户复核数值。
问题 A:同一列的四行取自两个不同数据源
agent 输出的表:
逐格溯源(单位 ms):
ClusterTimeSummary.stepTimestep_trace_time.csvStage同一列前两行来自 CSV、后两行来自 cluster_time_summary。
成因可从工具调用序列看出:该轮只对 Rank0 / Rank1 执行了
read_file读取step_trace_time.csv(附件截图中同屏可见工具原始返回
...,640329.5000001277,1421920.75,...与...,886376.4000002164,1422767.5,...),Rank2 / Rank3 则沿用上一轮cluster_time_summary的结果,两者被填进了同一列。
表头写的是「
step_trace_time.csv/cluster_time_summary显示:4 卡 Stage 全部被拉齐到 ~1414–1423ms/周期」——同时点名两个来源,并给出一个横跨两者的区间(
1414来自 cluster_time_summary,1423来自 CSV),但未说明哪一行取自哪一个。
作为对照,第 1 轮的同类表格标注了单一来源
(
### 关键证据 2:宏观时间拆解(cluster_time_summary)),四行数值全部取自该表,与工具返回逐位一致。说明 Profiler 具备正确标注的能力,问题出在跨轮次复用数据时:
问题 B:表中缺少 memory 分量,行内无法自洽
ClusterTimeSummary的时间拆解是四项而非三项,且严格自洽(实测差 0.000000):agent 的表省略了
memory列,于是每行的分项之和都对不上该行的周期耗时:Rank2/3 只差一个 memory 分量(属省略列),Rank0/1 叠加了问题 A 的跨源差。
读者无法从表内任何信息判断这些缺口从何而来。
问题 C:
free口径与 MindStudio Insight 不一致,且未提示任务场景要求用 MindStudio Insight 核对 agent 的分析结论,但两者的
free定义不同:ClusterTimeSummary.free(不含 memory)msprof-analyze cluster -m cluster_time_summaryClusterStepTraceTime.free(含 memory)cluster_analysis.db/ MindStudio Insight 26.1.0MindStudio Insight 26.1.0 的 Summary 页 Advice 给出:
两者恒差一个
memoryNotOverlapComputationCommunication(逐 rank 精确相符):agent 全程未提示自己使用的是哪一种口径。用户按任务要求拿 MindStudio Insight 核对时会发现数值对不上,
且没有任何线索判断这是工具口径差异还是分析出错。
实际后果:本 Issue 的初版正是因此把口径差误判为「agent 编造数值」而提交了错误指控,
直到查阅
ClusterTimeSummary表结构才发现真相。一个认真复核的用户会被这个未标注的口径差直接误导。复现步骤
pip install mindstudio-agent==26.1.0a2msagent config --llm-provider openai --llm-base-url "https://api.deepseek.com" --llm-model "deepseek-v4-flash"*_ascend_pt+cluster_analysis_output)msagent中连续提问:# agent 实际读到的表(msprof-analyze 生成,-o 目录随 agent 调用而定,可从工具调用记录中看到) python3 -c " import sqlite3 c=sqlite3.connect('<agent -o 目录>/cluster_analysis_output/cluster_analysis.db') cur=c.execute('select * from ClusterTimeSummary') print([d[0] for d in cur.description]) for r in cur: print(r) " # 数据包自带的表(MindStudio Insight 读的就是这个) python3 -c " import sqlite3 c=sqlite3.connect('<解压目录>/cluster_analysis_output/cluster_analysis.db') for r in c.execute('select \"index\",computing,communication_not_overlapped,free,stage from ClusterStepTraceTime'): print(r) " # per-rank CSV cat <解压目录>/*_ascend_pt/ASCEND_PROFILER_OUTPUT/step_trace_time.csv预期结果
ClusterTimeSummary的全部四个分项,或注明省略了memory,使「分项之和 == 周期耗时」对读者成立;
free这类存在多种口径的指标时标明来源表名与口径,并提示其与 MindStudio Insight / 数据包自带
ClusterStepTraceTime的差异。实际结果
「周期耗时」列 Rank0/1 取自 CSV、Rank2/3 取自 cluster_time_summary;表中省略
memory分量,四行分项之和分别比该行周期耗时少 15.3 / 16.9 / 7.8 / 7.7 ms;全程未提示
free口径,与 MindStudio Insight 的
max difference of Free相差 559.08 μs 而无任何说明。优化方案(建议)
在表下注明「Rank2/3 沿用上一轮
cluster_time_summary结果」,或补齐读取后再出表。ClusterTimeSummary这类满足computation + commNotOverlap + free + memoryNotOverlap == stepTime的表,输出时列全四项,或在表下写明恒等式与被省略的列。实现上可在落表前做一次断言,不通过则提示。
free @ ClusterTimeSummary(不含 memory);对存在多口径的指标,首次输出时提示「本值与 MindStudio Insight /
ClusterStepTraceTime的free相差一个
memoryNotOverlapComputationCommunication分量」。cluster_time_summary与数据包自带ClusterStepTraceTime在
free/stage上的口径差异,避免用户跨工具核对时误判。