已合并
fix A5 AICPU communication profiling reporting #5536
fix A5 AICPU communication profiling reporting #5536
已合并
izanaami创建于 8月31日
izanaami
izanaami成员
8月31日

问题与修复分工

A5 MC2 Open 缺少完整的操作 DFX/任务上报及 KFC 与通信 SQ 的关系,导致通信任务错误归到 stream 65535,Communication 泳道无任务。

本 PR 配套 https://gitcode.com/cann/hcomm/pull/5028 。当前采用 asc-devkit 自主补报 Mc2CommInfo:本仓负责真实展开流与通信 SQ 关系、消息级 DFX 注册及 DeviceOp;HCOMM 保持原有关系上报,负责 SQE KfcInfo、CONDITION 和 MC2 小缓冲区。

已将验证过的实验 PR !6353 内容应用到本 PR,实验 PR 已关闭。以下描述取代旧 reserved/延迟关联方案。

修改内容

  1. 同步 copied DFX 定义。 对齐 HcclDfxOpInfo 的 input/output 地址和大小及私有重复定义,增加 size/offset 校验;不直接依赖 HCOMM/HCCL 源码头文件。
  2. 消息级 DeviceOp。 NEXT_AICPU 每个 HcclMsg 注册一次 DFX,所有 repeat 结束或异常退出后调用一次 HcommProfilingReportDeviceOp,保留 AcquireComm/ReleaseComm 配对及原执行错误优先级。HCOMM 内部权威状态控制实际上报。不恢复 MC2 外层 Start/End 或 AicpuMasterStreamHcclTask。
  3. 完整资源关系收集。 新建 A5 AICPU_TS 资源后从 resCtxHost.threads 收集 main/sub Thread,通过 HcclThreadResGetInfo 与 rtStreamGetSqid 取得通信物理 SQ;由 unfoldThread 对应 Stream 的 aclrtStreamGetId 取得逻辑 KFC ID。本地 AG/RS 与 cannbridge AR/A2A/A2AV 共享资源出口;缓存命中不读取空的临时 resCtxHost。
  4. 复用真实展开流。 按通信域 <commName>_unfold EngineCtx 保存/复用展开 Thread,保持与单通信域实际 kernel launch stream 一致。首次 NOT_FOUND 不打印 ERROR;损坏上下文及其他错误仍报错。
  5. Host reporter。 仅 mc2_client 编入,私有一次性加载 profapi,注册独立 HCCL module callback,与 HCOMM callback 共存。按 device 缓存纯值关系,支持采集先开启或资源先创建;关闭采集时不调用关系 hash/时间/上报,START 后上报,不设 L1-only 门禁。
  6. 格式及可靠性。 沿用 64B ProfilingDeviceCommResInfo 并校验布局,每条最多 8 个 SQ;去重、成功批次记账、失败 WARNING 且不改变通信返回值。注册不持状态锁,profapi 调用在状态锁外串行执行,callback/DSO 保持进程生命周期。

兼容性与边界

  • 不使用 reserved,不新增 HCOMM 公共接口,不修改 HCCL、opbase、runtime 或解析器,不改变算法/SQE/同步顺序。
  • 本方案限定 A5 AICPU_TS、单通信域、单次采集;STOP 后不支持再次 START 的完整采集周期,不承诺通信域销毁重建。
  • usrRankId 暂用 rankId;不能据此保证子通信域 parent-rank 语义。
  • 依赖目标 profapi 支持同模块多个 callback 及晚注册补发;不能通过覆盖 HCOMM callback 绕过兼容性要求。
  • HCOMM 原有 KFC=0 关系保留,asc-devkit 补报真实 KFC;当前解析器已验证本次数据无任务重复,不泛化为所有历史版本。
  • 额外资源查询位于资源准备阶段,不在 device repeat/SQE 热路径进行关系收集;DeviceOp 按消息聚合。

编译与定向测试

  • 实验开发阶段 A5_4p asc-devkit 包构建成功;Host 状态机测试覆盖 START 顺序、设备隔离、STOP、分包/重试和并发。
  • 安装版 libprofapi 纯 CPU 探针验证多个 callback 共存及晚注册 INIT/START;解析器合成数据探针验证双份关系与分包,不等同板测。
  • libmc2_client.so 动态依赖检查无未定义符号,git diff --check 通过。

配套板端验证(2026-09-23)

用户在黄区 8P 服务器对比 0923 newest 与配套修复包;hccl_api_test 执行 AllGather、AllReduce,32 MiB、FP16、AICPU_TS、-w 0 -n 1。两版本各 16 份 PROF,共 32 份数据库及导出时间线已核对。

每 rank 指标 newest AllGather 修复 AllGather newest AllReduce 修复 AllReduce
AscendTask 中 stream 65535 的任务数 63 0 74 0
KfcTask 数量 0 63 0 74
两条 CONDITION 所在 stream 65535 7 65535 7
通信物理 stream 未正确关联 7–13 未正确关联 7–14

修复后每 rank 的 Communication 时间线包含 63/74 个任务及一个算子区间,KFC 逻辑 stream 为 59。原始 KFC=0 与补报 KFC=59 的关系同时存在,但按 stream/task/context/batch 检查未生成重复 KfcTask。解析日志未检出 ERROR/Traceback;两组均有可选采集表缺失 WARNING。

这是上述配套包及两个用例的验证,不代表其他算子、子通信域、静态图、多轮动态采集或性能已全面验证。修复版执行日志另有每进程一次 GetUnfoldThreadInfo 返回 HCCL_E_NOT_FOUND 的 ERROR 误报;asc-devkit 已追加最小修正,保留正常创建流程及其他错误处理,该日志修正尚未重新编译/板测。

关联的Issue

NA

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 izanaami 的贡献)
izanaamiizanaami成员
8月31日 创建了 pull request,commit 8b048e08
atomgit-bot
atomgit-bot
8月31日 评论:

变更摘要

本 PR 修复 A5 AICPU Open 路径下通信 Profiling 上报缺失的问题:此前该路径缺少按算子聚合的 DFX 注册与 HEAD/TAIL/DeviceOp 上报,导致通信 TaskInfo 无法关联真实物理 stream、任务落入 stream 65535、Communication 泳道缺失。核心改动是在 CommKfcAicpuServer::Orchestrate 中按一个 HcclMsg 聚合一次 HcclDfxRegOpInfoByCommId/KernelStart/KernelEnd/DeviceOp 上报,用 execCtx.mainThread 关联真实物理 stream,并扩展 HcclDfxOpInfo 结构体以携带算子内存信息(同步自 asc-devkit copied 的 HCOMM ABI 并增加静态检查),同时通过弱符号动态加载现有 HcclDfxRegOpInfoByCommId,不新增 HCOMM 公共接口。

主要改动

  • HcclDfxOpInfo 结构体扩展与 ABI 静态校验: 在 hccl_diag.h 与 op_common.cc 中为 HcclDfxOpInfo 新增 inputMemAddr/inputMemSize/outputMemAddr/outputMemSize 字段(reserve 由 128 缩减为 96),并新增 static_assert 校验结构体 size 为 504、各字段 offset 与 HCOMM ABI 一致;HcclExecOp 与 RegisterCcuDfxOpInfo 同步填充输入输出内存信息。
  • 动态加载 HcclDfxRegOpInfoByCommId: 在 hcomm_device_profiling_dl.cc/.h 中通过 DEFINE_WEAK_FUNC/DECL_WEAK_FUNC 声明并在 HcommDeviceProfilingDlInit 中初始化该符号,复用现有 HCOMM 动态库接口,不新增公共接口。
  • Orchestrate 按消息聚合 DFX 上报: 新增 BuildOpenDfxOpInfo、SafeMultiplyForDfx、SafeAddForDfx、GetDfxDataTypeSize、IsOpenProfilingEnabled 等辅助函数;在 repeat 循环首轮完成 OpInfo 注册,仅在 profiling L0/L1 开启时上报 KernelStart,循环结束后统一上报 KernelEnd 与 DeviceOp,避免在 repeat 内重复上报。
  • 物理 stream 关联与 notify 信息保留: HEAD/TAIL 上报改用 execCtx.mainThread 关联真实物理 stream,DFX notify 信息(cpuTsThread/cpuWaitAicpuNotifyIdx)仍取自 param.opThread 等算子参数。
  • 执行失败仍补全收尾上报: 将循环内 CHK_RET 改为记录 executionRet 后跳出,执行失败后仍尝试完成 End/DeviceOp 上报,最终优先返回原始执行错误 executionRet,其次返回上报错误 profilingRet。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月31日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
8月31日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
8月31日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
include/adv_api ✅ wuzhaolin, 石楠翔, YeZZzzz1 (3/2) ✅ wuzhaolin (1/1)
repo-cann/asc-devkit ✅ 石楠翔, YeZZzzz1 (2/2) ✅ 石楠翔, YeZZzzz1 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

jiangxinyu3, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了262条消息 查看更多
CANN-robotCANN-robot成员
26 天前 添加了label:approved
YeZZzzz1成员
26 天前 评论:

/approve
/lgtm

likedislike
CANN-robot
CANN-robot成员
26 天前 评论:

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
/approve: Ascend-CANN

likedislike
CANN-robotCANN-robot成员
26 天前 添加了label:lgtm
CANN-robotCANN-robot成员
26 天前 合入了pull request