已关闭
[Bug-Report|缺陷反馈]: aclnnMoeTokenPermute.md 按照公式手推计算结果 和 文档里的demo实际执行出来的结果不一致 #3740
AlfengYuan创建于  7月13日关闭于  7月13日
AlfengYuan
AlfengYuan成员
7月13日 创建

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

Describe the current behavior / 问题描述 (Mandatory / 必填)

按照 https://gitcode.com/cann/ops-transformer/blob/master/moe/moe_token_permute/docs/aclnnMoeTokenPermute.md
里面的公式 :
image.png

手推计算结果:

tokens0 [0.1, 0.1, 0.1, 0.1]
tokens1 [0.2. 0.2. 0.2, 0.2]
tokens2 [0.3, 0.3, 0.3, 0.3]

indices:
[[1, 2], [0, 1],[0, 2]]

sortedInficesFirst = argSort(flatten(Indices))
[2, 4, 0, 3, 1, 5]

sortedIndicesOut = argSort(sortedIndicesFirst)
[2, 4, 0, 3, 1, 5]

permuteTokensOut[sortedIndicesOut[i]]=tokens[i//topK]

permuteTokensOut[2] = tokens[0//2] = [0.1, 0.1, 0.1, 0.1]
permuteTokensOut[4] = tokens[1//2] = [0.1, 0.1, 0.1, 0.1]
permuteTokensOut[0] = tokens[2//2] = [0.2, 0.2, 0.2, 0.2]
permuteTokensOut[3] = tokens[3//2] = [0.2, 0.2, 0.2, 0.2]
permuteTokensOut[1] = tokens[4//2] = [0.3, 0.3, 0.3, 0.3]
permuteTokensOut[5] = tokens[5//2] = [0.3, 0.3, 0.3, 0.3]

permuteTokensOut all:
[0.2, 0.2, 0.2, 0.2]
[0.3, 0.3, 0.3, 0.3]
[0.1, 0.1, 0.1, 0.1]
[0.2, 0.2, 0.2, 0.2]
[0.1, 0.1, 0.1, 0.1]
[0.3, 0.3, 0.3, 0.3]

实际按照文档最后的demo计算结果:
expandedXData[0] is: 0.100000
expandedXData[1] is: 0.100000
expandedXData[2] is: 0.200000
expandedXData[3] is: 0.200000
expandedXData[4] is: 0.100000
expandedXData[5] is: 0.100000
expandedXData[6] is: 0.100000
expandedXData[7] is: 0.100000
expandedXData[8] is: 0.100000
expandedXData[9] is: 0.100000
expandedXData[10] is: 0.200000
expandedXData[11] is: 0.200000
expandedXData[12] is: 0.000000
expandedXData[13] is: 0.000000
expandedXData[14] is: 0.000000
expandedXData[15] is: 0.000000
expandedXData[16] is: 0.000000
expandedXData[17] is: 0.000000
expandedXData[18] is: 0.000000
expandedXData[19] is: 0.000000
expandedXData[20] is: 0.000000
expandedXData[21] is: 0.000000
expandedXData[22] is: 0.000000
expandedXData[23] is: 0.000000
sortedIndicesData[0] is: 2
sortedIndicesData[1] is: 4
sortedIndicesData[2] is: 0
sortedIndicesData[3] is: 3
sortedIndicesData[4] is: 1
sortedIndicesData[5] is: 5

Environment / 环境信息 (Mandatory / 必填)

ascend910b , ascend950

最新master主线代码

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

按照示例代码,安装cann主线包,编译运行示例代码

Describe the expected behavior / 预期结果 (Mandatory / 必填)

示例代码执行结果,和按照文档公式手推结果,相同输入数据的情况下,结果应该完全一致。

可自行编译执行

Special notes for this issue/备注 (Optional / 选填)

ascend950 和 ascend910b执行demo,结果一致。

但是和按公式手推结果完全不一致,请解释一下看是bug还是公式有误,还是我手推过程有误。

likedislike
AlfengYuanAlfengYuan成员
7月13日 添加了label:bug-report
AlfengYuanAlfengYuan成员
7月13日 修改了issue 的描述
weihao18成员
7月13日 评论:

/assign @cpy_123456

likedislike
CANN-robotCANN-robot成员
7月13日 将 cpy_123456 设为负责人
AlfengYuan
AlfengYuan成员
7月13日 评论:

初步看了下是demo代码书写有误:

std::vector<float> xHostData = {0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3};
    std::vector<int> indicesHostData = {1, 2, 0, 1, 0, 2};
    std::vector<float> expandedXOutHostData = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    std::vector<int> sortedIndicesOutHostData = {0, 0, 0, 0, 0, 0};
  
  ....

 // 创建self aclTensor
    ret = CreateAclTensor(xHostData, xShape, &xDeviceAddr, aclDataType::ACL_BF16, &x);
    ...
 // 创建out aclTensor
    ret = CreateAclTensor(expandedXOutHostData, expandedXOutShape, &expandedXOutDeviceAddr, aclDataType::ACL_BF16, &expandedXOut);
    ....
  
  
   std::vector<float> expandedXData(expandedXSize, 0);
    ret = aclrtMemcpy(expandedXData.data(), expandedXData.size() * sizeof(expandedXData[0]), expandedXOutDeviceAddr, expandedXSize * sizeof(float),
                      ACL_MEMCPY_DEVICE_TO_HOST);
    CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret);
  
  ....
  

float 和 bf16数据混用导致的

likedislike
AlfengYuan
AlfengYuan成员
7月13日 评论:

修改一下示例文档demo就好了,我来帮忙修复吧
@weihao18 @cpy_123456

likedislike
AlfengYuan
AlfengYuan成员
7月13日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
7月13日 将 alfengyuan 设为负责人,移除负责人 cpy_123456
AlfengYuanAlfengYuan成员
7月13日 关联了pull request:fix doc of moe_token_permute and inplace_partial_rotary_mul_grad
CANN-robotCANN-robot成员
7月13日 关闭了 issue
AlfengYuanAlfengYuan成员
7月13日 issue状态由 进行中 改变为 已完成
CANN-robotCANN-robot成员
7月13日 添加了label:Accepted
CANN-robotCANN-robot成员
7月13日 添加了label:resolved