From b9da48da95e1e0ffbf015e0ef94639ea5d3c9a05 Mon Sep 17 00:00:00 2001 From: zhangkaihuo Date: Thu, 31 Mar 2022 11:22:27 +0800 Subject: [PATCH] Opt the compilation of sparse kernel (#41086) --- cmake/phi.cmake | 3 ++ ...ad_kernel.cc => activation_grad_kernel.cc} | 2 +- ...grad_kernel.h => activation_grad_kernel.h} | 0 ...ivation_kernel.cc => activation_kernel.cc} | 2 +- ...ctivation_kernel.h => activation_kernel.h} | 0 .../kernels/test_sparse_activation_dev_api.cc | 4 +- .../tests/unittests/test_sparse_utils_op.py | 4 ++ python/paddle/tensor/to_string.py | 53 ++++++++++++------- 8 files changed, 45 insertions(+), 23 deletions(-) rename paddle/phi/kernels/sparse/{sparse_activation_grad_kernel.cc => activation_grad_kernel.cc} (97%) rename paddle/phi/kernels/sparse/{sparse_activation_grad_kernel.h => activation_grad_kernel.h} (100%) rename paddle/phi/kernels/sparse/{sparse_activation_kernel.cc => activation_kernel.cc} (97%) rename paddle/phi/kernels/sparse/{sparse_activation_kernel.h => activation_kernel.h} (100%) diff --git a/cmake/phi.cmake b/cmake/phi.cmake index 34d72306ab3..6079100e9a7 100644 --- a/cmake/phi.cmake +++ b/cmake/phi.cmake @@ -116,6 +116,9 @@ function(kernel_library TARGET) if ("${kernel_library_SUB_DIR}" STREQUAL "selected_rows") set(target_suffix "_sr") endif() + if ("${kernel_library_SUB_DIR}" STREQUAL "sparse") + set(target_suffix "_sp") + endif() list(LENGTH kernel_library_SRCS kernel_library_SRCS_len) # one kernel only match one impl file in each backend diff --git a/paddle/phi/kernels/sparse/sparse_activation_grad_kernel.cc b/paddle/phi/kernels/sparse/activation_grad_kernel.cc similarity index 97% rename from paddle/phi/kernels/sparse/sparse_activation_grad_kernel.cc rename to paddle/phi/kernels/sparse/activation_grad_kernel.cc index ddfd51bc79b..9eca14e6609 100644 --- a/paddle/phi/kernels/sparse/sparse_activation_grad_kernel.cc +++ b/paddle/phi/kernels/sparse/activation_grad_kernel.cc @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/phi/kernels/sparse/sparse_activation_grad_kernel.h" +#include "paddle/phi/kernels/sparse/activation_grad_kernel.h" #include "paddle/phi/kernels/activation_grad_kernel.h" #include "paddle/phi/kernels/copy_kernel.h" #include "paddle/phi/kernels/empty_kernel.h" diff --git a/paddle/phi/kernels/sparse/sparse_activation_grad_kernel.h b/paddle/phi/kernels/sparse/activation_grad_kernel.h similarity index 100% rename from paddle/phi/kernels/sparse/sparse_activation_grad_kernel.h rename to paddle/phi/kernels/sparse/activation_grad_kernel.h diff --git a/paddle/phi/kernels/sparse/sparse_activation_kernel.cc b/paddle/phi/kernels/sparse/activation_kernel.cc similarity index 97% rename from paddle/phi/kernels/sparse/sparse_activation_kernel.cc rename to paddle/phi/kernels/sparse/activation_kernel.cc index 5f6bcda8262..a1a00897d33 100644 --- a/paddle/phi/kernels/sparse/sparse_activation_kernel.cc +++ b/paddle/phi/kernels/sparse/activation_kernel.cc @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/phi/kernels/sparse/sparse_activation_kernel.h" +#include "paddle/phi/kernels/sparse/activation_kernel.h" #include "paddle/phi/kernels/copy_kernel.h" #include "paddle/phi/kernels/empty_kernel.h" diff --git a/paddle/phi/kernels/sparse/sparse_activation_kernel.h b/paddle/phi/kernels/sparse/activation_kernel.h similarity index 100% rename from paddle/phi/kernels/sparse/sparse_activation_kernel.h rename to paddle/phi/kernels/sparse/activation_kernel.h diff --git a/paddle/phi/tests/kernels/test_sparse_activation_dev_api.cc b/paddle/phi/tests/kernels/test_sparse_activation_dev_api.cc index ee4d021d397..43640da270a 100644 --- a/paddle/phi/tests/kernels/test_sparse_activation_dev_api.cc +++ b/paddle/phi/tests/kernels/test_sparse_activation_dev_api.cc @@ -24,8 +24,8 @@ limitations under the License. */ #include "paddle/phi/kernels/activation_grad_kernel.h" #include "paddle/phi/kernels/activation_kernel.h" #include "paddle/phi/kernels/empty_kernel.h" -#include "paddle/phi/kernels/sparse/sparse_activation_grad_kernel.h" -#include "paddle/phi/kernels/sparse/sparse_activation_kernel.h" +#include "paddle/phi/kernels/sparse/activation_grad_kernel.h" +#include "paddle/phi/kernels/sparse/activation_kernel.h" #include "paddle/phi/kernels/sparse/sparse_utils_kernel.h" namespace phi { diff --git a/python/paddle/fluid/tests/unittests/test_sparse_utils_op.py b/python/paddle/fluid/tests/unittests/test_sparse_utils_op.py index 010c049c16b..80a7db65166 100644 --- a/python/paddle/fluid/tests/unittests/test_sparse_utils_op.py +++ b/python/paddle/fluid/tests/unittests/test_sparse_utils_op.py @@ -33,6 +33,7 @@ class TestSparseUtils(unittest.TestCase): stop_gradient = False coo = core.eager.sparse_coo_tensor(dense_indices, dense_elements, dense_shape, stop_gradient) + print(coo) def test_create_sparse_csr_tensor(self): @@ -49,6 +50,7 @@ class TestSparseUtils(unittest.TestCase): csr = core.eager.sparse_csr_tensor(dense_crows, dense_cols, dense_elements, dense_shape, stop_gradient) + print(csr) def test_to_sparse_coo(self): @@ -58,6 +60,7 @@ class TestSparseUtils(unittest.TestCase): non_zero_elements = [1, 2, 3, 4, 5] dense_x = paddle.to_tensor(x) out = dense_x.to_sparse_coo(2) + print(out) assert np.array_equal(out.non_zero_indices().numpy(), non_zero_indices) assert np.array_equal(out.non_zero_elements().numpy(), @@ -81,6 +84,7 @@ class TestSparseUtils(unittest.TestCase): non_zero_elements) dense_tensor = out.to_dense() + print(dense_tensor) assert np.array_equal(dense_tensor.numpy(), x) diff --git a/python/paddle/tensor/to_string.py b/python/paddle/tensor/to_string.py index f164bbc466f..6caa792adb1 100644 --- a/python/paddle/tensor/to_string.py +++ b/python/paddle/tensor/to_string.py @@ -286,30 +286,45 @@ def _format_dense_tensor(tensor, indent): def sparse_tensor_to_string(tensor, prefix='Tensor'): indent = len(prefix) + 1 - _template = "{prefix}(shape={shape}, dtype={dtype}, place={place}, stop_gradient={stop_gradient}, \n{indent}{data})" if tensor.is_sparse_coo(): + _template = "{prefix}(shape={shape}, dtype={dtype}, place={place}, stop_gradient={stop_gradient}, \n{indent}{indices}, \n{indent}{values})" indices_tensor = tensor.non_zero_indices() elements_tensor = tensor.non_zero_elements() - indices_data = _format_dense_tensor(indices_tensor, indent) - elements_data = _format_dense_tensor(elements_tensor, indent) - data = 'non_zero_indices=' + indices_data + ',\nnon_zero_elements=' + elements_data + indices_data = 'indices=' + _format_dense_tensor(indices_tensor, indent + + len('indices=')) + values_data = 'values=' + _format_dense_tensor(elements_tensor, indent + + len('values=')) + return _template.format( + prefix=prefix, + shape=tensor.shape, + dtype=tensor.dtype, + place=tensor._place_str, + stop_gradient=tensor.stop_gradient, + indent=' ' * indent, + indices=indices_data, + values=values_data) else: + _template = "{prefix}(shape={shape}, dtype={dtype}, place={place}, stop_gradient={stop_gradient}, \n{indent}{crows}, \n{indent}{cols}, \n{indent}{values})" crows_tensor = tensor.non_zero_crows() cols_tensor = tensor.non_zero_cols() elements_tensor = tensor.non_zero_elements() - crows_data = _format_dense_tensor(crows_tensor, indent) - cols_data = _format_dense_tensor(cols_tensor, indent) - elements_data = _format_dense_tensor(elements_tensor, indent) - data = 'non_zero_crows=' + crows_data + ',\nnon_zero_cols=' + cols_data + ',\nnon_zero_elements=' + elements_data + crows_data = 'crows=' + _format_dense_tensor(crows_tensor, indent + + len('crows=')) + cols_data = 'cols=' + _format_dense_tensor(cols_tensor, indent + + len('cols=')) + values_data = 'values=' + _format_dense_tensor(elements_tensor, indent + + len('values=')) - return _template.format( - prefix=prefix, - shape=tensor.shape, - dtype=tensor.dtype, - place=tensor._place_str, - stop_gradient=tensor.stop_gradient, - indent=' ' * indent, - data=data) + return _template.format( + prefix=prefix, + shape=tensor.shape, + dtype=tensor.dtype, + place=tensor._place_str, + stop_gradient=tensor.stop_gradient, + indent=' ' * indent, + crows=crows_data, + cols=cols_data, + values=values_data) def tensor_to_string(tensor, prefix='Tensor'): @@ -317,11 +332,11 @@ def tensor_to_string(tensor, prefix='Tensor'): _template = "{prefix}(shape={shape}, dtype={dtype}, place={place}, stop_gradient={stop_gradient},\n{indent}{data})" - if not tensor._is_initialized(): - return "Tensor(Not initialized)" - if tensor.is_sparse(): return sparse_tensor_to_string(tensor, prefix) + + if not tensor._is_dense_tensor_hold_allocation(): + return "Tensor(Not initialized)" else: data = _format_dense_tensor(tensor, indent) return _template.format( -- GitLab