已关闭
[Bug-Report|缺陷反馈]: aclnnMoeTokenPermute.md 按照公式手推计算结果 和 文档里的demo实际执行出来的结果不一致 #3740
AlfengYuan创建于 7月13日关闭于 7月13日
7月13日 添加了label:bug-report
7月13日 修改了issue 的描述
weihao18
7月13日 评论:
7月13日 评论:
/assign @cpy_123456


7月13日 将 cpy_123456 设为负责人
AlfengYuan
7月13日 评论:
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数据混用导致的


AlfengYuan
7月13日 评论:
7月13日 评论:
修改一下示例文档demo就好了,我来帮忙修复吧
@weihao18 @cpy_123456


AlfengYuan
7月13日 评论:
7月13日 评论:
/assign


7月13日 将 alfengyuan 设为负责人,移除负责人 cpy_123456
7月13日 关联了pull request:fix doc of moe_token_permute and inplace_partial_rotary_mul_grad
7月13日 关闭了 issue
7月13日 issue状态由 进行中 改变为 已完成
7月13日 添加了label:Accepted
7月13日 添加了label:resolved
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

里面的公式 :
手推计算结果:
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 / 必填)
示例代码执行结果,和按照文档公式手推结果,相同输入数据的情况下,结果应该完全一致。
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
可自行编译执行
Special notes for this issue/备注 (Optional / 选填)
ascend950 和 ascend910b执行demo,结果一致。
但是和按公式手推结果完全不一致,请解释一下看是bug还是公式有误,还是我手推过程有误。