Paddle 【PIR】Sparse 算子 Python API 适配

y4ekin9u  于 2个月前  发布在  Python
关注(0)|答案(1)|浏览(38)

问题描述 Please describe your issue

一,背景和任务列表

任务详情和单测验证请参考之前发布的任务: #57097

  1. Sparse Python API 情况:
    目前 python 端注册了大约46个左右的 API,集中在 python/paddle/sparse 目录下,绝大部分是动态图 API,14个是动静统一的 API,算子定义都定义在 sparse_ops.yaml 及 sparse_backward.yaml 文件中,通过自动代码生成的方式生成在 paddle/fluid/operators/generated_sparse_op.cc 文件,全部符合 yaml 定义规范,多数算子都注册了 coo、csr 两种 kernel,根据 PIR 算子/Kernel 一对一的特点,PIR 下需要区分定义 coo、csr,这点与 SelectedRows 特点相近。
    | 序号 | Python API | 动态图 | 静态图 | Kernel | 是否做到动静一致 |
    | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
    | 1 | sin | 是 | 否@MrJs133

    @risemeup1

    | sin_coo、sin_csr | 是 |
    | 2 | tan | 是 | 否@MrJs133

    | tan_coo、tan_csr | 是 |
    | 3 | asin | 是 | 否@MrJs133

    @risemeup1

    | asin_coo、asin_csr | 是 |
    | 4 | transpose | 是 | 否 | transpose_coo、transpose_csr | 是 |
    | 5 | sum | 是 | 是 | sum_coo、sum_csr | 是 |
    | 6 | atan | 是 | 否 | atan_coo、atan_csr | 是 |
    | 7 | sinh | 是 | 否 | sinh_coo、sinh_csr | 是 |
    | 8 | asinh | 是 | 否 | asinh_coo、asinh_csr | 是 |
    | 9 | atanh | 是 | 否 | atanh_coo、atanh_csr | 是 |
    | 10 | tanh | 是 | 否 | tanh_coo、tanh_csr | 是 |
    | 11 | square | 是 | 否 | square_coo、square_csr | 是 |
    | 12 | sqrt | 是 | 否@MrJs133

    @risemeup1

    | sqrt_coo、sqrt_csr | 是 |
    | 13 | log1p | 是 | 否@MrJs133

    @risemeup1

    | log1p_coo、log1p_csr | 是 |
    | 14 | cast | 是 | 否 | cast_coo、cast_csr | 是 |
    | 15 | pow | 是 | 否 | pow_coo、pow_csr | 是 |
    | 16 | neg | 是 | 否 | scale_coo、scale_csr | 是 |
    | 17 | abs | 是 | 否 | abs_coo、abs_csr | 是 |
    | 18 | coalesce | 是 | 否 | coalesce_coo | 是 |
    | 19 | rad2deg | 是 | 否 | cast_coo、cast_csr、scale_coo、scale_csr | 是 |
    | 20 | deg2rad | 是 | 否 | cast_coo、cast_csr、scale_coo、scale_csr | 是 |
    | 21 | expm1 | 是 | 否 | expm1_coo、expm1_csr | 是 |
    | 22 | reshape | 是 | 是 | reshape_coo、reshape_csr | 是 |
    | 23 | isnan | 是 | 是 | isnan_coo、isnan_csr | 是 |
    | 24 | slice | 是 | 是 | slice_coo、slice_csr | 是 |
    | 25 | pca_lowrank | 是 | 是 | 通过其他 API 组合 | 是 |
    | 26 | addmm | 是 | 否 | addmm_csr_dense、addmm_csr_csr、addmm_coo_dense、addmm_coo_coo | 是 |
    | 27 | sparse_coo_tensor | 是 | 是 | sparse_coo_tensor | 是 |
    | 28 | sparse_csr_tensor | 是 | 否 | sparse_csr_tensor | 是 |
    | 29 | matmul | 是 | 否 | matmul_csr_dense、matmul_csr_csr、matmul_coo_dense、matmul_coo_coo | 是 |
    | 30 | masked_matmul | 是 | 否 | masked_matmul_csr | 是 |
    | 31 | mv | 是 | 否 | mv_coo、mv_csr | 是 |
    | 32 | add | 是 | 是 | add_coo_coo、add_csr_csr、add_coo_dense | 是 |
    | 33 | subtract | 是 | 否 | subtract_coo_coo、subtract_csr_csr | 是 |
    | 34 | multiply | 是 | 否 | multiply_coo_coo、multiply_csr_csr | 是 |
    | 35 | divide | 是 | 否 | divide_coo_coo、divide_csr_csr | 是 |
    | 36 | is_same_shape | 是 | 否 | tensor method | 是 |
    | 37 | relu | 是 | 是 | relu_coo、relu_csr | 是 |
    | 38 | softmax | 是 | 是 | softmax_coo、softmax_csr | 是 |
    | 39 | relu6 | 是 | 否 | relu6_coo、relu6_csr | 是 |
    | 40 | leaky_relu | 是 | 否 | leaky_relu_coo、leaky_relu_csr | 是 |
    | 41 | conv3d | 是 | 是 | conv3d_coo | 是 |
    | 42 | subm_conv3d | 是 | 是 | conv3d_coo | 是 |
    | 43 | conv2d | 是 | 是 | conv2d_coo | 是 |
    | 44 | subm_conv2d | 是 | 是 | conv3d_coo | 是 |
    | 45 | max_pool3d | 是 | 是 | maxpool_coo | 是 |
    | 46 | attention | 是 | 否 | fused_attention_csr | 是 |

  2. 单测现状:

  • 有一些动静统一的api既有动态图下的单测也有静态图下的单测,如sum,conv等,此类单测已经修复完毕;

  • 有一些动静统一的api只有动态图下的单测,没有静态图下的单测,如subm_conv3d,需要补在静态图下的单测,

二、Task 📚

  1. 动静统一的python api,需要补全静态图单测的任务
    | 序号 | Python API | 所在文件 | 对应单测 | 认领人/PR | 单测覆盖率 |
    | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
    | 1 | reshape | Paddle/python/paddle/sparse/unary.py | test/legacy_test/test_sparse_reshape_op.py | | |
    | 2 | add | Paddle/python/paddle/sparse/binary.py | test/deprecated/legacy_test/test_sparse_elementwise_op.py | | |
    | 3 | softmax | python/paddle/sparse/nn/functional/activation.py | test/legacy_test/test_sparse_fused_attention_op.py | | |
    | 4 | subm_conv3d | python/paddle/sparse/nn/functional/conv.py | test/legacy_test/test_sparse_conv_op.py | | |
    | 5 | subm_conv2d | python/paddle/sparse/nn/functional/conv.py | test/legacy_test/test_sparse_conv_op.py | | |
    | 6 | max_pool3d | python/paddle/sparse/nn/functional/pooling.py | test/legacy_test/test_sparse_pooling_op.py | | |

2 仅在动态图下有定义的api,需要对python API进行适配升级,然后补全在动态图和静态图下的单测

序号Python API所在文件对应单测认领人/PR单测覆盖率
7sinpython/paddle/sparse/unary.pytest_sparse_unary_op.py
8tanpython/paddle/sparse/unary.pytest_sparse_unary_op.py
9asinpython/paddle/sparse/unary.pytest_sparse_unary_op.py
10transposepython/paddle/sparse/unary.pytest_sparse_transpose_op.py
11atanpython/paddle/sparse/unary.pytest_sparse_unary_op.py
12sinhpython/paddle/sparse/unary.pytest_sparse_unary_op.py
13asinhpython/paddle/sparse/unary.pytest_sparse_unary_op.py
14atanhpython/paddle/sparse/unary.pytest_sparse_unary_op.py
15tanhpython/paddle/sparse/unary.pytest_sparse_unary_op.py
16squarepython/paddle/sparse/unary.pytest_sparse_unary_op.py
17sqrtpython/paddle/sparse/unary.pytest_sparse_unary_op.py
18log1ppython/paddle/sparse/unary.pytest_sparse_unary_op.py
19powpython/paddle/sparse/unary.pytest_sparse_unary_op.py
20negpython/paddle/sparse/unary.pytest_sparse_unary_op.py
21abspython/paddle/sparse/unary.pytest_sparse_unary_op.py
22castpython/paddle/sparse/unary.pytest_sparse_unary_op.py
23coalescepython/paddle/sparse/unary.pytest_sparse_conv_op.py/test_sparse_pca_lowrank.py/test_sparse_utils_op.py
24rad2degpython/paddle/sparse/unary.pytest_sparse_unary_op.py
25deg2radpython/paddle/sparse/unary.pytest_sparse_unary_op.py
26expm1python/paddle/sparse/unary.pytest_sparse_unary_op.py
27addmmpython/paddle/sparse/unary.pytest_sparse_addmm_op.py
28sparse_csr_tensorpython/paddle/sparse/unary.pytest_sparse_utils_op.py/test_sparse_matmul_op.py
29matmulpython/paddle/sparse/binary.pytest_sparse_matmul_op.py
30masked_matmulpython/paddle/sparse/binary.pytest_sparse_matmul_op.py
31mvpython/paddle/sparse/binary.pytest_sparse_mv_op.py
32subtractpython/paddle/sparse/binary.pytest_sparse_elementwise_op.py
33multiplypython/paddle/sparse/binary.pytest_sparse_elementwise_op.py
34dividepython/paddle/sparse/binary.pytest_sparse_elementwise_op.py
35is_same_shapepython/paddle/sparse/binary.pytest_sparse_is_same_shape_op.py
36relu6python/paddle/sparse/nn/functional/activation.pytest_sparse_unary_op.py
37leaky_relupython/paddle/sparse/nn/functional/activation.pytest_sparse_unary_op.py
38leaky_relupython/paddle/sparse/nn/functional/transformer.pytest_sparse_fused_attention_op.py
1. 认领方式

请大家以 comment 的形式认领任务,如:

【报名】:1、3、12-13

多个任务之间需要使用中文顿号分隔,报名多个连续任务可用横线表示,如 2-5

2. PR提交
  • PR名称需要加前缀 【Migrate Sparse API No.XXX】
  • PR描述中需要附上本issue
  • 评论里或者 review request @risemeup1 研发会进行审核

看板信息

任务方向任务数量提交作品 / 任务认领提交率完成完成率
【快乐开源】PIR下Sparse算子Python API 适配380 / 50.0%00.0%

统计信息

排名不分先后

au9on6nz

au9on6nz1#

收到

risemeup1 ***@***.***> 于2024年7月1日周一 11:01写道:

问题描述 Please describe your issue 一,背景和任务列表

任务详情和单测验证请参考之前发布的任务: #57097
< #57097 >

1. Sparse Python API 情况:
目前 python 端注册了大约46个左右的 API,集中在 python/paddle/sparse 目录下,绝大部分是动态图
API,14个是动静统一的 API,算子定义都定义在 sparse_ops.yaml 及 sparse_backward.yaml
文件中,通过自动代码生成的方式生成在 paddle/fluid/operators/generated_sparse_op.cc 文件,全部符合
yaml 定义规范,多数算子都注册了 coo、csr 两种 kernel,根据 PIR 算子/Kernel 一对一的特点,PIR 下需要区分定义
coo、csr,这点与 SelectedRows 特点相近。

序号 Python API 动态图 静态图 Kernel 是否做到动静一致
1 sin 是 @***.https://github.com/MrJs133
https://camo.githubusercontent.com/524bc671642e65cf29ae42797151b3c5b81468cd4a5c61a6f250f237307b4745/68747470733a2f2f696d672e736869656c64732e696f2f62616467652fe78ab6e680812de68aa5e5908d2d324543433731
sin_coo、sin_csr 是
2 tan 是 @***.https://github.com/MrJs133
https://camo.githubusercontent.com/524bc671642e65cf29ae42797151b3c5b81468cd4a5c61a6f250f237307b4745/68747470733a2f2f696d672e736869656c64732e696f2f62616467652fe78ab6e680812de68aa5e5908d2d324543433731
tan_coo、tan_csr 是
3 asin 是 否 asin_coo、asin_csr 是
4 transpose 是 否 transpose_coo、transpose_csr 是
5 sum 是 是 sum_coo、sum_csr 是
6 atan 是 否 atan_coo、atan_csr 是
7 sinh 是 否 sinh_coo、sinh_csr 是
8 asinh 是 否 asinh_coo、asinh_csr 是
9 atanh 是 否 atanh_coo、atanh_csr 是
10 tanh 是 否 tanh_coo、tanh_csr 是
11 square 是 否 square_coo、square_csr 是
12 sqrt 是 否 sqrt_coo、sqrt_csr 是
13 log1p 是 否 log1p_coo、log1p_csr 是
14 cast 是 否 cast_coo、cast_csr 是
15 pow 是 否 pow_coo、pow_csr 是
16 neg 是 否 scale_coo、scale_csr 是
17 abs 是 否 abs_coo、abs_csr 是
18 coalesce 是 否 coalesce_coo 是
19 rad2deg 是 否 cast_coo、cast_csr、scale_coo、scale_csr 是
20 deg2rad 是 否 cast_coo、cast_csr、scale_coo、scale_csr 是
21 expm1 是 否 expm1_coo、expm1_csr 是
22 reshape 是 是 reshape_coo、reshape_csr 是
23 isnan 是 是 isnan_coo、isnan_csr 是
24 slice 是 是 slice_coo、slice_csr 是
25 pca_lowrank 是 是 通过其他 API 组合 是
26 addmm 是 否 addmm_csr_dense、addmm_csr_csr、addmm_coo_dense、addmm_coo_coo 是
27 sparse_coo_tensor 是 是 sparse_coo_tensor 是
28 sparse_csr_tensor 是 否 sparse_csr_tensor 是
29 matmul 是 否
matmul_csr_dense、matmul_csr_csr、matmul_coo_dense、matmul_coo_coo 是
30 masked_matmul 是 否 masked_matmul_csr 是
31 mv 是 否 mv_coo、mv_csr 是
32 add 是 是 add_coo_coo、add_csr_csr、add_coo_dense 是
33 subtract 是 否 subtract_coo_coo、subtract_csr_csr 是
34 multiply 是 否 multiply_coo_coo、multiply_csr_csr 是
35 divide 是 否 divide_coo_coo、divide_csr_csr 是
36 is_same_shape 是 否 tensor method 是
37 relu 是 是 relu_coo、relu_csr 是
38 softmax 是 是 softmax_coo、softmax_csr 是
39 relu6 是 否 relu6_coo、relu6_csr 是
40 leaky_relu 是 否 leaky_relu_coo、leaky_relu_csr 是
41 conv3d 是 是 conv3d_coo 是
42 subm_conv3d 是 是 conv3d_coo 是
43 conv2d 是 是 conv2d_coo 是
44 subm_conv2d 是 是 conv3d_coo 是
45 max_pool3d 是 是 maxpool_coo 是
46 attention 是 否 fused_attention_csr 是

2. 单测现状:

-

有一些动静统一的api既有动态图下的单测也有静态图下的单测,如sum,conv等,此类单测已经修复完毕;
image.png (view on web)
<https://github.com/PaddlePaddle/Paddle/assets/62429225/0b67df2a-4770-4a23-a4aa-b205d5f17f6b>
-

有一些动静统一的api只有动态图下的单测,没有静态图下的单测,如subm_conv3d,需要补在静态图下的单测,
image.png (view on web)
<https://github.com/PaddlePaddle/Paddle/assets/62429225/e5350f68-f4b4-4b4a-9961-eb2c6bdaeebd>
-

有一些仅仅在动态图下有定义的api,如sin,需要对python API进行适配升级,然后补全在动态图和静态图下的单测,请参考
#57097 <#57097>
image.png (view on web)
<https://github.com/PaddlePaddle/Paddle/assets/62429225/17e00990-5f11-45f5-9019-bd85d4956eb9>

二、Task 📚

1. 动静统一的python api,需要补全静态图单测的任务

序号 Python API 所在文件 对应单测 认领人/PR 单测覆盖率
1 reshape Paddle/python/paddle/sparse/unary.py
test/legacy_test/test_sparse_reshape_op.py
2 add Paddle/python/paddle/sparse/binary.py
test/deprecated/legacy_test/test_sparse_elementwise_op.py
3 softmax python/paddle/sparse/nn/functional/activation.py
test/legacy_test/test_sparse_fused_attention_op.py
4 subm_conv3d python/paddle/sparse/nn/functional/conv.py
test/legacy_test/test_sparse_conv_op.py
5 subm_conv2d python/paddle/sparse/nn/functional/conv.py
test/legacy_test/test_sparse_conv_op.py
6 max_pool3d python/paddle/sparse/nn/functional/pooling.py
test/legacy_test/test_sparse_pooling_op.py

2 仅在动态图下有定义的api,需要对python API进行适配升级,然后补全在动态图和静态图下的单测
序号 Python API 所在文件 对应单测 认领人/PR 单测覆盖率
7 sin python/paddle/sparse/unary.py test_sparse_unary_op.py
8 tan python/paddle/sparse/unary.py test_sparse_unary_op.py
9 asin python/paddle/sparse/unary.py test_sparse_unary_op.py
10 transpose python/paddle/sparse/unary.py test_sparse_transpose_op.py
11 atan python/paddle/sparse/unary.py test_sparse_unary_op.py
12 sinh python/paddle/sparse/unary.py test_sparse_unary_op.py
13 asinh python/paddle/sparse/unary.py test_sparse_unary_op.py
14 atanh python/paddle/sparse/unary.py test_sparse_unary_op.py
15 tanh python/paddle/sparse/unary.py test_sparse_unary_op.py
16 square python/paddle/sparse/unary.py test_sparse_unary_op.py
17 sqrt python/paddle/sparse/unary.py test_sparse_unary_op.py
18 log1p python/paddle/sparse/unary.py test_sparse_unary_op.py
19 pow python/paddle/sparse/unary.py test_sparse_unary_op.py
20 neg python/paddle/sparse/unary.py test_sparse_unary_op.py
21 abs python/paddle/sparse/unary.py test_sparse_unary_op.py
22 cast python/paddle/sparse/unary.py test_sparse_unary_op.py
23 coalesce python/paddle/sparse/unary.py
test_sparse_conv_op.py/test_sparse_pca_lowrank.py/test_sparse_utils_op.py
24 rad2deg python/paddle/sparse/unary.py test_sparse_unary_op.py
25 deg2rad python/paddle/sparse/unary.py test_sparse_unary_op.py
26 expm1 python/paddle/sparse/unary.py test_sparse_unary_op.py
27 addmm python/paddle/sparse/unary.py test_sparse_addmm_op.py
28 sparse_csr_tensor python/paddle/sparse/unary.py
test_sparse_utils_op.py/test_sparse_matmul_op.py
29 matmul python/paddle/sparse/binary.py test_sparse_matmul_op.py
30 masked_matmul python/paddle/sparse/binary.py test_sparse_matmul_op.py
31 mv python/paddle/sparse/binary.py test_sparse_mv_op.py
32 subtract python/paddle/sparse/binary.py test_sparse_elementwise_op.py
33 multiply python/paddle/sparse/binary.py test_sparse_elementwise_op.py
34 divide python/paddle/sparse/binary.py test_sparse_elementwise_op.py
35 is_same_shape python/paddle/sparse/binary.py
test_sparse_is_same_shape_op.py
36 relu6 python/paddle/sparse/nn/functional/activation.py
test_sparse_unary_op.py
37 leaky_relu python/paddle/sparse/nn/functional/activation.py
test_sparse_unary_op.py
38 leaky_relu python/paddle/sparse/nn/functional/transformer.py
test_sparse_fused_attention_op.py 1. 认领方式

请大家以 comment 的形式认领任务,如:

【报名】:1、3、12-13

多个任务之间需要使用中文顿号分隔,报名多个连续任务可用横线表示,如 2-5
2. PR提交

- PR名称需要加前缀 *【Migrate Sparse API No.XXX】*
- PR描述中需要附上本issue
- 评论里或者 review request @risemeup1 <https://github.com/risemeup1>
研发会进行审核

看板信息
任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率
【快乐开源】PIR下Sparse算子Python API 适配 14 0 / 2 0.0% 0 0.0% 统计信息

排名不分先后


Reply to this email directly, view it on GitHub
<#64492>, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AYQIV66OX4MJN6YOHUXJCYLZKDBBBAVCNFSM6AAAAABIBE6YRKVHI2DSMVQWIX3LMV43ASLTON2WKOZSGMYDONZQGI3DONI
.
You are receiving this because you were mentioned.Message ID:
***@***.***>

你不用搞了

相关问题