已合并
补充 matmulCompress Readme文档 #6966
ww-blue创建于 7月3日
补充 matmulCompress Readme文档 #6966
已合并
共 2 个文件变更+95-0
| @@ -2407,6 +2407,16 @@ | |||
| 2407 | <td>AI Core</td> | 2407 | <td>AI Core</td> |
| 2408 | <td>完成通用矩阵乘计算。</td> | 2408 | <td>完成通用矩阵乘计算。</td> |
| 2409 | </tr> | 2409 | </tr> |
| 2410 | + <tr> | ||
| 2411 | + <td>matmul</td> | ||
| 2412 | + <td><a href="../../matmul/matmul_compress/README.md">matmul_compress</a></td> | ||
| 2413 | + <td>✗</td> | ||
| 2414 | + <td>✗</td> | ||
| 2415 | + <td>✓</td> | ||
| 2416 | + <td>✗</td> | ||
| 2417 | + <td>AI Core</td> | ||
| 2418 | + <td>完成无损解压缩、矩阵乘计算。</td> | ||
| 2419 | + </tr> | ||
| 2410 | <tr> | 2420 | <tr> |
| 2411 | <td>matmul</td> | 2421 | <td>matmul</td> |
| 2412 | <td><a href="../../matmul/matmul_v2_compress_dequant/README.md">matmul_v2_compress_dequant</a></td> | 2422 | <td><a href="../../matmul/matmul_v2_compress_dequant/README.md">matmul_v2_compress_dequant</a></td> |
| @@ -0,0 +1,85 @@ | |||
| 1 | +# MatMulCompress | ||
| 2 | + | ||
| 3 | +## 产品支持情况 | ||
| 4 | + | ||
| 5 | +| 产品 | 是否支持 | | ||
| 6 | +| ---- | :----:| | ||
| 7 | +|Ascend 950PR/Ascend 950DT|×| | ||
| 8 | +|Atlas A3 训练系列产品/Atlas A3 推理系列产品|×| | ||
| 9 | +|Atlas A2 训练系列产品/Atlas A2 推理系列产品|×| | ||
| 10 | +|Atlas 200I/500 A2 推理产品|×| | ||
| 11 | +|Atlas 推理系列产品|√| | ||
| 12 | +|Atlas 训练系列产品|×| | ||
| 13 | + | ||
| 14 | +## 功能说明 | ||
| 15 | + | ||
| 16 | +- **算子功能**:进行矩阵乘计算时,可先通过msModelSlim工具对右矩阵进行无损压缩,减少内存占用,然后通过本接口完成无损解压缩、矩阵乘计算。 | ||
| 17 | +- **计算公式**: | ||
| 18 | + | ||
| 19 | + ``` | ||
| 20 | + x2_unzip = unzip(x2, compressIndex) | ||
| 21 | + result = x1 @ x2_unzip + bias | ||
| 22 | + ``` | ||
| 23 | + | ||
| 24 | + 其中x2表示右矩阵经过msModelSlim工具压缩后的一维数据,compressIndex表示压缩算法相关的信息,x2_unzip是接口内部进行无损解压缩后的数据(与原始右矩阵数据一致)。 | ||
| 25 | + | ||
| 26 | +## 参数说明 | ||
| 27 | + | ||
| 28 | +<table style="undefined;table-layout: fixed; width: 869px"><colgroup> | ||
| 29 | +<col style="width: 144px"> | ||
| 30 | +<col style="width: 166px"> | ||
| 31 | +<col style="width: 343px"> | ||
| 32 | +<col style="width: 114px"> | ||
| 33 | +<col style="width: 102px"> | ||
| 34 | +</colgroup> | ||
| 35 | +<thead> | ||
| 36 | + <tr> | ||
| 37 | + <th>参数名</th> | ||
| 38 | + <th>输入/输出/属性</th> | ||
| 39 | + <th>描述</th> | ||
| 40 | + <th>数据类型</th> | ||
| 41 | + <th>数据格式</th> | ||
| 42 | + </tr></thead> | ||
| 43 | +<tbody> | ||
| 44 | + <tr> | ||
| 45 | + <td>x1</td> | ||
| 46 | + <td>输入张量</td> | ||
| 47 | + <td>矩阵乘的左输入,2维张量。</td> | ||
| 48 | + <td>FLOAT16</td> | ||
| 49 | + <td>ND</td> | ||
| 50 | + </tr> | ||
| 51 | + <tr> | ||
| 52 | + <td>x2</td> | ||
| 53 | + <td>输入张量</td> | ||
| 54 | + <td>压缩后的矩阵乘右输入,1维张量。</td> | ||
| 55 | + <td>FLOAT16</td> | ||
| 56 | + <td>ND</td> | ||
| 57 | + </tr> | ||
| 58 | + <tr> | ||
| 59 | + <td>compressIndex</td> | ||
| 60 | + <td>输入张量</td> | ||
| 61 | + <td>矩阵乘右输入的压缩索引表,1维张量。</td> | ||
| 62 | + <td>INT8</td> | ||
| 63 | + <td>ND</td> | ||
| 64 | + </tr> | ||
| 65 | + <tr> | ||
| 66 | + <td>bias</td> | ||
| 67 | + <td>输入张量</td> | ||
| 68 | + <td>偏置项,支持空指针传入。</td> | ||
| 69 | + <td>FLOAT</td> | ||
| 70 | + <td>ND</td> | ||
| 71 | + </tr> | ||
| 72 | + <tr> | ||
| 73 | + <td>out</td> | ||
| 74 | + <td>输出张量</td> | ||
| 75 | + <td>计算结果输出。</td> | ||
| 76 | + <td>FLOAT16</td> | ||
| 77 | + <td>ND</td> | ||
| 78 | + </tr> | ||
| 79 | +</tbody></table> | ||
| 80 | + | ||
| 81 | +## 约束说明 | ||
| 82 | + | ||
| 83 | +- x1和x2_unzip的Reduce维度大小必须相等。 | ||
| 84 | +- 所有输入张量不支持非连续的Tensor。 | ||
🟡 Medium Priority README 第 84 行声明"所有输入张量不支持非连续的Tensor",但该约束与实际代码行为和详细 API 文档均矛盾:
失效模式:用户可能被误导,在调用前进行不必要的手动连续性转换,增加额外开发工作和性能开销。更严重的是,用户看到该约束后可能认为非连续 Tensor 完全不可用,从而对输入数据的组织方式产生错误理解。 建议:将第 84 行改为与详细 API 文档一致的说明:所有输入张量均支持非连续 Tensor(框架通过 AutoContiguous 机制自动处理连续性转换)。或直接删除该行,因为这是框架自动处理的细节,对用户并非硬性约束。 ![]() ![]() 不准确? | |||
| 85 | + | ||


🟠 High Priority
README 第 55 行将 x2(压缩后的右矩阵数据)的数据类型标注为 FLOAT16,但代码实现中 x2 的数据类型在所有层级均被定义为 INT8:
matmul_compress_def.cpp第 31 行:Input("B")定义为DataType({ge::DT_INT8})aclnn_matmul_compress.cpp第 26 行:X2_DTYPE_SUPPORT_LIST = {DataType::DT_INT8},运行时校验 weight 必须为 INT8matmul_compress.h第 70 行:kernel 中gm_b.SetGlobalBuffer(reinterpret_cast<__gm__ int8_t *>(B)),将 B 解释为 int8_t 指针matmul_compress.h第 385 行:AscendC::GlobalTensor<int8_t> gm_b声明失效模式:用户按照 README 传入 FLOAT16 类型的 x2,将在
CheckDtypeValid校验时命中ACLNN_ERR_PARAM_INVALID(错误码 161002),算子调用直接失败。压缩后的数据本质上是一维字节流,INT8 是正确的数据类型。建议:将 x2 行(第 54-56 行)的数据类型从 FLOAT16 改为 INT8。建议同步检查详细接口文档
docs/aclnnMatmulCompress.md中 weight 参数的数据类型(第 90 行也存在同样的问题)。