From 3b57028865c753d42535b72fddbfea5866ee6085 Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Wed, 25 Oct 2023 15:56:28 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E3=80=90Hackathon=205th=20No.110?= =?UTF-8?q?=E3=80=91=E4=B8=BA=20Paddle=20=E5=A2=9E=E5=BC=BA=20sparse.matmu?= =?UTF-8?q?l=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20231025_api_design_for_sparse_matmul.md | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 rfcs/APIs/20231025_api_design_for_sparse_matmul.md diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md new file mode 100644 index 000000000..4a66a6f9c --- /dev/null +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -0,0 +1,147 @@ +# paddle.sparse.matmul 增强设计文档 + +|API名称 | addle.sparse.matmul | +|---|---| +|提交作者 | MayYouBeProsperous | +|提交时间 | 2023-10-25 | +|版本号 | V1.0 | +|依赖飞桨版本 | develop | +|文件名 | 20231025_api_design_for_sparse_matmul.md
| + + +# 一、概述 +## 1、相关背景 +深度学习中有许多模型使用到了稀疏矩阵的乘法算子。稀疏矩阵的乘法一般可支持 `COO*Dense`、`COO*COO`、`CSR*Dense`、`CSR*CSR` 四种计算模式,目前 Paddle 已支持 `COO*Dense`、`CSR*Dense` 两种。 + + +## 2、功能目标 +为稀疏 API `paddle.sparse.matmul` 完善 `COO*COO`、`CSR*CSR` 两种计算模式。 + +## 3、意义 + +完善稀疏API `paddle.sparse.matmul` 的功能,提升稀疏 tensor API 的完整度。 + +# 二、飞桨现状 +目前 Paddle 已支持 `COO*Dense`、`CSR*Dense` 计算模式,不支持 `COO*COO`、`CSR*CSR` 计算模式。 + +# 三、业内方案调研 +## PyTorch +Pytorch 的稀疏矩阵乘法的实现代码的位置在 `pytorch/aten/src/ATen/native/sparse/SparseMatMul.cpp`。 + +函数 `sparse_matmul_kernel` 在计算稀疏矩阵乘法时,会将两个相乘的矩阵统一为 `CSR` 模式,再进行计算,得到 `CSR` 模式的计算结果。如果想要获得 `COO` 模式的计算结果,函数会将 `CSR` 模式转化为 `COO` 模式。 + +```cpp +template +void sparse_matmul_kernel( + Tensor& output, + const Tensor& mat1, + const Tensor& mat2) { + ... +} +``` + + +## TensorFlow +TensorFlow 的稀疏矩阵乘法的实现代码的位置在 `tensorflow\core\kernels\sparse\sparse_mat_mul_op.cc`。 + +主要使用了 `cudaSparse` 库实现计算。 +```cpp +#if GOOGLE_CUDA && (CUDA_VERSION >= 12000) + GpuSparse cudaSparse(ctx); + OP_REQUIRES_OK(ctx, cudaSparse.Initialize()); + + ... + + OP_REQUIRES_OK(ctx, + cudaSparse.SpGEMM_compute(matA, matB, matC, gemmDesc, &bufferSize2, nullptr)); +``` + + +# 四、对比分析 +PyTorch 中实现了 `CSR*CSR` 模式的稀疏矩阵乘法计算,在其他模式 `CSR*COO`、`COO*COO` 的计算时,会进行稀疏矩阵模式的转换。 + +TensorFlow 中是调用了 `cudaSparse` 库完成稀疏矩阵乘法计算。 + +Paddle 中已经有部分的稀疏矩阵乘法 API,代码位置在 `paddle/phi/kernels/sparse/gpu/matmul_kernel.cu`,主要是通过`cudaSparse` 库完成计算。 + +# 五、设计思路与实现方案 + +## 命名与参数设计 +Paddle 中已完成 `COO*COO`、`CSR*CSR` 计算模式的函数设计。 +```yaml +- op: matmul + args : (Tensor x, Tensor y) + output : Tensor(out) + infer_meta : + func : MatmulInferMeta + param: [x, y, false, false] + kernel : + func : matmul_csr_dense {sparse_csr, dense -> dense}, + matmul_csr_csr {sparse_csr, sparse_csr -> sparse_csr}, + matmul_coo_dense {sparse_coo, dense -> dense}, + matmul_coo_coo {sparse_coo, sparse_coo -> sparse_coo} + layout : x + backward: matmul_grad +``` + +## 底层OP设计 +Paddle 中已完成 `COO*COO`、`CSR*CSR` 计算模式的 kernel 设计。 +```cpp +template +void MatmulCooCooKernel(const Context& dev_ctx, + const SparseCooTensor& x, + const SparseCooTensor& y, + SparseCooTensor* out); + +template +void MatmulCsrCsrKernel(const Context& dev_ctx, + const SparseCsrTensor& x, + const SparseCsrTensor& y, + SparseCsrTensor* out); +``` +对应的反向 kernel。 +```cpp +template +void MatmulCooCooGradKernel(const Context& dev_ctx, + const SparseCooTensor& x, + const SparseCooTensor& y, + const SparseCooTensor& dout, + SparseCooTensor* dx, + SparseCooTensor* dy); + +template +void MatmulCsrCsrGradKernel(const Context& dev_ctx, + const SparseCsrTensor& x, + const SparseCsrTensor& y, + const SparseCsrTensor& dout, + SparseCsrTensor* dx, + SparseCsrTensor* dy); +``` + +## API实现方案 +在 `paddle/phi/kernels/sparse/gpu/matmul_kernel.cu` 中实现 `MatmulCooCooKernel` 和 `MatmulCsrCsrKernel`; + +在 `paddle/phi/kernels/sparse/gpu/matmul_grad_kernel.cu` 中实现 `MatmulCooCooGradKernel` 和 `MatmulCsrCsrGradKernel`。 + +主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要开发 CPU kernel。 + +# 六、测试和验收的考量 + +在 `test/legacy_test/test_sparse_matmul_op.py` 中补充对 `COO*COO`、`CSR*CSR` 计算模式的测试。参照 `TestMatmul` 类,测试 2 维和 3 维稀疏矩阵的乘法计算。 + +# 七、可行性分析和排期规划 + +## 排期规划 +1. 10月25日~10月30日完成 `MatmulCooCooKernel` 和 `MatmulCsrCsrKernel` 的实现。 +2. 10月31日~11月4日完成 `MatmulCooCooGradKernel` 和 `MatmulCsrCsrGradKernel` 的实现。 +3. 11月5日~11月10日完成测试代码的开发,并编写文档。 + +# 八、影响面 +拓展 `paddle.sparse.matmul` 模块。 + +# 名词解释 +无 + +# 附件及参考资料 + +[The API reference guide for cuSPARSE](https://docs.nvidia.com/cuda/cusparse/) From 22154d8c02e08093e362813b0601bc21ba2e1a3d Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Wed, 25 Oct 2023 15:57:36 +0800 Subject: [PATCH 02/11] fix --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 4a66a6f9c..692a12c3d 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -1,6 +1,6 @@ # paddle.sparse.matmul 增强设计文档 -|API名称 | addle.sparse.matmul | +|API名称 | paddle.sparse.matmul | |---|---| |提交作者 | MayYouBeProsperous | |提交时间 | 2023-10-25 | From bc6b959e82705ee6d73716832193e6b8a555c6d6 Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Wed, 25 Oct 2023 22:08:48 +0800 Subject: [PATCH 03/11] fix --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 692a12c3d..27bbc61e2 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -28,7 +28,7 @@ ## PyTorch Pytorch 的稀疏矩阵乘法的实现代码的位置在 `pytorch/aten/src/ATen/native/sparse/SparseMatMul.cpp`。 -函数 `sparse_matmul_kernel` 在计算稀疏矩阵乘法时,会将两个相乘的矩阵统一为 `CSR` 模式,再进行计算,得到 `CSR` 模式的计算结果。如果想要获得 `COO` 模式的计算结果,函数会将 `CSR` 模式转化为 `COO` 模式。 +函数 `sparse_matmul_kernel` 在计算稀疏矩阵乘法时,会将两个相乘的矩阵统一为 `CSR` 模式,再进行计算,得到 `CSR` 模式的计算结果。如果想要获得 `COO` 模式的计算结果,需将 `CSR` 模式转化为 `COO` 模式。 ```cpp template @@ -44,7 +44,7 @@ void sparse_matmul_kernel( ## TensorFlow TensorFlow 的稀疏矩阵乘法的实现代码的位置在 `tensorflow\core\kernels\sparse\sparse_mat_mul_op.cc`。 -主要使用了 `cudaSparse` 库实现计算。 +主要使用了 `cudaSparse` 库的 `cusparseSpGEMM`实现计算。 ```cpp #if GOOGLE_CUDA && (CUDA_VERSION >= 12000) GpuSparse cudaSparse(ctx); @@ -123,7 +123,7 @@ void MatmulCsrCsrGradKernel(const Context& dev_ctx, 在 `paddle/phi/kernels/sparse/gpu/matmul_grad_kernel.cu` 中实现 `MatmulCooCooGradKernel` 和 `MatmulCsrCsrGradKernel`。 -主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要开发 CPU kernel。 +主要通过调用 `cudaSparse` 库中的 `cusparseSpGEMM` 完成计算实现,目前暂不需要开发 CPU kernel。 # 六、测试和验收的考量 From 4c9fa69885b054956a86c77e5f82430f96805f72 Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Thu, 26 Oct 2023 11:36:50 +0800 Subject: [PATCH 04/11] fix --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 27bbc61e2..8a7a4f890 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -44,7 +44,7 @@ void sparse_matmul_kernel( ## TensorFlow TensorFlow 的稀疏矩阵乘法的实现代码的位置在 `tensorflow\core\kernels\sparse\sparse_mat_mul_op.cc`。 -主要使用了 `cudaSparse` 库的 `cusparseSpGEMM`实现计算。 +主要使用了 `cudaSparse` 库的 `cusparseSpGEMM` 实现计算。 ```cpp #if GOOGLE_CUDA && (CUDA_VERSION >= 12000) GpuSparse cudaSparse(ctx); @@ -123,7 +123,7 @@ void MatmulCsrCsrGradKernel(const Context& dev_ctx, 在 `paddle/phi/kernels/sparse/gpu/matmul_grad_kernel.cu` 中实现 `MatmulCooCooGradKernel` 和 `MatmulCsrCsrGradKernel`。 -主要通过调用 `cudaSparse` 库中的 `cusparseSpGEMM` 完成计算实现,目前暂不需要开发 CPU kernel。 +主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要开发 CPU kernel。 # 六、测试和验收的考量 From f427c4d8b06e5e1cd6976fe704e7abaabff1c30e Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Fri, 27 Oct 2023 11:36:40 +0800 Subject: [PATCH 05/11] fix --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 8a7a4f890..13d0f5e3d 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -123,7 +123,9 @@ void MatmulCsrCsrGradKernel(const Context& dev_ctx, 在 `paddle/phi/kernels/sparse/gpu/matmul_grad_kernel.cu` 中实现 `MatmulCooCooGradKernel` 和 `MatmulCsrCsrGradKernel`。 -主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要开发 CPU kernel。 +API 主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要开发 CPU kernel。 + +`cudaSparse` 库的 `cusparseSpGEMM` 只支持 `CSR*CSR` 模式,在计算 `COO*COO` 模式时,需要进行 `COO` 和 `CSR` 模式之间的转换。 # 六、测试和验收的考量 From d783dcff3fb8b88856400e85e7904c509305f388 Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Fri, 10 Nov 2023 22:11:34 +0800 Subject: [PATCH 06/11] fix --- .../20231025_api_design_for_sparse_matmul.md | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 13d0f5e3d..f7fbf94f8 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -26,41 +26,43 @@ # 三、业内方案调研 ## PyTorch -Pytorch 的稀疏矩阵乘法的实现代码的位置在 `pytorch/aten/src/ATen/native/sparse/SparseMatMul.cpp`。 -函数 `sparse_matmul_kernel` 在计算稀疏矩阵乘法时,会将两个相乘的矩阵统一为 `CSR` 模式,再进行计算,得到 `CSR` 模式的计算结果。如果想要获得 `COO` 模式的计算结果,需将 `CSR` 模式转化为 `COO` 模式。 +Pytorch 中实现了 `CSR*CSR` 计算模式的 kernel 。在计算 `Sparse * Sparse` 时,会将两个相乘的矩阵统一为 `CSR` 模式,再调用 kernel 进行计算得到 `CSR` 计算结果,最后将计算结果转换 `COO` 模式,API 调用方式如下: -```cpp -template -void sparse_matmul_kernel( - Tensor& output, - const Tensor& mat1, - const Tensor& mat2) { - ... -} +```python +torch.sparse.mm +torch.mm ``` +CPU 版本的 kernel 为 `sparse_matmul_kernel` ,其代码的位置在 `pytorch/aten/src/ATen/native/sparse/SparseMatMul.cpp`。 + +CPU kernel 实现了 [论文](https://doi.org/10.1007/BF02070824) 中的稀疏矩阵算法。 + +GPU 版本的 kernel 为 `sparse_sparse_matmul_cuda_kernel` ,其代码的位置在 `pytorch/aten/src/ATen/native/sparse/cuda/SparseMatMul.cu`。 + +GPU kernel 使用了 cuda 实现计算,当 `cudaSparse` 库可用时,kernel 调用 `cusparseSpGEMM` 进行矩阵运算,否则会调用 `thrust` 进行矩阵运算。 ## TensorFlow -TensorFlow 的稀疏矩阵乘法的实现代码的位置在 `tensorflow\core\kernels\sparse\sparse_mat_mul_op.cc`。 +TensorFlow 中的 `SparseTensor` 使用了 `COO` 模式存储稀疏矩阵,为了支持 `CSR` 模式的稀疏矩阵,专门设计了 `CSRSparseMatrix`。 -主要使用了 `cudaSparse` 库的 `cusparseSpGEMM` 实现计算。 -```cpp -#if GOOGLE_CUDA && (CUDA_VERSION >= 12000) - GpuSparse cudaSparse(ctx); - OP_REQUIRES_OK(ctx, cudaSparse.Initialize()); - - ... - - OP_REQUIRES_OK(ctx, - cudaSparse.SpGEMM_compute(matA, matB, matC, gemmDesc, &bufferSize2, nullptr)); +TensorFlow 中没有 `COO*COO` 计算模式的直接实现。 + +`CSR*CSR` 计算模式的 API 调用方式如下: +```python +tensorflow.python.ops.linalg.sparse.sparse_matrix_sparse_mat_mul ``` +算子实现代码的位置在 `tensorflow\core\kernels\sparse\sparse_mat_mul_op.cc`,包含 CPU 版本的 `CSRSparseMatMulCPUOp` 和 GPU 版本的 `CSRSparseMatMulGPUOp`。 + +`CSRSparseMatMulCPUOp` 使用了 `Eigen` 库实现计算;`CSRSparseMatMulGPUOp`使用了 `cudaSparse` 库的 `cusparseSpGEMM` 实现计算。 + # 四、对比分析 -PyTorch 中实现了 `CSR*CSR` 模式的稀疏矩阵乘法计算,在其他模式 `CSR*COO`、`COO*COO` 的计算时,会进行稀疏矩阵模式的转换。 +PyTorch 同时支持 `CSR*CSR`、`COO*COO` 计算模式,其底层只实现了 `CSR*CSR` 模式的稀疏矩阵乘法计算,在计算 `COO*COO` 模式时,底层代码会进行稀疏矩阵模式的转换。 + +TensorFlow 只支持 `CSR*CSR` 计算模式。 -TensorFlow 中是调用了 `cudaSparse` 库完成稀疏矩阵乘法计算。 +PyTorch 和 TensorFlow 在使用 GPU 进行稀疏矩阵乘法计算时,都调用了 `cudaSparse` 库。 Paddle 中已经有部分的稀疏矩阵乘法 API,代码位置在 `paddle/phi/kernels/sparse/gpu/matmul_kernel.cu`,主要是通过`cudaSparse` 库完成计算。 @@ -127,6 +129,9 @@ API 主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要 `cudaSparse` 库的 `cusparseSpGEMM` 只支持 `CSR*CSR` 模式,在计算 `COO*COO` 模式时,需要进行 `COO` 和 `CSR` 模式之间的转换。 +反向算计算方式: + + # 六、测试和验收的考量 在 `test/legacy_test/test_sparse_matmul_op.py` 中补充对 `COO*COO`、`CSR*CSR` 计算模式的测试。参照 `TestMatmul` 类,测试 2 维和 3 维稀疏矩阵的乘法计算。 @@ -147,3 +152,4 @@ API 主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要 # 附件及参考资料 [The API reference guide for cuSPARSE](https://docs.nvidia.com/cuda/cusparse/) +[CSR Sparse Matrix](https://github.com/tensorflow/community/blob/master/rfcs/20200519-csr-sparse-matrix.md) From 1ae6a2a9c5ab6d2908a4f5d16f9fe9643abc8e1c Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Fri, 10 Nov 2023 22:17:36 +0800 Subject: [PATCH 07/11] fix --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index f7fbf94f8..7a0d6e643 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -36,7 +36,7 @@ torch.mm CPU 版本的 kernel 为 `sparse_matmul_kernel` ,其代码的位置在 `pytorch/aten/src/ATen/native/sparse/SparseMatMul.cpp`。 -CPU kernel 实现了 [论文](https://doi.org/10.1007/BF02070824) 中的稀疏矩阵算法。 +CPU kernel 实现了 [Sparse matrix multiplication package (SMMP)](https://doi.org/10.1007/BF02070824) 论文中的稀疏矩阵乘法算法。 GPU 版本的 kernel 为 `sparse_sparse_matmul_cuda_kernel` ,其代码的位置在 `pytorch/aten/src/ATen/native/sparse/cuda/SparseMatMul.cu`。 @@ -130,7 +130,8 @@ API 主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要 `cudaSparse` 库的 `cusparseSpGEMM` 只支持 `CSR*CSR` 模式,在计算 `COO*COO` 模式时,需要进行 `COO` 和 `CSR` 模式之间的转换。 反向算计算方式: - +$dx = dout * y'$ +$dy = x' * dout$ # 六、测试和验收的考量 From 3bb83917b2d0dbae0b94539a8454ee4fbac1651f Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Fri, 10 Nov 2023 22:18:36 +0800 Subject: [PATCH 08/11] fix --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 7a0d6e643..8c033b1fe 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -129,8 +129,10 @@ API 主要通过调用 `cudaSparse` 库完成计算实现,目前暂不需要 `cudaSparse` 库的 `cusparseSpGEMM` 只支持 `CSR*CSR` 模式,在计算 `COO*COO` 模式时,需要进行 `COO` 和 `CSR` 模式之间的转换。 -反向算计算方式: +反向算子计算方式如下: + $dx = dout * y'$ + $dy = x' * dout$ # 六、测试和验收的考量 From bf71887ae32069467e3d85c3abc9b8ade32f614a Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Fri, 10 Nov 2023 23:47:33 +0800 Subject: [PATCH 09/11] fix --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 8c033b1fe..28f66fd25 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -27,7 +27,7 @@ # 三、业内方案调研 ## PyTorch -Pytorch 中实现了 `CSR*CSR` 计算模式的 kernel 。在计算 `Sparse * Sparse` 时,会将两个相乘的矩阵统一为 `CSR` 模式,再调用 kernel 进行计算得到 `CSR` 计算结果,最后将计算结果转换 `COO` 模式,API 调用方式如下: +Pytorch 在计算 `Sparse * Sparse` 时,会将两个相乘的矩阵统一为 `CSR` 模式,再调用 `CSR*CSR` 计算模式的 kernel, 计算得到 `CSR` 计算结果,最后将计算结果转换 `COO` 模式,API 调用方式如下: ```python torch.sparse.mm From 5fae693d8d21aaeebfa29f0b78fa7275d439d418 Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Sat, 11 Nov 2023 21:29:22 +0800 Subject: [PATCH 10/11] fix --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 28f66fd25..8f6084e0e 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -137,7 +137,7 @@ $dy = x' * dout$ # 六、测试和验收的考量 -在 `test/legacy_test/test_sparse_matmul_op.py` 中补充对 `COO*COO`、`CSR*CSR` 计算模式的测试。参照 `TestMatmul` 类,测试 2 维和 3 维稀疏矩阵的乘法计算。 +在 `test/legacy_test/test_sparse_matmul_op.py` 中补充对 `COO*COO`、`CSR*CSR` 计算模式的测试。参照 `TestMatmul` 类,测试 2 维稀疏矩阵的乘法计算。 # 七、可行性分析和排期规划 From e26c8f2b6692c3540cd66407769f95d81c2c1f73 Mon Sep 17 00:00:00 2001 From: MayYouBeProsperous Date: Sun, 12 Nov 2023 14:25:18 +0800 Subject: [PATCH 11/11] FIX --- rfcs/APIs/20231025_api_design_for_sparse_matmul.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md index 8f6084e0e..28f66fd25 100644 --- a/rfcs/APIs/20231025_api_design_for_sparse_matmul.md +++ b/rfcs/APIs/20231025_api_design_for_sparse_matmul.md @@ -137,7 +137,7 @@ $dy = x' * dout$ # 六、测试和验收的考量 -在 `test/legacy_test/test_sparse_matmul_op.py` 中补充对 `COO*COO`、`CSR*CSR` 计算模式的测试。参照 `TestMatmul` 类,测试 2 维稀疏矩阵的乘法计算。 +在 `test/legacy_test/test_sparse_matmul_op.py` 中补充对 `COO*COO`、`CSR*CSR` 计算模式的测试。参照 `TestMatmul` 类,测试 2 维和 3 维稀疏矩阵的乘法计算。 # 七、可行性分析和排期规划