已合并
增加aicpu数据落盘前的flip计算逻辑,简化后续数据处理 #393
wangzixuan创建于 11 天前
增加aicpu数据落盘前的flip计算逻辑,简化后续数据处理 #393
已合并
wangzixuan创建于 11 天前
wangzixuan成员
11 天前

PR 合入模板

注:经过自检不涉及的可标注“不涉及”或直接打勾,特殊情况请文字备注。不符合规范的 PR 不允许合入,请(后备)commit 注意。


1. 修改描述

  • 修改原因:
    aicpu相关数据依赖aicpuFlipTask做batchId计算,该逻辑再后续的kfc_calculator相关逻辑中反复遇到。为简化后续处理流程,在落盘前就完成相关id计算。
  • 修改内容:
    目前修改后,相关数据仅存于db数据中,暂时未使用相关数据内容。后续流程中会校验相关数据正确性
    1、python侧aicpuParser逻辑中,增加batchId计算方式
    2、c++侧aicpuPersistence逻辑中,增加batchId计算方式

2. 功能验证

  • 功能自验
  • 本地自验用例截图
  • 冒烟是否通过 (填入群链接的自验证报告中,如未通过,请说明原因:____________________ ,功能代码请主动申报添加冒烟)

3. 分支合并要求

  • 代码合并(请确保将 master 分支的最新代码同步合并至 poc 分支及 pre-research 分支,同时保证 poc 分支的代码也已正确合并到 pre-research 分支。)

3. 代码检视

  • 要求:

    • 合入代码超过 200 行,需三人以上会议检视。
    • 检视密度≥1个/100行。
    • 检视缺陷密度未达要求需提供说明。
    • 大于 1000 行代码原则上不允许合入,需进行备案。
  • 是否经过代码检视

  • 是否具备 UT 测试用例看护 (如不符合,请说明原因:____________________)

  • 检视意见数:____ 条 (请填写本次检视的意见总数,用于commit合入前审视)


4. 安全自检

Python、C++

  • 对外接口新增/删除/变更后,资料要同步新增/删除/变更,新增接口入参校验参考外部输入表格
  • 不允许私有的文件操作,需要使用公共模块的安全函数
  • 任务结束后需要删除临时文件,同时需要考虑任务失败后,临时文件没有残留
  • 数组访问需要校验越界场景,对除法需要做除零校验
  • 需要对递归方法做递归深度校验,正则表达式必须做 ReDoS 校验
  • 需要充分进行接口输入和返回值异常情况的校验
  • 日志打印不要出现拼写或语法错误,不要暴露代码细节和敏感信息

C++

  • 指针使用前需要判空
  • 数值计算校验溢出和反转
  • 不可存在内存泄漏(异常场景需要释放内存)
  • 类型转换不能出现数据截断
  • 拷贝字符串时,目的缓冲区至少比源缓冲区大 1
  • 拷贝内存时,目的缓冲区不小于源缓冲区
  • 内存释放后指针赋值为 nullptr

不涉及

5. 变更知会

  • 资料修改
  • 变更通知(消息知会 + 邮件知会)

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 wangzixuan 的贡献)
atomgit-bot
atomgit-bot
11 天前 评论:

变更摘要

本 PR 在 aicpu 数据落盘前增加 flip(翻转)计算逻辑,为 mainStreamTask 和 KFC 数据预计算 batchId 并随数据一起落盘,避免后续处理时再从数据库读取和计算。C++ 侧在 AicpuPersistence 中新增 ComputeAicpuBatchId(),在 ProcessEntry 解析后、GenerateAndSaveData 前按 streamId 分组、按时间戳排序后调用 ModelingComputeBatchIdBinary 计算并回写 taskId.batchId;Python 侧在 AicpuAddInfoParser 中新增 _compute_batch_id(),复用 FlipCalculator.compute_batch_id 对 KFC 信息和主 stream 任务进行预计算。同时 AicpuMasterStreamHcclTaskKfcInfo 两张表(C++ 的 database.cpp 及 Python 的 tables_config.py)均新增 batch_id 字段,数据模型 bean 也相应增加 batch_id 属性。

主要改动

  • 新增 batchId 预计算逻辑AicpuPersistence::ComputeAicpuBatchId() 将 flip 数据与 task 数据按 streamId 分组、按时间戳排序后调用 ModelingComputeBatchIdBinary 计算,并将结果回写至各 taskId.batchIdProcessEntry 在解析后、落盘前调用该方法。
  • 落盘数据扩展 batch_id 字段MainStreamTaskFormatKfcInfosFormat 元组类型各增加一个 uint32_t 字段,GenerateAndSaveMainStreamTaskGenerateAndSaveKfcInfos 写入数据行时新增 batch_id
  • 数据库表结构新增 batch_idAicpuMasterStreamHcclTaskKfcInfo 表在 database.cpp 中新增 batch_idSQL_INTEGER_TYPE),并在 tables_config.py 中同步新增 ('batch_id', 'INTEGER,null') 配置。
  • Python 解析侧新增预计算与 bean 属性AicpuAddInfoParser 新增 _compute_batch_id(),将 flip 数据转为 TaskFlip 后调用 FlipCalculator.compute_batch_id 为 KFC 信息和主 stream 任务预填 batch_id,并在 save() 写入时带上该字段;KfcHcclInfoBeanAicpuMasterStreamHcclTaskBean 新增 batch_id 属性(getter/setter,默认 0),后者另补充 timestamp 属性。
  • 补充单元测试:C++ 侧新增 AicpuPersistenceComputeBatchIdUtest 用例(覆盖空 flip、空 task、无对应 flip 的 stream、按 stream 独立计算、KFC 计算、groupName=0 跳过等场景);Python 侧新增 _compute_batch_idset_aicpu_data 零时间戳过滤相关测试。
likedislike
atomgit-bot
atomgit-bot
11 天前 评论:

代码审查

我已用尽大部分审查预算,现给出结论。已逐一核查全部 9 个变更文件,并报告了 3 条发现。

审查结论

已报告的发现

优先级 文件 位置 问题
P1 analysis/msparser/add_info/aicpu_add_info_parser.py 355-363 _compute_batch_id 中 flip 时间戳经 time_from_syscnt 换算为纳秒,而 kfc/mainStream 任务时间戳为原始 syscnt,FlipCalculator 直接跨量纲比较,真实数据下 batchId 计算错误
P2 analysis/csrc/domain/services/persistence/device/aicpu_persistence.cpp 586 ComputeAicpuBatchId 中 kfc 按原始 info.streamId 分组,flip 按派生 taskId.streamId 分组,stream 扩展/位标记场景下键域不一致,kfc batchId 恒为 0
P3 analysis/csrc/domain/services/persistence/device/aicpu_persistence.cpp 617-618 C++(ModelingComputeBatchIdBinary 分组序号)与 Python(is_flip_num=True 取 flip_num)对同一持久化列的 batchId 语义不一致

各文件核查情况

  • aicpu_persistence.cpp:发现 P2、P3 两处问题(见上);列计数与表结构匹配、flipStorage reserve 防重分配、指针回写逻辑经核查无泄漏/越界。
  • aicpu_persistence.hComputeAicpuBatchId 声明与其实现一致,#define private public 测试路径可访问私有成员,no issues。
  • database.cppAicpuMasterStreamHcclTask(7 列)、KfcInfo(25 列)新增 batch_id 列的位置与 C++ tuple 及 Python 写入顺序逐一核对一致,no issues。
  • tables_config.pyAicpuMasterStreamHcclTaskMapKfcInfoMap 列顺序与数量与两套写入方一致,no issues。
  • aicpu_add_info_bean.py:新增 batch_id 属性/setter 及 timestamp 属性实现正确;import 重排不改变语义,no issues。
  • aicpu_add_info_parser.py:发现 P1 时间戳单位不一致问题(见上)。
  • CMakeLists.txt:为 persistence UT 新增 modeling/batch_id 源码目录,各 UT 为独立二进制,无重复符号链接冲突,no issues。
  • aicpu_persistence_utest.cpp:新增测试逻辑与 ComputeAicpuBatchId 实现一致(含 kfc 同记录多 info 后写覆盖语义、groupName==0 跳过),可编译可运行,no issues。
  • test_aicpu_add_info_parser.py_pack_aicpu_bean 各格式字段计数(node=42、flip/mainStream=233、kfc=72)经复核与 struct 格式精确匹配,无 struct.error;测试断言与 Python 实现一致,no issues。

总体风险评估

该 PR 的核心新增逻辑(C++ ComputeAicpuBatchId 与 Python _compute_batch_id)存在 1 个高置信度的数据正确性缺陷(P1,时间戳单位不一致)和 2 个中低置信度的一致性/分组键缺陷(P2/P3),会导致落盘的 batch_id 在真实数据下错误或两套分析栈结果不一致,进而影响下游依赖该列的处理逻辑。表结构变更(database.cpp / tables_config.py / 列顺序)经验证正确。建议合入前优先修复 P1,并评估 P2/P3 的两侧语义对齐。

类型 数量
🔴 阻塞 1
🟡 建议 0

⛔ 需要修改

likedislike
ascend-robotascend-robot成员
11 天前 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
11 天前 评论:

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


PR Approval Progress

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

Module Approval Details

module lgtm status approve status
repo-Ascend/msprof 梁朝明, mei-feiyao (2/2) 梁朝明 (1/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
此处折叠了107条消息 查看更多
ascend-robot
ascend-robot成员
9 天前 评论:

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

likedislike
ascend-robotascend-robot成员
9 天前 添加了label:approved
ascend-robotascend-robot成员
9 天前 合入了pull request
ascend-robot
ascend-robot成员
9 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
9 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike