Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【complex op】paddlepaddle 支持复数 #56145

Closed
GGBond8488 opened this issue Aug 10, 2023 · 25 comments
Closed

【complex op】paddlepaddle 支持复数 #56145

GGBond8488 opened this issue Aug 10, 2023 · 25 comments
Assignees
Labels
HappyOpenSource 快乐开源活动issue与PR status/close 已关闭

Comments

@GGBond8488
Copy link
Contributor

GGBond8488 commented Aug 10, 2023

问题描述 Please describe your issue

已移步至:

✨ 任务背景

大家好!

现有的深度学习框架主要是基于对实数函数的优化设计的,在主流的深度学习应用场景中,网络的输入变量,中间变量,输出变量都是实数,与此相关的基础设施,比如数组,优化器等组件也都是适用于实数类型。

但随着深度学习应用的扩展,也出现对复数支持的需求,比如图像,语音等领域的傅里叶变换,量子物理领域,其理论体系都是基于复数建立的。虽然并非不能用实数表示复数运算,但稍显繁琐,深度学习框架有原生的复数支持,可以使建模更接近其理论。

从更广义的视角来看, 深度学习框架提供更好的复数支持,也是更好地支持复数神经网络研究的基础。

现邀请大家一起参与paddle的复数支持。

此 ISSUE 是 赛题十三:复数kernel调研与实现 的弱化版批量任务。

🍻 参与流程:

参与的流程大致为:

  • 任务认领
  • 修改示例
  • 提交 PR
  • 任务收尾

PR 通过 CI 后,可以评论里或者 review request @zyt1024(recommend) @GGBond8488 研发会进行审核

任务认领

直接在 ISSUE 下回复认领的任务 ID 即可。

修改示例

认领完对应的任务后,需要实现对应op的 前向以及反向复数计算逻辑(部分op没有反向),并在对应op单测中添加复数的单测

主要修改点:

  • 在op对应的前向以及反向kernel增加复数运算逻辑,且注册相应的complex64, complex128数据类型。 复数反向计算可参考 complex_autograd
  • 在对应op的单测中增加复数类型
  • 在对应api的类型校验中增加复数

具体修改可参考pr: #55380

提交pr

每个任务需要提交至少一个 PR:

  • PR标题格式:【complex op】No.xxx add complex support for xxx
  • PR描述中需要附上本issue,
  • 在提交PR后我们会内部指派reviewer,由该reviewer负责合入。

任务收尾

PR 提交之后,需要确认所有required CI 通过状态,若认为不是本身改动引起的ci问题可联系@GGBond8488@@ScottWong98

pr merge后则视作任务收尾。

任务列表

后续评论中给出

✨ 注意:

@GGBond8488
Copy link
Contributor Author

GGBond8488 commented Aug 10, 2023

第一批任务 (整体进度:15/68)

按 merge 的时间顺序,排名不分先后: @huangjiyi (1) @DrRyanHuang (1) @jinyouzhi (1) @yangguohao (3) @BeingGod (2) @Wanglongzhi2001 (2) @xiaoyewww (2) @zbt78 (3)

序号 算子 认领人(GitHub_id) 提交pr/参考pr
1 addmm   #56480  
2 all_row, all_reduce    
3 Det(determinant)    
4 bmm    #56496
5 slogdet(slogdeterminant)    
6 logical_and/logical_or/logical_not/logical_xor✅(23/8/30) @jinyouzhi    #56323
7 isclose/allclose @jinyouzhi   #56723✅  #56870
8 Norm @zbt78    
9 Log/log10/log2/log1p    #56399
10 exp/expm1✅(23/9/11) @Wanglongzhi2001   #57116
11 Rsqrt    #56910
12 square✅(24/1/17) @zbt78   #60821  
13 renorm    
14 reciprocal✅(24/1/17) @zbt78   #60821  
15 sqrt   #57661  
16 std    
17 pow   #57645  
18 silu✅(23/9/7) @BeingGod    #56903
19 triangular_solve✅(24/1/4) @zbt78    #59529
20 tanhshrink   #56277  
21 mm    #56465
22 atan2    
23 Dist    
24 Floor    #56310
25 Fold✅(23/9/11) @BeingGod    #56914
26 logsoftmax  @fsczz  
27 logcumsumexp    
28 logsigmoid✅(23/9/7) @yangguohao    #56852
29 logsumexp    
30 stanh ✅(23/9/25) @yangguohao   #57639  
31 softplus ✅(23/10/13) @xiaoyewww    #57540
32 Softsign✅(23/11/3) @xiaoyewww    #58545
33 sigmoid ✅(23/9/18) @Wanglongzhi2001    #57244
34 Dot✅(23/8/17) @huangjiyi    #56349
35 cholesky_solve    
36 cholesky    
37 lstsq    
38 matrix_power   #56549  
39 Cross    
40 Inv    #57862
41 Svd    
42 Solvetriangular_solve    
43 Ceil    #56330
44 hardswish✅(23/9/26)  @yangguohao #57638  
45 p_norm #56413  
46 Qr    
47 Lu    
48 abs_coo/abs_csr(sparse)    
49 addmm_coo_dense(sparse)    
50 addmm_csr_dense(sparse)    
51 asin_coo/asin_csr(sparse)    
52 asinh_coo/asinh_csr(sparse)    
53 atan_coo/atan_csr(sparse)    
54 atanh_coo/atanh_csr(sparse)    
55 divide_coo_coo/divide_csr_csr(sparse)    
56 expm1_coo/expm1_csr(sparse)    
57 log1p_coo/log1p_csr(sparse)    
58 matmul_csr_dense(sparse)    
59 multiply_coo_coo/multiply_csr_csr(sparse)    
60 pow_coo/pow_csr(sparse)    
61 sin_coo/sin_csr(sparse)    
62 sinh_coo/sinh_csr(sparse)    
63 sqrt_coo/sqrt_csr(sparse)    
64 square_coo/square_csr(sparse)    
65 tan_coo/tan_csr(sparse)    
66 tanh_coo/tanh_csr(sparse)    
67 numel✅(23/8/21) @DrRyanHuang   #56412  
68 Expand #57837

@Ligoml Ligoml added HappyOpenSource 快乐开源活动issue与PR and removed status/new-issue 新建 type/others 其他问题 labels Aug 11, 2023
@luotao1 luotao1 assigned luotao1 and GGBond8488 and unassigned ZhangHandi Aug 14, 2023
@jinyouzhi
Copy link
Contributor

认领 30

@RedContritio
Copy link
Contributor

认领 12,15

@BeingGod
Copy link
Contributor

认领11,17,18

@PommesPeter
Copy link
Contributor

PommesPeter commented Aug 14, 2023

认领9,24,43

@DrRyanHuang
Copy link
Member

认领44,16

@luotao1
Copy link
Contributor

luotao1 commented Aug 17, 2023

@GGBond8488 的建议:

  1. 算子注册问题,这个任务本质上是要让算子支持复数类型,所以注册就是想多增加complex64, complex128类型,示例pr中增加了一个with_complex的宏,大家可用可不用,用的话记得把之前的注册宏去掉,不然就重复注册了,不用的话其实直接在注册末尾加上comple64, complex128就行

  2. 算子实现问题,大部分算子其实只需要实现前向和反向的复数特化,一般前向逻辑可以调库,没有的话自己实现也不难。难的都在反向,因为复数求导确实挺难的[捂脸],如果觉得推导太难这些反向可以参考参考竞品的实现。

  3. 单测问题,加了复数类型以后一定要加复数类型的单测,因为复数的自动微分检测和实数的逻辑是分开的,写单测的时候,增加两个case,把self.dtype设置成complex64, complex128即可。还有一定确保输入的实部和虚部都不为0

  4. 文档问题,因为增加了复数类型,所以一般在python对应op的api里面都要增加复数类型的校验,还有文档中数据类型都要加上complex64和complex128

@DrRyanHuang
Copy link
Member

DrRyanHuang commented Aug 17, 2023

认领3,21,46

@huangjiyi
Copy link
Member

认领 8, 23, 45

@BeingGod
Copy link
Contributor

BeingGod commented Sep 3, 2023

认领25,40

@yangguohao
Copy link
Contributor

认领 26,29

@Wanglongzhi2001
Copy link
Contributor

认领 33

@Wanglongzhi2001
Copy link
Contributor

认领 27

@BeingGod
Copy link
Contributor

BeingGod commented Sep 12, 2023

目前triangular_solvecholesky_solve等多个op的复数类型依赖ExpandKernel,建议添加该op的复数类型支持任务。 @GGBond8488

@zbt78
Copy link
Contributor

zbt78 commented Nov 19, 2023

认领8,19

@zbt78
Copy link
Contributor

zbt78 commented Nov 28, 2023

认领19

@fsczz
Copy link
Contributor

fsczz commented Dec 24, 2023

认领26

@zbt78
Copy link
Contributor

zbt78 commented Jan 15, 2024

认领12,14

@luotao1
Copy link
Contributor

luotao1 commented Feb 22, 2024

@luotao1 luotao1 closed this as completed Feb 22, 2024
@paddle-bot paddle-bot bot added the status/close 已关闭 label Feb 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
HappyOpenSource 快乐开源活动issue与PR status/close 已关闭
Projects
Development

No branches or pull requests