已关闭
[Bug-Report|缺陷反馈]: AllToAllV 在 AICPU cache 场景下仅 self copy、remote count 全为 0 时执行失败 #843
洞庭湖畔_创建于 29 天前关闭于 19 天前
29 天前 将 muzhiyu6 设为负责人
黄建波
19 天前 评论:
19 天前 评论:
@洞庭湖畔_ ,您好 该问题修复PR已上库。


19 天前 issue状态由 待办的 改变为 已完成
19 天前 关闭了 issue
19 天前 添加了label:resolved
Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
Describe the current behavior / 问题描述 (Mandatory / 必填)
在 2 rank AllToAllV 场景下,当每个 rank 仅向自身发送数据、所有 remote rank 的 send/recv count 均为 0 时,CANN/HCCL 9.1.0 默认 AICPU cache 路径执行失败。
测试参数如下:
rank 0:
sendCounts = [1, 0]
recvCounts = [1, 0]
rank 1:
sendCounts = [0, 1]
recvCounts = [0, 1]
该通信参数合法:
每个 rank 只进行 self copy;
remote rank 通信量为 0;
各 rank send/recv 数量匹配;
count 与实际 tensor 大小一致。
同一用例在以下场景可以正常执行:
CANN/HCCL 8.5.2 PASS
CANN/HCCL 9.1.0 + HOST 展开 PASS
CANN/HCCL 9.1.0 + AIV 展开 PASS
CANN/HCCL 9.1.0 + AICPU_CacheDisable PASS
但 CANN/HCCL 9.1.0 默认 AICPU cache 路径失败。
原生 HcclAlltoAllV 与 torch.distributed.all_to_all_single 均可以复现,因此初步判断问题位于 HCCL/HCOMM AICPU cache 路径,而非 PTA 参数封装。
Environment / 环境信息 (Mandatory / 必填)
硬件型号:Ascend 910_9382
卡数:2
CANN/HCCL:9.1.0
HCOMM:9.1.0
Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
创建 2 rank HCCL 通信域。
rank 0 使用:
sendCounts = [1, 0]
recvCounts = [1, 0]
rank 1 使用:
sendCounts = [0, 1]
recvCounts = [0, 1]
调用:
HcclAlltoAllV(...)
等待 stream 执行完成:
aclrtSynchronizeStream(stream);
默认 AICPU cache 路径可以稳定复现失败。
临时设置:export HCCL_OP_EXPANSION_MODE=AICPU_CacheDisable 后,相同用例可以正常执行。
Describe the expected behavior / 预期结果 (Mandatory / 必填)
该 AllToAllV 参数属于合法的 zero-count 场景。
期望:
rank 0:完成自身 1 个元素的 LocalCopy
rank 1:完成自身 1 个元素的 LocalCopy
remote rank 不产生实际数据传输
接口执行成功
AICPU cache 是否开启不应影响该参数的功能正确性。
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
0b0e697363c74190aafdf5f43f6343e2.log484eebae697e4de793d9e7979f5aee42.log
失败时两个 rank 均出现:
[AlltoallvMetadata][Check] empty hcclOffsetDstRanksIdxMap for rankSize[2]
[PostProcessForCacheMiss]call trace: hcclRet -> 4
Special notes for this issue/备注 (Optional / 选填)
临时规避方案:
export HCCL_OP_EXPANSION_MODE=AICPU_CacheDisable
关闭 AICPU unfold cache 后,相同用例可以正常执行。