已合并
fix: 修正动态shape静态子图HCCL零拷贝判断逻辑 #4321
tangqunzhang创建于 8月10日
fix: 修正动态shape静态子图HCCL零拷贝判断逻辑 #4321
已合并
tangqunzhang创建于 8月10日
tangqunzhang成员
8月10日

Pull Request

描述

修正动态shape静态子图场景下HCCL零拷贝判断逻辑。

问题:IsGraphFeatureMapRefreshable在动态shape静态子图场景下,hccl判断时还未拆图,导致判断结果与实际执行阶段不一致。另外静态子图里hccl支持刷新会有性能劣化,hccl内部会做数据拷贝等额外处理。

修改方案:

  • 移除is_feature_map_refreshable参数传递,恢复使用IsHcomNodeNotSupportAddrRefresh+is_dynamic_shape_sub_graph判断
  • MarkReuseZeroCopyBlockFlag移除data_connect_unsupport_zero_copy检查逻辑(动态shape静态子图data,ge执行流程没有对输入做拷贝处理,只能按支持零拷贝处理)

同时构造动态shape两个静态子图HCCL零拷贝ST用例:

  • 子图1输出作为子图2输入
  • GenerateTaskForHcomAllReduce新增memcpy做数据拷贝
  • 执行后在fixed feature memory写入magic数据校验子图间数据传递

变更文件

  • block_mem_zero_copy.cc:IsNodeSupportZeroCopy使用is_dynamic_shape_sub_graph判断;MarkReuseZeroCopyBlockFlag移除is_feature_map_refreshable参数和data_connect_unsupport_zero_copy检查逻辑;IsNodeAndPeerNodeTaskSupportZeroCopy移除is_feature_map_refreshable参数
  • block_mem_zero_copy.h:同步函数签名修改
  • block_mem_assigner.cc:IsZeroCopyBlock和两处MarkReuseZeroCopyBlockFlag调用移除is_feature_map_refreshable_参数
  • block_mem_assigner_unittest.cc:适配函数签名变更
  • test_fm_memory_refresh.cc:新增动态shape静态子图HCCL零拷贝ST用例

变更类型

关联的Issue

如何测试

  1. 编译UT:make -C cmake-build-gcov ut_libge_distinct_load_utest
  2. 运行UT:--gtest_filter=*IsZeroCopyBlock*
  3. 编译ST:bash build.sh --ge_executor
  4. 运行ST:test_fm_memory_refresh --gtest_filter=*HcclZeroCopy*

核对清单

其他信息

dump相关修复已拆分到独立PR #4390。

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

变更摘要

本次 PR 回退了 PR #4299「统一HCCL零拷贝判断使用 IsGraphFeatureMapRefreshable」的改动。原 PR 将 HCCL 零拷贝判断从手动检查 root_graph->GetGraphUnknownFlag() 改为使用 IsGraphFeatureMapRefreshable(),并扩展到静态 shape 场景,但导致 pa_remapped_test_001 测试失败:feature map 可刷新时 data 节点内存被错误分类为 FIXED_FEATURE_MAP 而非 INPUT。本次回退将零拷贝判断逻辑恢复到基于动态 shape 静态子图的手动检测方式,并从 MarkReuseZeroCopyBlockFlag 与 IsNodeAndPeerNodeTaskSupportZeroCopy 两个函数中移除 is_feature_map_refreshable 参数。

主要改动

  • 函数签名回退:MarkReuseZeroCopyBlockFlag 和 IsNodeAndPeerNodeTaskSupportZeroCopy 移除 is_feature_map_refreshable 参数,所有调用处同步去除该实参(涉及 block_mem_assigner.cc、block_mem_zero_copy.cc、block_mem_zero_copy.h)
  • HCCL 零拷贝判断逻辑回退:IsNodeSupportZeroCopy 中由 IsGraphFeatureMapRefreshable() 统一判断回退为手动检查 is_dynamic_shape_sub_graph(通过 root_graph->GetGraphUnknownFlag() 与子图 GetGraphUnknownFlag() 组合判定),仅在动态 shape 静态子图场景下才使用 IsHcomNodeNotSupportAddrRefresh 排除 HCCL 算子
  • Data 节点直连判断简化:MarkReuseZeroCopyBlockFlag 中 data 节点的零拷贝拒绝条件由原来的 (!is_feature_map_refreshable) 改为无条件判断,同时将硬编码的 kTaskUnsupportZeroCopyOp 集合(含 STREAMSWITCH、LABELSWITCHBYINDEX)替换为通用函数 IsNodeSupportZeroCopy()
  • 移除特征图可刷新早期返回:IsNodeAndPeerNodeTaskSupportZeroCopy 中删除了当 is_feature_map_refreshable 为 true 时直接返回 true 的短路逻辑,确保所有场景均走完整的节点和 peer 节点零拷贝支持性检查
  • 单元测试同步调整:IsZeroCopyBlock_refreshable_unsupport_hccl 重命名为 IsZeroCopyBlock_support_hccl,期望值由 false 改为 true;IsZeroCopyBlock_unsupport_hccl_dynamic_static_subg 简化了子图结构并移除 data 节点相关断言;IsZeroCopyBlock_unsupport_rts 补充了 ge.featureBaseRefreshable 选项;MarkReuseZeroCopyBlockFlag 调用处去除末位参数
likedislike
不准确?
atomgit-bot
atomgit-bot
8月10日 评论:

🤖 本次改动均为数据 / 生成 / 二进制文件(如测试用例、锁文件、媒体资源),没有可审查的代码逻辑,已跳过 AI 代码审查。

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

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.
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
repo-cann/ge ✅ 张德鹏, yuht9, hugo111 (3/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

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

likedislike
此处折叠了273条消息 查看更多
hugo111成员
8月18日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
8月18日 添加了label:lgtm
张德鹏成员
8月18日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
8月18日 添加了label:approved
CANN-robotCANN-robot成员
8月18日 合入了pull request