已合并
feat: WeightQuantPreprocess A16MXF4 支持转置 weight ND 直拷;ErrMsg reason 句号整改 #5241
feat: WeightQuantPreprocess A16MXF4 支持转置 weight ND 直拷;ErrMsg reason 句号整改 #5241
已合并
马琦钧创建于 8月31日
共 2 个文件变更+296-855
@@ -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 
824static WeightQuantPreprocessTestParam casesParams[] = {862static 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 
2167INSTANTIATE_TEST_SUITE_P(WeightQuantPreprocessGMM, l2_weight_quant_preprocess_gmm_test,2250INSTANTIATE_TEST_SUITE_P(WeightQuantPreprocessGMM, l2_weight_quant_preprocess_gmm_test,