已合并
feat: WeightQuantPreprocess A16MXF4 支持转置 weight ND 直拷;ErrMsg reason 句号整改 #5241
马琦钧创建于 8月31日
feat: WeightQuantPreprocess A16MXF4 支持转置 weight ND 直拷;ErrMsg reason 句号整改 #5241
已合并
共 2 个文件变更+296-855
Mconversion/weight_quant_preprocess/tests/ut/op_host/test_aclnn_weight_quant_preprocess_l2.cpp+112-29
| @@ -130,8 +130,8 @@ static void TestOneParamCase(const WeightQuantPreprocessTestParam& param) | |||
| 130 | // 显式指定 outWeight storageShape(用于构造 NZ 分形形状错误的负例) | 130 | // 显式指定 outWeight storageShape(用于构造 NZ 分形形状错误的负例) |
| 131 | outWeightStorageShape = param.outWeightStorageShape; | 131 | outWeightStorageShape = param.outWeightStorageShape; |
| 132 | } else if (effOutFormat == ACL_FORMAT_ND) { | 132 | } else if (effOutFormat == ACL_FORMAT_ND) { |
| 133 | - // ND 直拷:outWeight storageShape 与 viewShape 一致 | 133 | + // ND 直拷:outWeight 与 weight 完全一致,storageShape 镜像 weight(转置视图两者不等) |
| 134 | - outWeightStorageShape = param.weightViewShape; | 134 | + outWeightStorageShape = param.weightStorageShape; |
| 135 | } else if (effOutFormat == ACL_FORMAT_FRACTAL_NZ_C0_16) { | 135 | } else if (effOutFormat == ACL_FORMAT_FRACTAL_NZ_C0_16) { |
| 136 | // NZ_C0_16(A16W4 紧凑 4-bit):N 块在前 {ceildiv(N, 16), ceildiv(K, 16), 16, 16} | 136 | // NZ_C0_16(A16W4 紧凑 4-bit):N 块在前 {ceildiv(N, 16), ceildiv(K, 16), 16, 16} |
| 137 | size_t dimNum = param.weightViewShape.size(); | 137 | size_t dimNum = param.weightViewShape.size(); |
| @@ -159,7 +159,12 @@ static void TestOneParamCase(const WeightQuantPreprocessTestParam& param) | |||
| 159 | aclFormat outFormat = param.outWeightFormat != ACL_FORMAT_UNDEFINED ? param.outWeightFormat : | 159 | aclFormat outFormat = param.outWeightFormat != ACL_FORMAT_UNDEFINED ? param.outWeightFormat : |
| 160 | ACL_FORMAT_FRACTAL_NZ_C0_32; | 160 | ACL_FORMAT_FRACTAL_NZ_C0_32; |
| 161 | aclDataType outDtype = param.outWeightDtype != ACL_DT_UNDEFINED ? param.outWeightDtype : param.weightDtype; | 161 | aclDataType outDtype = param.outWeightDtype != ACL_DT_UNDEFINED ? param.outWeightDtype : param.weightDtype; |
| 162 | - outWeight = aclCreateTensor(outWeightViewShape.data(), outWeightViewShape.size(), outDtype, nullptr, 0, | 162 | + // ND 直拷要求 outWeight 与 weight 完全一致(含连续性):镜像 weight 的 strides, |
| 163 | + // 转置 weight 对应转置 outWeight(与真实用法一致,如 op-plugin 的别名透传) | ||
| 164 | + const int64_t* outStrides = (outFormat == ACL_FORMAT_ND && !param.weightStrides.empty()) ? | ||
| 165 | + param.weightStrides.data() : | ||
| 166 | + nullptr; | ||
| 167 | + outWeight = aclCreateTensor(outWeightViewShape.data(), outWeightViewShape.size(), outDtype, outStrides, 0, | ||
| 163 | outFormat, outWeightStorageShape.data(), outWeightStorageShape.size(), | 168 | outFormat, outWeightStorageShape.data(), outWeightStorageShape.size(), |
| 164 | outWeightDeviceAddr); | 169 | outWeightDeviceAddr); |
| 165 | } | 170 | } |
| @@ -727,7 +732,8 @@ static WeightQuantPreprocessTestParam mmNormalCases[] = { | |||
| 727 | ACL_DT_UNDEFINED, | 732 | ACL_DT_UNDEFINED, |
| 728 | ACL_DT_UNDEFINED}, | 733 | ACL_DT_UNDEFINED}, |
| 729 | 734 | ||
| 730 | - // [STC a16s4 T-14] per-group scale G=5 与 ceildiv(K=256, gs=64)=4 不对应:CheckWeightScalePerGroupViewShape 拒绝 | 735 | + // [STC a16s4 T-14] per-group scale G=5 与 ceildiv(K=256, gs=64)=4 不对应:v2 起 preprocess |
| 736 | + // 放行(透传参数输入侧校验已下放 wqbmmv2) | ||
| 731 | {"ascend950_test_MM_A16S4_pergroup_scale_g_mismatch", | 737 | {"ascend950_test_MM_A16S4_pergroup_scale_g_mismatch", |
| 732 | {256, 256}, | 738 | {256, 256}, |
| 733 | {256, 256}, | 739 | {256, 256}, |
| @@ -743,7 +749,7 @@ static WeightQuantPreprocessTestParam mmNormalCases[] = { | |||
| 743 | ACL_DT_UNDEFINED, | 749 | ACL_DT_UNDEFINED, |
| 744 | 64, | 750 | 64, |
| 745 | false, | 751 | false, |
| 746 | - ACLNN_ERR_PARAM_INVALID, | 752 | + ACLNN_SUCCESS, |
| 747 | false, | 753 | false, |
| 748 | false, | 754 | false, |
| 749 | false, | 755 | false, |
| @@ -819,10 +825,43 @@ static WeightQuantPreprocessTestParam mmNormalCases[] = { | |||
| 819 | ACL_FORMAT_FRACTAL_NZ_C0_16, | 825 | ACL_FORMAT_FRACTAL_NZ_C0_16, |
| 820 | ACL_DT_UNDEFINED, | 826 | ACL_DT_UNDEFINED, |
| 821 | ACL_DT_UNDEFINED}, | 827 | ACL_DT_UNDEFINED}, |
| 828 | + | ||
| 829 | + // [STC a16f4 F-18] A16MXF4 转置 + ND 直拷正例:weight 转置视图 {K,N}={256,128} strides [1,256], | ||
| 830 | + // scale E8M0 转置视图 {G,N}={8,128} strides [1,8],outWeight ND | ||
| 831 | + {"ascend950_test_MM_A16MXF4_trans_nd", | ||
| 832 | + {256, 128}, | ||
| 833 | + {128, 256}, | ||
| 834 | + {1, 256}, | ||
| 835 | + {8, 128}, | ||
| 836 | + {128, 8}, | ||
| 837 | + {1, 8}, | ||
| 838 | + ACL_FLOAT4_E2M1, | ||
| 839 | + ACL_FLOAT8_E8M0, | ||
| 840 | + ACL_FORMAT_ND, | ||
| 841 | + ACL_FORMAT_ND, | ||
| 842 | + ACL_FLOAT16, | ||
| 843 | + ACL_DT_UNDEFINED, | ||
| 844 | + 32, | ||
| 845 | + false, | ||
| 846 | + ACLNN_SUCCESS, | ||
| 847 | + false, | ||
| 848 | + false, | ||
| 849 | + false, | ||
| 850 | + false, | ||
| 851 | + false, | ||
| 852 | + false, | ||
| 853 | + {}, | ||
| 854 | + {}, | ||
| 855 | + ACL_DT_UNDEFINED, | ||
| 856 | + ACL_FORMAT_ND, | ||
| 857 | + ACL_FORMAT_ND, | ||
| 858 | + ACL_DT_UNDEFINED, | ||
| 859 | + ACL_DT_UNDEFINED}, | ||
| 822 | }; | 860 | }; |
| 823 | 861 | ||
| 824 | static WeightQuantPreprocessTestParam casesParams[] = { | 862 | static WeightQuantPreprocessTestParam casesParams[] = { |
| 825 | 863 | ||
| 864 | + // v2:kGroupSize 一致性校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 826 | {"ascend950_test_GMM_kGroupSize_not_32", | 865 | {"ascend950_test_GMM_kGroupSize_not_32", |
| 827 | {2, 64, 128}, | 866 | {2, 64, 128}, |
| 828 | {2, 128, 64}, | 867 | {2, 128, 64}, |
| @@ -838,7 +877,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 838 | ACL_FLOAT8_E8M0, | 877 | ACL_FLOAT8_E8M0, |
| 839 | 64, | 878 | 64, |
| 840 | true, | 879 | true, |
| 841 | - ACLNN_ERR_PARAM_INVALID, | 880 | + ACLNN_SUCCESS, |
| 842 | false, | 881 | false, |
| 843 | false, | 882 | false, |
| 844 | false, | 883 | false, |
| @@ -1063,6 +1102,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1063 | ACL_DT_UNDEFINED, | 1102 | ACL_DT_UNDEFINED, |
| 1064 | ACL_DT_UNDEFINED}, | 1103 | ACL_DT_UNDEFINED}, |
| 1065 | 1104 | ||
| 1105 | + // v2:scale 输入侧 format 校验已删(outScale 同为 NHWC,same 一致),约束下放 wqbmmv2 | ||
| 1066 | {"ascend950_test_weightScale_format_invalid", | 1106 | {"ascend950_test_weightScale_format_invalid", |
| 1067 | {64, 128}, | 1107 | {64, 128}, |
| 1068 | {128, 64}, | 1108 | {128, 64}, |
| @@ -1078,7 +1118,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1078 | ACL_FLOAT8_E8M0, | 1118 | ACL_FLOAT8_E8M0, |
| 1079 | 32, | 1119 | 32, |
| 1080 | false, | 1120 | false, |
| 1081 | - ACLNN_ERR_PARAM_INVALID, | 1121 | + ACLNN_SUCCESS, |
| 1082 | false, | 1122 | false, |
| 1083 | false, | 1123 | false, |
| 1084 | false, | 1124 | false, |
| @@ -1213,6 +1253,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1213 | ACL_DT_UNDEFINED, | 1253 | ACL_DT_UNDEFINED, |
| 1214 | ACL_DT_UNDEFINED}, | 1254 | ACL_DT_UNDEFINED}, |
| 1215 | 1255 | ||
| 1256 | + // A8W4 NZ 出 dtype 须与输入一致:outWeight 传 INT8 而输入为 float8_e4m3fn,拒绝 | ||
| 1216 | {"ascend950_test_outWeight_dtype_mismatch", | 1257 | {"ascend950_test_outWeight_dtype_mismatch", |
| 1217 | {64, 128}, | 1258 | {64, 128}, |
| 1218 | {128, 64}, | 1259 | {128, 64}, |
| @@ -1363,6 +1404,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1363 | ACL_DT_UNDEFINED, | 1404 | ACL_DT_UNDEFINED, |
| 1364 | ACL_DT_UNDEFINED}, | 1405 | ACL_DT_UNDEFINED}, |
| 1365 | 1406 | ||
| 1407 | + // v2:kGroupSize 一致性校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 1366 | {"ascend950_test_kGroupSize_not_32", | 1408 | {"ascend950_test_kGroupSize_not_32", |
| 1367 | {64, 128}, | 1409 | {64, 128}, |
| 1368 | {128, 64}, | 1410 | {128, 64}, |
| @@ -1378,7 +1420,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1378 | ACL_FLOAT8_E8M0, | 1420 | ACL_FLOAT8_E8M0, |
| 1379 | 64, | 1421 | 64, |
| 1380 | false, | 1422 | false, |
| 1381 | - ACLNN_ERR_PARAM_INVALID, | 1423 | + ACLNN_SUCCESS, |
| 1382 | false, | 1424 | false, |
| 1383 | false, | 1425 | false, |
| 1384 | false, | 1426 | false, |
| @@ -1393,6 +1435,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1393 | ACL_DT_UNDEFINED, | 1435 | ACL_DT_UNDEFINED, |
| 1394 | ACL_DT_UNDEFINED}, | 1436 | ACL_DT_UNDEFINED}, |
| 1395 | 1437 | ||
| 1438 | + // v2:kGroupSize 一致性校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 1396 | {"ascend950_test_kGroupSize_zero", | 1439 | {"ascend950_test_kGroupSize_zero", |
| 1397 | {64, 128}, | 1440 | {64, 128}, |
| 1398 | {128, 64}, | 1441 | {128, 64}, |
| @@ -1408,7 +1451,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1408 | ACL_FLOAT8_E8M0, | 1451 | ACL_FLOAT8_E8M0, |
| 1409 | 0, | 1452 | 0, |
| 1410 | false, | 1453 | false, |
| 1411 | - ACLNN_ERR_PARAM_INVALID, | 1454 | + ACLNN_SUCCESS, |
| 1412 | false, | 1455 | false, |
| 1413 | false, | 1456 | false, |
| 1414 | false, | 1457 | false, |
| @@ -1423,6 +1466,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1423 | ACL_DT_UNDEFINED, | 1466 | ACL_DT_UNDEFINED, |
| 1424 | ACL_DT_UNDEFINED}, | 1467 | ACL_DT_UNDEFINED}, |
| 1425 | 1468 | ||
| 1469 | + // v2:scale 输入侧 viewShape 校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 1426 | {"ascend950_test_weightScale_shape_invalid", | 1470 | {"ascend950_test_weightScale_shape_invalid", |
| 1427 | {64, 128}, | 1471 | {64, 128}, |
| 1428 | {128, 64}, | 1472 | {128, 64}, |
| @@ -1438,7 +1482,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1438 | ACL_FLOAT8_E8M0, | 1482 | ACL_FLOAT8_E8M0, |
| 1439 | 32, | 1483 | 32, |
| 1440 | false, | 1484 | false, |
| 1441 | - ACLNN_ERR_PARAM_INVALID, | 1485 | + ACLNN_SUCCESS, |
| 1442 | false, | 1486 | false, |
| 1443 | false, | 1487 | false, |
| 1444 | false, | 1488 | false, |
| @@ -1453,6 +1497,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1453 | ACL_DT_UNDEFINED, | 1497 | ACL_DT_UNDEFINED, |
| 1454 | ACL_DT_UNDEFINED}, | 1498 | ACL_DT_UNDEFINED}, |
| 1455 | 1499 | ||
| 1500 | + // v2:scale 输入侧转置校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 1456 | {"ascend950_test_weightScale_not_transposed", | 1501 | {"ascend950_test_weightScale_not_transposed", |
| 1457 | {64, 128}, | 1502 | {64, 128}, |
| 1458 | {128, 64}, | 1503 | {128, 64}, |
| @@ -1468,7 +1513,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1468 | ACL_FLOAT8_E8M0, | 1513 | ACL_FLOAT8_E8M0, |
| 1469 | 32, | 1514 | 32, |
| 1470 | false, | 1515 | false, |
| 1471 | - ACLNN_ERR_PARAM_INVALID, | 1516 | + ACLNN_SUCCESS, |
| 1472 | false, | 1517 | false, |
| 1473 | false, | 1518 | false, |
| 1474 | false, | 1519 | false, |
| @@ -1513,6 +1558,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1513 | ACL_DT_UNDEFINED, | 1558 | ACL_DT_UNDEFINED, |
| 1514 | ACL_DT_UNDEFINED}, | 1559 | ACL_DT_UNDEFINED}, |
| 1515 | 1560 | ||
| 1561 | + // v2:bias 输入侧 dtype 校验已删(outBias 同为 INT8,same 一致),约束下放 wqbmmv2 | ||
| 1516 | {"ascend950_test_bias_dtype_invalid", | 1562 | {"ascend950_test_bias_dtype_invalid", |
| 1517 | {64, 128}, | 1563 | {64, 128}, |
| 1518 | {128, 64}, | 1564 | {128, 64}, |
| @@ -1528,7 +1574,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1528 | ACL_FLOAT8_E8M0, | 1574 | ACL_FLOAT8_E8M0, |
| 1529 | 32, | 1575 | 32, |
| 1530 | false, | 1576 | false, |
| 1531 | - ACLNN_ERR_PARAM_INVALID, | 1577 | + ACLNN_SUCCESS, |
| 1532 | false, | 1578 | false, |
| 1533 | false, | 1579 | false, |
| 1534 | false, | 1580 | false, |
| @@ -1543,6 +1589,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1543 | ACL_DT_UNDEFINED, | 1589 | ACL_DT_UNDEFINED, |
| 1544 | ACL_DT_UNDEFINED}, | 1590 | ACL_DT_UNDEFINED}, |
| 1545 | 1591 | ||
| 1592 | + // v2:bias 输入侧 viewShape 校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 1546 | {"ascend950_test_bias_shape_invalid", | 1593 | {"ascend950_test_bias_shape_invalid", |
| 1547 | {64, 128}, | 1594 | {64, 128}, |
| 1548 | {128, 64}, | 1595 | {128, 64}, |
| @@ -1558,7 +1605,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1558 | ACL_FLOAT8_E8M0, | 1605 | ACL_FLOAT8_E8M0, |
| 1559 | 32, | 1606 | 32, |
| 1560 | false, | 1607 | false, |
| 1561 | - ACLNN_ERR_PARAM_INVALID, | 1608 | + ACLNN_SUCCESS, |
| 1562 | false, | 1609 | false, |
| 1563 | false, | 1610 | false, |
| 1564 | false, | 1611 | false, |
| @@ -1573,6 +1620,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1573 | ACL_DT_UNDEFINED, | 1620 | ACL_DT_UNDEFINED, |
| 1574 | ACL_DT_UNDEFINED}, | 1621 | ACL_DT_UNDEFINED}, |
| 1575 | 1622 | ||
| 1623 | + // v2:bias 输入侧 viewShape 校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 1576 | {"ascend950_test_bias_1d_shape_invalid", | 1624 | {"ascend950_test_bias_1d_shape_invalid", |
| 1577 | {64, 128}, | 1625 | {64, 128}, |
| 1578 | {128, 64}, | 1626 | {128, 64}, |
| @@ -1588,7 +1636,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1588 | ACL_FLOAT8_E8M0, | 1636 | ACL_FLOAT8_E8M0, |
| 1589 | 32, | 1637 | 32, |
| 1590 | false, | 1638 | false, |
| 1591 | - ACLNN_ERR_PARAM_INVALID, | 1639 | + ACLNN_SUCCESS, |
| 1592 | false, | 1640 | false, |
| 1593 | false, | 1641 | false, |
| 1594 | false, | 1642 | false, |
| @@ -1603,6 +1651,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1603 | ACL_DT_UNDEFINED, | 1651 | ACL_DT_UNDEFINED, |
| 1604 | ACL_DT_UNDEFINED}, | 1652 | ACL_DT_UNDEFINED}, |
| 1605 | 1653 | ||
| 1654 | + // v2:bias 输入侧 format 校验已删(outBias 同为 NCHW,same 一致),约束下放 wqbmmv2 | ||
| 1606 | {"ascend950_test_bias_format_invalid", | 1655 | {"ascend950_test_bias_format_invalid", |
| 1607 | {64, 128}, | 1656 | {64, 128}, |
| 1608 | {128, 64}, | 1657 | {128, 64}, |
| @@ -1618,7 +1667,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1618 | ACL_FLOAT8_E8M0, | 1667 | ACL_FLOAT8_E8M0, |
| 1619 | 32, | 1668 | 32, |
| 1620 | false, | 1669 | false, |
| 1621 | - ACLNN_ERR_PARAM_INVALID, | 1670 | + ACLNN_SUCCESS, |
| 1622 | false, | 1671 | false, |
| 1623 | false, | 1672 | false, |
| 1624 | false, | 1673 | false, |
| @@ -1633,6 +1682,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1633 | ACL_DT_UNDEFINED, | 1682 | ACL_DT_UNDEFINED, |
| 1634 | ACL_DT_UNDEFINED}, | 1683 | ACL_DT_UNDEFINED}, |
| 1635 | 1684 | ||
| 1685 | + // v2:bias 输入侧 viewShape 校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 1636 | {"ascend950_test_GMM_bias_shape_invalid", | 1686 | {"ascend950_test_GMM_bias_shape_invalid", |
| 1637 | {2, 64, 128}, | 1687 | {2, 64, 128}, |
| 1638 | {2, 128, 64}, | 1688 | {2, 128, 64}, |
| @@ -1648,7 +1698,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1648 | ACL_FLOAT8_E8M0, | 1698 | ACL_FLOAT8_E8M0, |
| 1649 | 32, | 1699 | 32, |
| 1650 | true, | 1700 | true, |
| 1651 | - ACLNN_ERR_PARAM_INVALID, | 1701 | + ACLNN_SUCCESS, |
| 1652 | false, | 1702 | false, |
| 1653 | false, | 1703 | false, |
| 1654 | false, | 1704 | false, |
| @@ -1663,6 +1713,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1663 | ACL_DT_UNDEFINED, | 1713 | ACL_DT_UNDEFINED, |
| 1664 | ACL_DT_UNDEFINED}, | 1714 | ACL_DT_UNDEFINED}, |
| 1665 | 1715 | ||
| 1716 | + // v2:bias 输入侧 viewShape 校验已删,约束下放 wqbmmv2,preprocess 放行 | ||
| 1666 | {"ascend950_test_GMM_bias_1d_shape_invalid", | 1717 | {"ascend950_test_GMM_bias_1d_shape_invalid", |
| 1667 | {2, 64, 128}, | 1718 | {2, 64, 128}, |
| 1668 | {2, 128, 64}, | 1719 | {2, 128, 64}, |
| @@ -1678,7 +1729,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1678 | ACL_FLOAT8_E8M0, | 1729 | ACL_FLOAT8_E8M0, |
| 1679 | 32, | 1730 | 32, |
| 1680 | true, | 1731 | true, |
| 1681 | - ACLNN_ERR_PARAM_INVALID, | 1732 | + ACLNN_SUCCESS, |
| 1682 | false, | 1733 | false, |
| 1683 | false, | 1734 | false, |
| 1684 | false, | 1735 | false, |
| @@ -1725,7 +1776,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1725 | ACL_DT_UNDEFINED}, | 1776 | ACL_DT_UNDEFINED}, |
| 1726 | 1777 | ||
| 1727 | // weight 末两维 strides 既非连续也非严格转置({N, 2}),INT4 视图非法 | 1778 | // weight 末两维 strides 既非连续也非严格转置({N, 2}),INT4 视图非法 |
| 1728 | - // (NZ_C0_16 出命中非转置 NZ 条目,由 CheckWeightInt4DirectCopyView 拒绝) | 1779 | + // (NZ_C0_16 出命中非转置 NZ 条目,由 CheckWeight4BitDirectCopyView 拒绝) |
| 1729 | {"ascend950_test_A16S4_INT4_weight_strides_invalid", | 1780 | {"ascend950_test_A16S4_INT4_weight_strides_invalid", |
| 1730 | {64, 128}, | 1781 | {64, 128}, |
| 1731 | {128, 128}, | 1782 | {128, 128}, |
| @@ -1756,7 +1807,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1756 | ACL_DT_UNDEFINED, | 1807 | ACL_DT_UNDEFINED, |
| 1757 | ACL_DT_UNDEFINED}, | 1808 | ACL_DT_UNDEFINED}, |
| 1758 | 1809 | ||
| 1759 | - // [STC a16s4 T-12] per-channel scale {N} 与 weight N=128 不匹配(CheckWeightScalePerChannelViewShape) | 1810 | + // [STC a16s4 T-12] per-channel scale {N} 与 weight N=128 不匹配:v2 起 preprocess 放行(约束下放 wqbmmv2) |
| 1760 | {"ascend950_test_A16S4_perchannel_scale_n_mismatch", | 1811 | {"ascend950_test_A16S4_perchannel_scale_n_mismatch", |
| 1761 | {64, 128}, | 1812 | {64, 128}, |
| 1762 | {64, 128}, | 1813 | {64, 128}, |
| @@ -1772,7 +1823,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1772 | ACL_DT_UNDEFINED, | 1823 | ACL_DT_UNDEFINED, |
| 1773 | 0, | 1824 | 0, |
| 1774 | false, | 1825 | false, |
| 1775 | - ACLNN_ERR_PARAM_INVALID, | 1826 | + ACLNN_SUCCESS, |
| 1776 | false, | 1827 | false, |
| 1777 | false, | 1828 | false, |
| 1778 | false, | 1829 | false, |
| @@ -1787,7 +1838,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1787 | ACL_DT_UNDEFINED, | 1838 | ACL_DT_UNDEFINED, |
| 1788 | ACL_DT_UNDEFINED}, | 1839 | ACL_DT_UNDEFINED}, |
| 1789 | 1840 | ||
| 1790 | - // [STC a16s4 T-13] per-channel scale {1, N} 与 weight N=128 不匹配(CheckWeightScalePerChannelViewShape) | 1841 | + // [STC a16s4 T-13] per-channel scale {1, N} 与 weight N=128 不匹配:v2 起 preprocess 放行(约束下放 wqbmmv2) |
| 1791 | {"ascend950_test_A16S4_perchannel_scale_1n_mismatch", | 1842 | {"ascend950_test_A16S4_perchannel_scale_1n_mismatch", |
| 1792 | {64, 128}, | 1843 | {64, 128}, |
| 1793 | {64, 128}, | 1844 | {64, 128}, |
| @@ -1803,7 +1854,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1803 | ACL_DT_UNDEFINED, | 1854 | ACL_DT_UNDEFINED, |
| 1804 | 0, | 1855 | 0, |
| 1805 | false, | 1856 | false, |
| 1806 | - ACLNN_ERR_PARAM_INVALID, | 1857 | + ACLNN_SUCCESS, |
| 1807 | false, | 1858 | false, |
| 1808 | false, | 1859 | false, |
| 1809 | false, | 1860 | false, |
| @@ -1818,7 +1869,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1818 | ACL_DT_UNDEFINED, | 1869 | ACL_DT_UNDEFINED, |
| 1819 | ACL_DT_UNDEFINED}, | 1870 | ACL_DT_UNDEFINED}, |
| 1820 | 1871 | ||
| 1821 | - // per-channel 形状 scale {N} 配 kGroupSize>0 属矛盾输入(CheckKGroupSizeZero) | 1872 | + // per-channel 形状 scale {N} 配 kGroupSize>0:v2 起 preprocess 放行(kGroupSize 一致性约束下放 wqbmmv2) |
| 1822 | {"ascend950_test_A16S4_perchannel_kgroupsize_nonzero", | 1873 | {"ascend950_test_A16S4_perchannel_kgroupsize_nonzero", |
| 1823 | {64, 128}, | 1874 | {64, 128}, |
| 1824 | {64, 128}, | 1875 | {64, 128}, |
| @@ -1834,7 +1885,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1834 | ACL_DT_UNDEFINED, | 1885 | ACL_DT_UNDEFINED, |
| 1835 | 64, | 1886 | 64, |
| 1836 | false, | 1887 | false, |
| 1837 | - ACLNN_ERR_PARAM_INVALID, | 1888 | + ACLNN_SUCCESS, |
| 1838 | false, | 1889 | false, |
| 1839 | false, | 1890 | false, |
| 1840 | false, | 1891 | false, |
| @@ -1849,7 +1900,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1849 | ACL_DT_UNDEFINED, | 1900 | ACL_DT_UNDEFINED, |
| 1850 | ACL_DT_UNDEFINED}, | 1901 | ACL_DT_UNDEFINED}, |
| 1851 | 1902 | ||
| 1852 | - // scale {2} 非单元素不命中 per-tensor,路由到 per-channel 后 N 不匹配 | 1903 | + // scale {2} 非单元素不命中 per-tensor,路由到 per-channel;N 不匹配 v2 起放行(下放 wqbmmv2) |
| 1853 | {"ascend950_test_A16S4_pertensor_scale_two_elem", | 1904 | {"ascend950_test_A16S4_pertensor_scale_two_elem", |
| 1854 | {64, 128}, | 1905 | {64, 128}, |
| 1855 | {64, 128}, | 1906 | {64, 128}, |
| @@ -1865,7 +1916,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1865 | ACL_DT_UNDEFINED, | 1916 | ACL_DT_UNDEFINED, |
| 1866 | 0, | 1917 | 0, |
| 1867 | false, | 1918 | false, |
| 1868 | - ACLNN_ERR_PARAM_INVALID, | 1919 | + ACLNN_SUCCESS, |
| 1869 | false, | 1920 | false, |
| 1870 | false, | 1921 | false, |
| 1871 | false, | 1922 | false, |
| @@ -1911,7 +1962,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 1911 | ACL_DT_UNDEFINED, | 1962 | ACL_DT_UNDEFINED, |
| 1912 | ACL_DT_UNDEFINED}, | 1963 | ACL_DT_UNDEFINED}, |
| 1913 | 1964 | ||
| 1914 | - // [STC a16s4 T-24] outWeight dtype 与 weight 不同(CheckOutWeightDtypeSame) | 1965 | + // [STC a16s4 T-24] outWeight dtype 与 weight 不同:NZ 出 dtype 须与输入一致,拒绝 |
| 1915 | {"ascend950_test_A16S4_outWeight_dtype_mismatch", | 1966 | {"ascend950_test_A16S4_outWeight_dtype_mismatch", |
| 1916 | {64, 128}, | 1967 | {64, 128}, |
| 1917 | {64, 128}, | 1968 | {64, 128}, |
| @@ -2069,7 +2120,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 2069 | ACL_DT_UNDEFINED, | 2120 | ACL_DT_UNDEFINED, |
| 2070 | ACL_DT_UNDEFINED}, | 2121 | ACL_DT_UNDEFINED}, |
| 2071 | 2122 | ||
| 2072 | - // [STC a16f4 T-31] A16MXF4 kGroupSize=64 ≠ 32(CheckKGroupSizeMx) | 2123 | + // [STC a16f4 T-31] A16MXF4 kGroupSize=64 ≠ 32:v2 起 preprocess 放行(kGroupSize 约束下放 wqbmmv2) |
| 2073 | {"ascend950_test_A16MXF4_kgroupsize_not_32", | 2124 | {"ascend950_test_A16MXF4_kgroupsize_not_32", |
| 2074 | {64, 128}, | 2125 | {64, 128}, |
| 2075 | {64, 128}, | 2126 | {64, 128}, |
| @@ -2085,7 +2136,7 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 2085 | ACL_DT_UNDEFINED, | 2136 | ACL_DT_UNDEFINED, |
| 2086 | 64, | 2137 | 64, |
| 2087 | false, | 2138 | false, |
| 2088 | - ACLNN_ERR_PARAM_INVALID, | 2139 | + ACLNN_SUCCESS, |
| 2089 | false, | 2140 | false, |
| 2090 | false, | 2141 | false, |
| 2091 | false, | 2142 | false, |
| @@ -2162,6 +2213,38 @@ static WeightQuantPreprocessTestParam casesParams[] = { | |||
| 2162 | ACL_DT_UNDEFINED, | 2213 | ACL_DT_UNDEFINED, |
| 2163 | ACL_DT_UNDEFINED}, | 2214 | ACL_DT_UNDEFINED}, |
| 2164 | 2215 | ||
| 2216 | + // [STC a16f4 T-42] A16F4 per-group 转置 weight + ND 出:pergroup 不支持转置(转置仅 MX 支持 ND 直拷), | ||
| 2217 | + // judge 命中 pergroup NZ 条目后由 CheckWeightNotTrans 拒绝 | ||
| 2218 | + {"ascend950_test_A16F4_pergroup_trans_nd_reject", | ||
| 2219 | + {64, 128}, | ||
| 2220 | + {128, 64}, | ||
| 2221 | + {1, 64}, | ||
| 2222 | + {2, 128}, | ||
| 2223 | + {2, 128}, | ||
| 2224 | + {128, 1}, | ||
| 2225 | + ACL_FLOAT4_E2M1, | ||
| 2226 | + ACL_FLOAT16, | ||
| 2227 | + ACL_FORMAT_ND, | ||
| 2228 | + ACL_FORMAT_ND, | ||
| 2229 | + ACL_FLOAT16, | ||
| 2230 | + ACL_DT_UNDEFINED, | ||
| 2231 | + 32, | ||
| 2232 | + false, | ||
| 2233 | + ACLNN_ERR_PARAM_INVALID, | ||
| 2234 | + false, | ||
| 2235 | + false, | ||
| 2236 | + false, | ||
| 2237 | + false, | ||
| 2238 | + false, | ||
| 2239 | + false, | ||
| 2240 | + {}, | ||
| 2241 | + {}, | ||
| 2242 | + ACL_DT_UNDEFINED, | ||
| 2243 | + ACL_FORMAT_ND, | ||
| 2244 | + ACL_FORMAT_ND, | ||
| 2245 | + ACL_DT_UNDEFINED, | ||
| 2246 | + ACL_DT_UNDEFINED}, | ||
| 2247 | + | ||
| 2165 | }; | 2248 | }; |
| 2166 | 2249 | ||
| 2167 | INSTANTIATE_TEST_SUITE_P(WeightQuantPreprocessGMM, l2_weight_quant_preprocess_gmm_test, | 2250 | INSTANTIATE_TEST_SUITE_P(WeightQuantPreprocessGMM, l2_weight_quant_preprocess_gmm_test, |