aclnnDynamicQuantV2 算子的示例代码 quant/dynamic_quant_v2/examples/test_aclnn_dynamic_quant_v2.cpp 存在两处缺陷:
quant/dynamic_quant_v2/examples/test_aclnn_dynamic_quant_v2.cpp
groupHostData = {2, rowNum}
groupShape = {groupNum}
CreateAclTensor
aclrtMemcpy
{2, 4}
aclDestroyTensor(group)
aclrtFree(groupDeviceAddr)
缺陷位于示例代码与文档层面,代码审查阶段发现,与具体硬件型号无关;文档标注该算子支持 Ascend 950PR/950DT、Atlas A3、Atlas A2、Atlas 推理/训练系列产品。
std::vector<int32_t> groupHostData = {2, rowNum};
GetShapeSize(shape) * sizeof(T)
groupHostData
groupShape
{1, 2, 3, rowNum}
修复 diff 见关联 PR:https://gitcode.com/cann/ops-nn/pulls/9883(涉及 2 个文件:example cpp 与 docs 内嵌示例同步)。
关联修复 PR:https://gitcode.com/cann/ops-nn/pulls/9883
Describe the current behavior / 问题描述 (Mandatory / 必填)
aclnnDynamicQuantV2 算子的示例代码
quant/dynamic_quant_v2/examples/test_aclnn_dynamic_quant_v2.cpp存在两处缺陷:groupHostData = {2, rowNum}仅 2 个元素,而groupShape = {groupNum}(4 个元素),CreateAclTensor按 shape 大小(16 字节)执行aclrtMemcpyH2D 拷贝,对仅 8 字节的 host 向量越界读。同时语义错误:group_index 应为各专家负责的累计行数(递增,末值等于 x 总行数,见算子 README 约束),{2, 4}既非递增累计值也不满足末值约束。aclDestroyTensor(group)与aclrtFree(groupDeviceAddr)。Environment / 环境信息 (Mandatory / 必填)
缺陷位于示例代码与文档层面,代码审查阶段发现,与具体硬件型号无关;文档标注该算子支持 Ascend 950PR/950DT、Atlas A3、Atlas A2、Atlas 推理/训练系列产品。
Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
quant/dynamic_quant_v2/examples/test_aclnn_dynamic_quant_v2.cpp(master 分支 7e2f34e5e 版本),定位 main() 中std::vector<int32_t> groupHostData = {2, rowNum};;groupShape = {groupNum}(4 元素)与CreateAclTensor中GetShapeSize(shape) * sizeof(T)的 memcpy 拷贝字节数;Describe the expected behavior / 预期结果 (Mandatory / 必填)
groupHostData元素个数与groupShape一致,取值为各专家累计行数(如{1, 2, 3, rowNum}),末值等于 x 总行数;Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
修复 diff 见关联 PR:https://gitcode.com/cann/ops-nn/pulls/9883(涉及 2 个文件:example cpp 与 docs 内嵌示例同步)。
Special notes for this issue/备注 (Optional / 选填)
关联修复 PR:https://gitcode.com/cann/ops-nn/pulls/9883