已合并
补充 matmulCompress Readme文档 #6966
ww-blue创建于 7月3日
补充 matmulCompress Readme文档 #6966
已合并
ww-blue创建于 7月3日
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>
atomgit-bot
atomgit-botatomgit-bot7月3日

🟠 High Priority

README 第 55 行将 x2(压缩后的右矩阵数据)的数据类型标注为 FLOAT16,但代码实现中 x2 的数据类型在所有层级均被定义为 INT8:

  1. matmul_compress_def.cpp 第 31 行:Input("B") 定义为 DataType({ge::DT_INT8})
  2. aclnn_matmul_compress.cpp 第 26 行:X2_DTYPE_SUPPORT_LIST = {DataType::DT_INT8},运行时校验 weight 必须为 INT8
  3. matmul_compress.h 第 70 行:kernel 中 gm_b.SetGlobalBuffer(reinterpret_cast<__gm__ int8_t *>(B)),将 B 解释为 int8_t 指针
  4. 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 行也存在同样的问题)。

likedislike
不准确?
ww-blue
ww-blue
7月3日 评论:
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。
atomgit-bot
atomgit-botatomgit-bot7月3日

🟡 Medium Priority

README 第 84 行声明"所有输入张量不支持非连续的Tensor",但该约束与实际代码行为和详细 API 文档均矛盾:

  1. matmul_compress_def.cpp 第 28-46 行:所有输入(A/B/bias/compress_index)均调用了 .AutoContiguous(),GE 框架会自动将非连续 Tensor 转为连续后再传给算子
  2. aclnn_matmul_compress.cpp 第 143 行:bias = l0op::Contiguous(bias, uniqueExecutor.get()) — API 实现层显式处理 bias 的连续性转换
  3. aclnn_matmul_compress.cpp 第 156 行注释明确写道:"out可能是非连续的tensor"
  4. 详细 API 文档 aclnnMatmulCompress.md 第 83/93/103/113 行:"非连续tensor" 列对 x/weight/bias/compressIndex 均标注为 √(支持)

失效模式:用户可能被误导,在调用前进行不必要的手动连续性转换,增加额外开发工作和性能开销。更严重的是,用户看到该约束后可能认为非连续 Tensor 完全不可用,从而对输入数据的组织方式产生错误理解。

建议:将第 84 行改为与详细 API 文档一致的说明:所有输入张量均支持非连续 Tensor(框架通过 AutoContiguous 机制自动处理连续性转换)。或直接删除该行,因为这是框架自动处理的细节,对用户并非硬性约束。

likedislike
不准确?
ww-blue
ww-blue
7月3日 评论:
85+