Skip to content

【开源任务】 Paddle API 0-size 机制建设 #72637

Closed

Description

@DanielSun11

一、背景

0-Size Tensor是指,Tensor.shape中存在某维度值为0,进而该Tensor虽有shape、dtype、place等信息,但他的元素个数为0。在切割等特定业务中,0-Size出现频率较高。Paddle目前对0-Size的支持非常薄弱,需要系统性摸排、建设。
参与本项活动,你将学习到Paddle算子库框架的设计,并了解Paddle动态图的整体执行流程。对深度学习框架0-Size业务有深刻了解。也有可能会涉猎到Paddle组合算子机制和编译器符号推导机制。遇到问题我们将有专人解答。

二、任务描述

2.1 任务介绍

本次开源任务主要用于完善Paddle的一些API对0-size Tensor的支持,这些不支持0-size Tensor的API遇到0-size Tensor时会出现例如精度异常、Coredump、Cuda Error、报错等问题。这些存在问题的API大概率是由于Kernel没有考虑到0-Size场景而产生的,当然也涉及到API shape的推导。 其他的成因需要具体分析。需要修复的API如下:

Important

每个任务难度:0.025×🌟
题目讲解见录屏文件:https://meeting.tencent.com/crm/l59EWmRZc4 (00:16:00~00:36:00)
详细介绍见:

本issue中任务做完后,可以接着做

序号 API 报名人/状态 分类标注 CPU/GPU/testcase
1 paddle.abs @DanielSun11 #72887
coredump testcase
2 paddle.acos @DanielSun11 #72821
coredump testcase
3 paddle.acosh @DanielSun11 #72821
coredump testcase
4 paddle.addmm @co63oc #73170
paddle_error gpu,cpu
5 paddle.allclose @co63oc #72820
coredump gpu
6 paddle.amax @DrRyanHuang
@co63oc #73333
paddle_error gpu,cpu
7 paddle.amin @co63oc #73333
paddle_error gpu,cpu
8 paddle.angle @co63oc #72837
coredump gpu
9 paddle.argmax @DrRyanHuang #72796
@co63oc #73524
@zhangdongq
@luyl975 #73614
paddle_error gpu,cpu
10 paddle.argmin @DrRyanHuang #72796
@co63oc #73524
@zhangdongq
paddle_error gpu,cpu
11 paddle.argsort @enkilee #72872
coredump testcase
12 paddle.as_real @enkilee
@co63oc #334 #73715
@luyl975 #73742
paddle_error testcase
13 paddle.asin @DanielSun11 #72821
coredump testcase
14 paddle.asinh @DanielSun11 #72821
coredump testcase
15 paddle.atan @DanielSun11 #72821
coredump testcase
16 paddle.atan2 @DanielSun11 #72851
coredump gpu,cpu
17 paddle.atanh @DanielSun11 #72821
coredump testcase
18 paddle.autograd.hessian @DanielSun11 #73962
cpu
19 paddle.bitwise_and @wanghuancoder #72785
cpu
20 paddle.bitwise_invert @co63oc #72977
coredump testcase
21 paddle.bitwise_left_shift @wanghuancoder #72785
cpu
22 paddle.bitwise_not @co63oc #72977
coredump testcase
23 paddle.bitwise_or @wanghuancoder #72785
cpu
24 paddle.bitwise_right_shift @wanghuancoder #72785
cpu
25 paddle.bitwise_xor @wanghuancoder #72785
cpu
26 paddle.bmm @co63oc #73108
paddle_error gpu,cpu
27 paddle.broadcast_to @DanielSun11 #72721
cpu
28 paddle.bucketize @co63oc #72917
coredump gpu
29 paddle.cartesian_prod @co63oc #72919
coredump gpu
30 paddle.ceil @DanielSun11 #72821
coredump testcase
31 paddle.chunk @DanielSun11
@enkilee #73616
coredump cpu
32 paddle.clip @co63oc #72866
coredump testcase
33 paddle.column_stack @DanielSun11 #72988
paddle_error gpu,cpu
34 paddle.complex @co63oc #312
coredump gpu,cpu
35 paddle.concat @DanielSun11 #72988
paddle_error cpu
36 paddle.cos @DanielSun11 #72821
coredump testcase
37 paddle.cosh @DanielSun11 #72821
coredump testcase
38 paddle.cross @DanielSun11 #72764
coredump gpu,cpu
39 paddle.cummax @co63oc #72800
coredump gpu,cpu
40 paddle.cummin @co63oc #72800
coredump gpu,cpu
41 paddle.cumsum @co63oc #72799
coredump gpu
42 paddle.cumulative_trapezoid @DanielSun11 #73962
paddle_error gpu,cpu
43 paddle.diag @VVX94 #73580
@co63oc #73570
paddle_error gpu,cpu
44 paddle.diag_embed @co63oc #72898
coredump gpu
45 paddle.diagonal @co63oc #73027
coredump,
paddle_error
gpu
46 paddle.diff @co63oc #73077
coredump cpu
47 paddle.digamma @co63oc #72878
coredump gpu
48 paddle.dist @co63oc #73027
paddle_error gpu,cpu
49 paddle.dsplit @DanielSun11 #72988
coredump cpu
50 paddle.dstack @DanielSun11 #72988
paddle_error gpu,cpu
51 paddle.einsum @DanielSun11 #73962
coredump gpu
52 paddle.equal @wanghuancoder #72785
cpu
53 paddle.erfinv @co63oc #72922
coredump testcase
54 paddle.exp @co63oc #72977
@Flowow-zjw
coredump testcase
55 paddle.expand @co63oc #333
coredump gpu
56 paddle.expm1 @co63oc #72977
@Flowow-zjw
coredump testcase
57 paddle.fft.fft2 @co63oc #72809 #73042
paddle_error gpu,cpu
58 paddle.fft.fftn @co63oc #72809 #73042
paddle_error gpu,cpu
59 paddle.fft.fftshift @co63oc #72809
coredump gpu
60 paddle.fft.ifft2 @co63oc #72809 #73042
paddle_error gpu,cpu
61 paddle.fft.ifftn @co63oc #72809 #73042
paddle_error gpu,cpu
62 paddle.fft.ifftshift @co63oc #72809
coredump gpu
63 paddle.fft.ihfft2 @co63oc #72809 #73042
paddle_error gpu,cpu
64 paddle.fft.ihfftn @co63oc #72809 #73042
paddle_error gpu,cpu
65 paddle.fft.rfft2 @co63oc #72809 #73042
paddle_error gpu,cpu
66 paddle.fft.rfftn @co63oc #72809 #73042
paddle_error gpu,cpu
67 paddle.flip @co63oc #72864
coredump gpu
68 paddle.floor @DanielSun11 #72821
coredump testcase
69 paddle.fmax @DanielSun11 #72912
coredump gpu,cpu
70 paddle.fmin @DanielSun11 #72912
coredump gpu,cpu
71 paddle.frac @DanielSun11
@Flowow-zjw
@straigrand
@co63oc #334 #73715
coredump gpu
72 paddle.frexp @DanielSun11
@co63oc #73503
coredump gpu
73 paddle.gammaln @DanielSun11 #72895
coredump gpu
74 paddle.hsplit @DanielSun11 #72988
coredump testcase
75 paddle.hstack @DanielSun11 #72988
@enkilee #72996
paddle_error cpu
76 paddle.i0 @co63oc #72826
coredump testcase
77 paddle.i0e @co63oc #72826
coredump testcase
78 paddle.i1 @co63oc #72826
coredump testcase
79 paddle.i1e @co63oc #72826
coredump testcase
80 paddle.imag @DanielSun11 #72936
coredump gpu
81 paddle.incubate.nn.functional.
blha_get_max_len
@co63oc #72937
coredump gpu
82 paddle.incubate.nn.functional.
fused_bias_act
@HeyDavid633
@co63oc #74259
coredump gpu
83 paddle.incubate.nn.functional.
fused_feedforward
@DanielSun11 #73962
coredump gpu
84 paddle.incubate.nn.functional.
fused_layer_norm
@co63oc #74046
coredump gpu
85 paddle.incubate.nn.functional.
fused_matmul_bias
@HeyDavid633
@co63oc #74152
cpu
86 paddle.incubate.nn.functional.
fused_rms_norm
@co63oc #74003 #74022
coredump gpu
87 paddle.incubate.nn.functional.
fused_rotary_position_embedding
@DanielSun11 #74323
coredump gpu
88 paddle.incubate.nn.functional.
variable_length_memory_efficient_attention
@co63oc #74157
coredump gpu
89 paddle.incubate.softmax_mask_fuse @co63oc #74022
coredump gpu
90 paddle.index_fill @co63oc #73609
coredump gpu,cpu
91 paddle.inner @co63oc #73094 #73340
paddle_error gpu,cpu
92 paddle.isfinite @co63oc #72807
coredump gpu
93 paddle.isin @co63oc #72920
coredump gpu,cpu
94 paddle.isinf @co63oc #72807
coredump gpu
95 paddle.isnan @co63oc #72807
coredump gpu
96 paddle.isneginf @co63oc #72807
coredump gpu
97 paddle.isposinf @co63oc #72807
coredump gpu
98 paddle.kron @co63oc #72997 #73017
coredump,
paddle_error
gpu,cpu
99 paddle.kthvalue @co63oc #72994 #73027
coredump gpu
100 paddle.ldexp @co63oc #73086
@enkilee #73002
coredump testcase
101 paddle.lerp @co63oc #72906
coredump,
paddle_error
gpu,cpu
102 paddle.lgamma @co63oc #72880
coredump gpu
103 paddle.linalg.cholesky_solve @DanielSun11 #72943
paddle_error gpu,cpu
104 paddle.linalg.cond @DanielSun11 #74112
paddle_error gpu,cpu
105 paddle.linalg.cov @co63oc #339 #73666
shape_diff,
paddle_error
gpu,cpu
106 paddle.linalg.det @co63oc #73125
coredump gpu,cpu
107 paddle.linalg.inv @co63oc #339 #73666
paddle_error cpu
108 paddle.linalg.lstsq @DanielSun11 #74112
shape_diff,
coredump,
paddle_error
gpu,cpu
109 paddle.linalg.matrix_norm @co63oc #339 #73666
coredump,
paddle_error
gpu,cpu
110 paddle.linalg.matrix_power @DanielSun11 #72790
paddle_error gpu,cpu
111 paddle.linalg.matrix_rank @DanielSun11 #72786
paddle_error gpu,cpu
112 paddle.linalg.multi_dot @co63oc #73122
paddle_error gpu,cpu
113 paddle.linalg.norm @co63oc #73172
paddle_error gpu,cpu
114 paddle.linalg.pinv @co63oc #74184
paddle_error gpu,cpu
115 paddle.linalg.slogdet @co63oc #73125
coredump gpu
116 paddle.linalg.solve @DanielSun11 #72806
paddle_error gpu,cpu
117 paddle.linalg.svd_lowrank @co63oc #73776
paddle_error gpu,cpu
118 paddle.linalg.triangular_solve @co63oc #73850
cpu
119 paddle.linalg.vector_norm @co63oc #73172
coredump,
paddle_error
gpu,cpu
120 paddle.log @enkilee #72940
coredump testcase
121 paddle.log10 @co63oc #72921
coredump testcase
122 paddle.log1p @co63oc #72921
coredump testcase
123 paddle.log2 @co63oc #72921
coredump testcase
124 paddle.logaddexp @co63oc #73020 #73027
coredump gpu
125 paddle.logcumsumexp @co63oc #72799
coredump gpu
126 paddle.logical_and @wanghuancoder #72785
cpu
127 paddle.logical_or @wanghuancoder #72785
cpu
128 paddle.logical_xor @wanghuancoder #72785
cpu
129 paddle.logit @co63oc #72889
coredump testcase
130 paddle.logsumexp @DrRyanHuang
@co63oc #73507
paddle_error gpu,cpu
131 paddle.masked_fill @co63oc #73510 #73570
coredump gpu,cpu
132 paddle.masked_select @co63oc #73180
coredump,
paddle_error
cpu
133 paddle.matmul @co63oc #73094
coredump gpu,cpu
134 paddle.meshgrid @DanielSun11 #72794
coredump gpu
135 paddle.minimum @VVX94
cpu
136 paddle.mm @co63oc #73094
coredump,
paddle_error
gpu,cpu
137 paddle.multigammaln @DanielSun11
@co63oc #311
coredump gpu
138 paddle.mv @co63oc #72929 #72937
coredump gpu,cpu
139 paddle.nan_to_num @co63oc #73077
coredump gpu
140 paddle.nanmean @co63oc #73077
coredump gpu
141 paddle.nanmedian @co63oc #72923 #72937
coredump gpu
142 paddle.nanquantile @co63oc #73077
coredump gpu,cpu
143 paddle.nansum @co63oc #73077
coredump gpu
144 paddle.nextafter @enkilee #73008
coredump gpu,cpu
145 paddle.nn.functional.adaptive_avg_pool1d @co63oc #72954
coredump,
paddle_error
gpu,cpu
146 paddle.nn.functional.adaptive_avg_pool2d @co63oc #72954
coredump gpu
147 paddle.nn.functional.adaptive_avg_pool3d @co63oc #72954
coredump gpu
148 paddle.nn.functional.adaptive_max_pool1d @co63oc #72954
coredump gpu,cpu
149 paddle.nn.functional.adaptive_max_pool2d @co63oc #72954
coredump gpu,cpu
150 paddle.nn.functional.adaptive_max_pool3d @co63oc #72954
coredump gpu,cpu
151 paddle.nn.functional.affine_grid @co63oc #74129
@DanielSun11 #74112
cpu
152 paddle.nn.functional.avg_pool1d @co63oc #72954
coredump gpu
153 paddle.nn.functional.avg_pool2d @co63oc #72954
coredump gpu
154 paddle.nn.functional.avg_pool3d @co63oc #72954
coredump gpu
155 paddle.nn.functional.batch_norm @co63oc #74119
cpu
156 paddle.nn.functional.
binary_cross_entropy_with_logits
@co63oc #73882
coredump testcase
157 paddle.nn.functional.celu @DanielSun11 #73028
coredump testcase
158 paddle.nn.functional.channel_shuffle @co63oc #72924
coredump gpu
159 paddle.nn.functional.conv1d @inaomIIsfarell
@co63oc #73691
coredump gpu
160 paddle.nn.functional.conv1d_transpose @inaomIIsfarell
@co63oc #73698
coredump gpu
161 paddle.nn.functional.conv2d @co63oc #73691
coredump gpu,cpu
162 paddle.nn.functional.conv2d_transpose @co63oc #73698
coredump gpu,cpu
163 paddle.nn.functional.conv3d @co63oc #73691
coredump gpu
164 paddle.nn.functional.conv3d_transpose @co63oc #73698
coredump gpu
165 paddle.nn.functional.cosine_similarity @co63oc #73180 #74072
shape_diff,
coredump
gpu,cpu
166 paddle.nn.functional.ctc_loss @co63oc #74042
coredump gpu,cpu
167 paddle.nn.functional.elu @DanielSun11 #73028
coredump testcase
168 paddle.nn.functional.flashmask_attention coredump gpu
169 paddle.nn.functional.fold @co63oc #74221
cpu
170 paddle.nn.functional.fractional_max_pool2d @co63oc #72954
coredump gpu
171 paddle.nn.functional.fractional_max_pool3d @co63oc #72954
coredump gpu
172 paddle.nn.functional.gelu @co63oc #72970
coredump gpu
173 paddle.nn.functional.glu @co63oc #73077
coredump cpu
174 paddle.nn.functional.grid_sample @co63oc #72972
coredump gpu,cpu
175 paddle.nn.functional.group_norm @co63oc #73152
coredump gpu
176 paddle.nn.functional.hardshrink @DanielSun11 #73028
coredump testcase
177 paddle.nn.functional.hardsigmoid @DanielSun11 #73028
coredump testcase
178 paddle.nn.functional.hardswish @co63oc #72977
coredump testcase
179 paddle.nn.functional.hardtanh @DanielSun11 #73028
coredump testcase
180 paddle.nn.functional.hinge_embedding_loss @co63oc #73173
coredump gpu
181 paddle.nn.functional.interpolate @co63oc #73173 #74098
coredump gpu
182 paddle.nn.functional.kl_div @co63oc #73173
coredump gpu
183 paddle.nn.functional.l1_loss @co63oc #73173
coredump gpu
184 paddle.nn.functional.label_smooth @co63oc #72993
coredump testcase
185 paddle.nn.functional.layer_norm @co63oc #74129
coredump gpu,cpu
186 paddle.nn.functional.leaky_relu @co63oc #72977
coredump testcase
187 paddle.nn.functional.linear @co63oc #74119
@DanielSun11 #74112
cpu
188 paddle.nn.functional.local_response_norm @co63oc #73998
coredump gpu
189 paddle.nn.functional.log_sigmoid @DanielSun11 #72821
coredump testcase
190 paddle.nn.functional.log_softmax @co63oc #73618
coredump gpu
191 paddle.nn.functional.lp_pool1d @co63oc #72954
coredump gpu
192 paddle.nn.functional.lp_pool2d @co63oc #72954
coredump gpu
193 paddle.nn.functional.margin_ranking_loss @co63oc #73191
coredump gpu
194 paddle.nn.functional.max_pool1d @co63oc #72954
coredump gpu,cpu
195 paddle.nn.functional.max_pool2d @co63oc #72954
coredump gpu,cpu
196 paddle.nn.functional.max_pool3d @co63oc #72954
coredump gpu,cpu
197 paddle.nn.functional.max_unpool1d @co63oc #72954
coredump gpu
198 paddle.nn.functional.max_unpool2d @co63oc #72954
coredump gpu
199 paddle.nn.functional.max_unpool3d @co63oc #72954
coredump gpu
200 paddle.nn.functional.maxout @co63oc #73044
coredump gpu
201 paddle.nn.functional.mish @DanielSun11 #73028
coredump testcase
202 paddle.nn.functional.mse_loss @co63oc #73176
coredump gpu
203 paddle.nn.functional.multi_margin_loss @co63oc #341
coredump gpu
204 paddle.nn.functional.normalize @co63oc #339 #73666 #73688
coredump,
paddle_error
gpu
205 paddle.nn.functional.pad @co63oc #73821
coredump gpu
206 paddle.nn.functional.pairwise_distance @co63oc #73176 #73172
coredump,
paddle_error
gpu,cpu
207 paddle.nn.functional.pixel_shuffle @co63oc #72928
coredump gpu
208 paddle.nn.functional.pixel_unshuffle @co63oc #72928
coredump gpu
209 paddle.nn.functional.poisson_nll_loss @co63oc #73176
coredump gpu
210 paddle.nn.functional.prelu @co63oc #73044
coredump gpu
211 paddle.nn.functional.relu @DanielSun11 #72821
coredump testcase
212 paddle.nn.functional.relu6 @co63oc #72977
coredump testcase
213 paddle.nn.functional.rrelu @HuangJunze2003
@co63oc #73528
coredump gpu
214 paddle.nn.functional.
scaled_dot_product_attention
@DanielSun11 #74323
coredump gpu
215 paddle.nn.functional.selu @DanielSun11 #73028
coredump gpu
216 paddle.nn.functional.sequence_mask @co63oc #73632
coredump gpu
217 paddle.nn.functional.sigmoid @DanielSun11 #72821
coredump testcase
218 paddle.nn.functional.sigmoid_focal_loss @co63oc #73191 #74072
coredump testcase
219 paddle.nn.functional.silu @DanielSun11 #72821
coredump testcase
220 paddle.nn.functional.soft_margin_loss @co63oc #73176
coredump testcase
221 paddle.nn.functional.softmax @kyrie-79
@co63oc #74119
coredump gpu
222 paddle.nn.functional.softplus @DanielSun11 #73028
coredump testcase
223 paddle.nn.functional.softshrink @DanielSun11 #73028
coredump testcase
224 paddle.nn.functional.softsign @DanielSun11 #72821
coredump testcase
225 paddle.nn.functional.square_error_cost @co63oc #73176
coredump gpu
226 paddle.nn.functional.swish @co63oc #72977
coredump testcase
227 paddle.nn.functional.tanh @DanielSun11
coredump testcase
228 paddle.nn.functional.tanhshrink @DanielSun11 #72821
coredump testcase
229 paddle.nn.functional.temporal_shift @co63oc #72975
coredump gpu
230 paddle.nn.functional.thresholded_relu @DanielSun11 #73028
coredump testcase
231 paddle.nn.functional.
triplet_margin_with_distance_loss
@co63oc #73180 #73995 #73998
coredump,
paddle_error
gpu,cpu
232 paddle.nn.functional.unfold @enkilee #73634
coredump gpu,cpu
233 paddle.nn.functional.zeropad2d @DanielSun11 #74057
coredump gpu
234 paddle.nn.quant.weight_only_linear @DanielSun11 #74000
coredump gpu
235 paddle.nn.quant.weight_quantize @DanielSun11 #74000
coredump gpu,cpu
236 paddle.nn.utils.parameters_to_vector @co63oc #73180
coredump cpu
237 paddle.nn.utils.vector_to_parameters @DanielSun11 #74348
paddle_error gpu,cpu
238 paddle.nonzero @DanielSun11 #74057
coredump gpu
239 paddle.outer @co63oc #73094
paddle_error gpu,cpu
240 paddle.pdist @co63oc #73180
coredump,
paddle_error
gpu
241 paddle.polar @co63oc #73180
coredump gpu
242 paddle.polygamma @co63oc #72977
coredump testcase
243 paddle.quantile @Flowow-zjw
@enkilee #73608
coredump gpu,cpu
244 paddle.real @Flowow-zjw
@straigrand
@co63oc #312
paddle_error gpu
245 paddle.reciprocal @DanielSun11 #72821
coredump testcase
246 paddle.renorm @co63oc #73003 #73017
coredump gpu
247 paddle.repeat_interleave @co63oc #72971 #73017
coredump gpu,cpu
248 paddle.reshape @co63oc #73165
cpu
249 paddle.reverse @DanielSun11 #72945
coredump gpu
250 paddle.roll @co63oc #72809
coredump gpu
251 paddle.rot90 @co63oc #72864
coredump gpu
252 paddle.round @co63oc #73166
coredump testcase
253 paddle.row_stack @DanielSun11 #72988
paddle_error gpu,cpu
254 paddle.rsqrt @DanielSun11 #72821
coredump testcase
255 paddle.searchsorted @co63oc #72917
coredump gpu
256 paddle.sgn @VVX94 #73606
paddle_error gpu,cpu
257 paddle.signal.istft @co63oc #337 #74042
cpu
258 paddle.sin @DanielSun11 #72821
coredump testcase
259 paddle.sinc @co63oc #73180
coredump gpu
260 paddle.sinh @DanielSun11 #72821
coredump testcase
261 paddle.slice @co63oc #73168
coredump gpu
262 paddle.sort @enkilee #72872
coredump testcase
263 paddle.split @DanielSun11 #72988
coredump cpu
264 paddle.sqrt @DanielSun11 #72821
coredump testcase
265 paddle.square @DanielSun11 #72821
coredump testcase
266 paddle.stanh @DanielSun11 #73028
coredump testcase
267 paddle.std @co63oc #73044
paddle_error gpu,cpu
268 paddle.strided_slice @DanielSun11 #74000
coredump gpu
269 paddle.subtract @DanielSun11 #72914
coredump gpu
270 paddle.take @co63oc #73186
coredump gpu
271 paddle.take_along_axis @straigrand #73499 #73736
cpu
272 paddle.tan @DanielSun11 #72821
coredump testcase
273 paddle.tanh @DanielSun11 #72821
coredump testcase
274 paddle.tensor_split @DanielSun11 #72988
coredump cpu
275 paddle.Tensor.__abs__ @DanielSun11 #72887
coredump testcase
276 paddle.Tensor.__getitem__ @DanielSun11 #74057
coredump gpu
277 paddle.Tensor.__matmul__ @co63oc #73094
cpu
278 paddle.Tensor.__pow__ @co63oc #338 #73204
coredump gpu
279 paddle.Tensor.__rmatmul__ @co63oc #338 #73094
cpu
280 paddle.Tensor.__rpow__ @co63oc #338 #73204
coredump gpu
281 paddle.Tensor.__setitem__ @DanielSun11 #74057
coredump gpu,cpu
282 paddle.Tensor.__sub__ @DanielSun11 #72914
coredump gpu
283 paddle.Tensor.abs @DanielSun11 #72887
coredump testcase
284 paddle.Tensor.amax @DrRyanHuang
@co63oc #73333
paddle_error gpu,cpu
285 paddle.Tensor.amin @co63oc #73333
paddle_error gpu,cpu
286 paddle.Tensor.argmax @co63oc #73524
paddle_error gpu,cpu
287 paddle.Tensor.argsort @enkilee #72872
coredump testcase
288 paddle.Tensor.atanh @DanielSun11 #72821
coredump testcase
289 paddle.Tensor.bmm @co63oc #73108
paddle_error gpu,cpu
290 paddle.Tensor.broadcast_to @DanielSun11 #72721
cpu
291 paddle.Tensor.ceil @DanielSun11 #72821
coredump testcase
292 paddle.Tensor.cholesky_solve @DanielSun11 #72943
paddle_error gpu,cpu
293 paddle.Tensor.chunk @DanielSun11
@enkilee #73616
coredump cpu
294 paddle.Tensor.clip @co63oc #72866
coredump testcase
295 paddle.Tensor.cos @DanielSun11 #72821
coredump testcase
296 paddle.Tensor.cumsum @co63oc #72799
coredump gpu
297 paddle.Tensor.diag_embed @co63oc #72898
coredump gpu
298 paddle.Tensor.diagonal @co63oc #73027
paddle_error gpu
299 paddle.Tensor.digamma @co63oc #72878
coredump gpu
300 paddle.Tensor.erfinv @co63oc #72922
coredump testcase
301 paddle.Tensor.exp @co63oc #72977
coredump testcase
302 paddle.Tensor.expand_as @co63oc #72986
paddle_error gpu,cpu
303 paddle.Tensor.fill_diagonal_ @co63oc #73181
coredump gpu
304 paddle.Tensor.flip @co63oc #72864
coredump gpu
305 paddle.Tensor.floor @DanielSun11 #72821
coredump testcase
306 paddle.Tensor.frexp @DanielSun11
@co63oc #73503
coredump gpu
307 paddle.Tensor.imag @DanielSun11 #72936
coredump gpu
308 paddle.Tensor.inner @co63oc #73094 #73340
paddle_error gpu,cpu
309 paddle.Tensor.isnan @co63oc #72807
coredump gpu
310 paddle.Tensor.kthvalue @co63oc #72994 #73027
coredump gpu,cpu
311 paddle.Tensor.lerp @co63oc #72906
paddle_error gpu,cpu
312 paddle.Tensor.lgamma @co63oc #72880
coredump gpu
313 paddle.Tensor.log @co63oc
@enkilee #72940
coredump testcase
314 paddle.Tensor.log10 @co63oc #72921
coredump testcase
315 paddle.Tensor.log1p @co63oc #72921
coredump testcase
316 paddle.Tensor.logit @co63oc #72889
coredump testcase
317 paddle.Tensor.lu @DanielSun11 #74000
paddle_error gpu,cpu
318 paddle.Tensor.matmul @crashbussy #72780
@co63oc #73094
shape_diff,
paddle_error
gpu,cpu
319 paddle.Tensor.median @co63oc #73477
paddle_error gpu,cpu
320 paddle.Tensor.mm @co63oc #73094
paddle_error gpu,cpu
321 paddle.Tensor.mode @co63oc #73197
paddle_error gpu,cpu
322 paddle.Tensor.multigammaln @DanielSun11
@co63oc #311
coredump gpu
323 paddle.Tensor.nansum @co63oc #73077
coredump gpu
324 paddle.Tensor.nonzero @DanielSun11 #74057
coredump gpu
325 paddle.Tensor.outer @co63oc #73094
paddle_error gpu
326 paddle.Tensor.quantile @enkilee #73608
coredump gpu,cpu
327 paddle.Tensor.reciprocal @DanielSun11 #72821
coredump testcase
328 paddle.Tensor.remainder @jerric-charon #73591
cpu
329 paddle.Tensor.repeat_interleave @co63oc #72971 #73017
coredump gpu
330 paddle.Tensor.rot90 @co63oc #72864
coredump gpu
331 paddle.Tensor.round @DanielSun11 #72821
coredump testcase
332 paddle.Tensor.rsqrt @DanielSun11 #72821
coredump testcase
333 paddle.Tensor.sigmoid @DanielSun11 #72821
coredump testcase
334 paddle.Tensor.sin @DanielSun11 #72821
coredump testcase
335 paddle.Tensor.split @DanielSun11 #72988
coredump cpu
336 paddle.Tensor.sqrt @DanielSun11 #72821
coredump testcase
337 paddle.Tensor.square @DanielSun11 #72821
coredump testcase
338 paddle.Tensor.std @co63oc #73044
paddle_error gpu,cpu
339 paddle.Tensor.subtract @DanielSun11 #72914
coredump gpu
340 paddle.Tensor.tanh @DanielSun11 #72821
coredump testcase
341 paddle.Tensor.tile @co63oc #73040
coredump gpu
342 paddle.Tensor.topk @co63oc #312
paddle_error gpu,cpu
343 paddle.Tensor.tril @crashbussy #72814
coredump gpu
344 paddle.Tensor.trunc @co63oc #72861
coredump gpu
345 paddle.Tensor.var @co63oc #73044
paddle_error gpu,cpu
346 paddle.tensordot @DanielSun11 #73415
paddle_error gpu,cpu
347 paddle.tile @co63oc #73040
coredump gpu,cpu
348 paddle.trace @DanielSun11 #72853
coredump gpu
349 paddle.trapezoid @DanielSun11 #74000
paddle_error cpu
350 paddle.tril @crashbussy #72814
coredump testcase
351 paddle.triu @crashbussy #72814
coredump testcase
352 paddle.trunc @co63oc #72861
coredump testcase
353 paddle.unflatten @straigrand
@luyl975 #73986
paddle_error cpu
354 paddle.unique @ccsuzzh
@co63oc #74305
coredump gpu,cpu
355 paddle.unique_consecutive @ccsuzzh #73444
@co63oc #74305
coredump cpu
356 paddle.var @co63oc #73044
paddle_error cpu
357 paddle.vision.ops.box_coder @co63oc #73017
coredump gpu
358 paddle.vision.ops.generate_proposals @co63oc #74261
coredump gpu,cpu
359 paddle.vision.ops.prior_box @co63oc #73016 #73017
coredump gpu
360 paddle.vision.ops.yolo_box @co63oc #73015 #73017
coredump gpu
361 paddle.vstack @DanielSun11 #72988
paddle_error cpu
362 paddle.where @co63oc #72934
coredump gpu

看板信息

任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率
0-size Tensor的支持任务 362 359 / 361 99.17% 358 98.9%

统计信息

排名不分先后 @DanielSun11 (101) @co63oc (231) @enkilee (11) @wanghuancoder (9) @VVX94 (1) @straigrand (1) @crashbussy (3) @luyl975 (1)

Activity

  1. moved this to In Progress in Call for Contributionson May 9, 2025
  2. changed the title [-]【开源任务】 对Paddle部分API不支持0-size Tensor问题的修复[/-] [+]【开源任务】 Paddle API 0-size 机制建设[/+] on May 9, 2025
  3. DanielSun11 commented on May 14, 2025

    @DanielSun11
    ContributorAuthor

    Develop已经修复的任务(无需认领):

    • 328 paddle.Tensor.remainder
    • 227 paddle.nn.functional.tanh
    • 135 paddle.minimum

    表格中的一些名词的解释:

    • 分类标注列:
      shape_diff:API存在与Torch返回的shape的diff问题
      coredump:Paddle崩溃,Segment Fault或者CUDA 9
      paddle_error:Torch能跑,Paddle报Enforce错误
    • CPU/GPU/testcase列:
      CPU:在CPU上跑有问题
      GPU:在GPU上跑有问题
      TestCase:CPU、GPU都没问题了,需要看看XPU是否存在问题并补充单测

    2.2 修复主要流程

    1. Check InferMeta正确性(如有必要同步修改符号推导,少部分API会涉及)
    2. 改前向Kernel、改反向Kernel
    3. 保证所有Kernel都改到(CPU、GPU、XPU、OneDNN、Sparse、SelectedRows)
    4. 加单测,包括反向专门测试单测和op Test
    5. 改组合算子(少部分API会涉及)
    6. PaddleAPITest回测

    2.3 修复1个API的详细示例

    以paddle.maximum为例,参考PR:#71829

    1. 在PaddleAPITest report/0size_tensor中检索paddle.maximum的错误日志,发现大概率是反向Shape推导的问题。但按规矩应该如下全面排查:
    2025-03-10 10:16:20.895948 test begin: paddle.maximum(Tensor([0, 1, 2],"float32"), Tensor([1, 3598, 2],"float32"), )
    
    [accuracy error] backward  paddle.maximum(Tensor([0, 1, 2],"float32"), Tensor([1, 3598, 2],"float32"), ) 
     
    Not equal to tolerance rtol=0.01, atol=0.01
    
    (shapes (0, 2), (0, 1, 2) mismatch)
     x: array([], shape=(0, 2), dtype=float32)
     y: array([], shape=(0, 1, 2), dtype=float32)
    
    
    1. 前向修复:
      a. 在Paddle代码中检索def maximum,发现maximum的核心实现调用的是_C_ops的maximum
      b. 以_C_ops的maximum在paddle/phi/ops/yaml中检索,发现maximum的InferMeta函数使用到两个:ElementwiseInferMeta,ElementwiseRawInferMeta
      c. 在代码中检索ElementwiseInferMeta,ElementwiseRawInferMeta,并检查其dims(shape)的推导是否正确(在maximum中他的推导是正确的因此不用修改)
      d. 如果修改了maximum的InferMeta函数,则必须同时修改maximum的符号推导函数:在paddle/fluid/pir/dialect/operator/interface/infer_symbolic_shape中检索maximum找到对应的函数进行修改(如果有必要修改)。符号推到的知识介绍见:【快乐开源】CINN编译器符号推导扩量 #66444
      e. 在paddle/phi/kernels中检索maximum,找全所有maximum的实现Kernel。一般Kernel肯定会有CPU、GPU、XPU版本,还有些Kernel还有有OneDNN、Sparse、SelectedRows版本。务必找全、改全。
      f. 对于单输出的Kernel修改方式一般为:
    if (out && out->numel() == 0) {
      dev_ctx.template Alloc<T>(out);
      return;
    }

      g. dev_ctx.template Alloc是在给out分配一个显存长度为0的Alloction。因为0-Size Tensor虽然没有显存,但是有place(device)信息。在Paddle中,Allocation用于存储Place和显存块信息。因此需要分配一个空的有Place的Allocation。
      h. 直接return的原因为,如果不return,很多Kernel在拉起CUDA Kernel时,会因为numel为0导致Kernel拉起失败而崩溃。
      i. 注意,有些Kernel有多个output,如果只有其中一个output numel为0,其余output仍然需要运算。需要阅读Kernel后精确修改,确保Kernel能够正确执行。
      j. 对于maximum,修改了paddle/phi/kernels/legacy/cpu/elementwise_kernel.cc和paddle/phi/kernels/legacy/xpu/elementwise_kernel.cc,之所以没有修改GPU Kernel,因为没有找到。这是因为GPU、CPU共用了paddle/phi/kernels/legacy/cpu/elementwise_kernel.cc里的实现。因为maximum和minimum处理逻辑一致,因此同时修改maximum和minimum
      k. maximum和minimum没有找到OneDNN、Sparse、SelectedRows相关的Kernel实现,因此不做处理
    3. 反向修复:
      a. 在paddle/phi/ops/yaml中检索maximum_grad,找到InferMeta函数为GeneralBinaryGradInferMeta
      b. 根据报错日志,分析大概率是反向Shape推导的问题。但实际分析未发现GeneralBinaryGradInferMeta的问题。调试后发现,其实是MaximumGradKernel在处理前向需要Broadcast的场景时,反向需要Reduce。而Reduce没有考虑0-Size的问题,具体逻辑在paddle/phi/kernels/gpu/elementwise_grad.h中ReduceWrapper中
      c. 不需要修改Reduce相关逻辑,只需要对GradKernel做0-Size的特殊处理即可。对于maximum_grad修改方式如下,其它算子可以参考如下代码结合算子反向梯度的数学含义做修改:

    if (dout.numel() == 0) {
        if (dx) {
          if (dx->numel() == 0) {
            dev_ctx.template Alloc<T>(dx);
          } else {
            phi::Full<T, Context>(
                dev_ctx, phi::IntArray(common::vectorize(dx->dims())), 0, dx);
          }
        }
        if (dy) {
          if (dy->numel() == 0) {
            dev_ctx.template Alloc<T>(dy);
          } else {
            phi::Full<T, Context>(
                dev_ctx, phi::IntArray(common::vectorize(dy->dims())), 0, dy);
          }
        }
        return;
      }

      d. 依照以上原则修改CPU、GPU、XPU Kernel,没有找到OneDNN、Sparse、SelectedRows相关的Kernel实现,因此不做处理
    4. 添加单测
      a. test/legacy_test/test_maximum_op.py是为了验证反向maximum_grad的正确性
      b. test/legacy_test/test_elementwise_max_op.py是为了验证前向的正确性,以及在Paddle多种不同机制下是否都支持0-Size,机制如:动态图、静态图、老静态图、CINN、组合算子等
      c. 单测本地验证中,暴露了一些新的问题,因此修改了test/legacy_test/op_test.py、python/paddle/incubate/autograd/composite_rules.py(通常不会遇到这种问题,可以不用太关注)
      d. 单测本地验证中,暴露了,我们还需要修改组合算子的maximum相关逻辑,因此修改了paddle/fluid/prim/api/composite_backward/composite_backward_api.h和paddle/fluid/primitive/decomp_rule/decomp_vjp/details.h
      e. 单测本地验证中,OpTest基类使用到了mean,进而暴露了mean不支持0-Size的问题,因此增加了对mean 0-Size的修改。可以看到:
       i. mean的前向处理更复杂一些,因此不同算子的数学含义导致,处理方式有所不同,需要我们逐一分析
       ii. mean除了GPU、CPU、XPU,还有OneDNN,因此共同修改
    5. 回归测试PaddleAPITest tester/api_config/0sizetensor_accuracy.txt、tester/api_config/0sizetensor_paddleonly.txt、“api_config_merged*” 中所有maximum和minimum测试配置

    2.4 提交PR的模版

    // ------- PR 标题 --------

    [0-size Tensor No.xxx] Add 0-size Tensor support for xxx API.
    

    // ------- PR 内容 --------

    PR Category
    Operator Mechanism 
    
    PR types
    Bug fixes
    
    Description
    xx的修改历程。
    (修改细节、对不同device的检查、测试结果等等)
    
    Pcard-67164

    注:
    为了便于review,请务必在PR中写下如下信息:

    • 修改细节的说明
    • CPU、GPU、XPU以及(OneDNN、Sparse、SelectedRows这三个不是很常见)对应的Kernel是否需要对应的修改
    • 单测以及PaddleAPITest回测的结果.

    非常欢迎在PR中贡献如下信息:

    • 对这个API出现的问题的分析
    • 针对该问题的新发现
    • 其他独特的见解

    例:一个不错的PR:#72263

    2.5 报名方式

    直接在本issue下评论:
    【报名】:xxx、xxx
    xxx是报名任务的编号,请注意格式和标点符号,以免bot无法自动识别

    三、所使用的测试工具与测试结果

    3.1 PaddleAPITest介绍

    PaddleAPITest用于排查问题API、问题case。
    通过如下命令可以执行一个paddle.abs与torch.abs的精度前反向对比测试:python engine.py --accuracy=True --api_config='paddle.abs(Tensor([1, 100],"float64"), )' 。“accuracy”表示执行精度对比测试,“api_config”表示要测试的配置。注意:配置中的双引号需要加斜杠。

    所有测试前,必须创建一个目录:PaddleAPITest/tester/api_config/test_log/,用于存放测试所产生的测试结果和checkpoint。

    PaddleAPITest目前支持paddle_only、accuracy、paddle_cinn三种测试:

    • paddle_only,用于单纯把配置在Paddle动态图跑一遍,验证PaddleAPITest “引擎”是否支持该配置。这将是线条1常用的模型。
    • accuracy,用于将Paddle API的前反向与Torch的前反向做精度对比测试。
    • paddle_cinn,用于Paddle动态图与Paddle静态图编译器做精度对比测试。与本次任务无关。

    此外:

    • api_config,用于测试单独一个配置使用,如:python engine.py --accuracy=True --api_config='paddle.abs(Tensor([1, 100],"float64"), )'
    • api_config_file,用于测试多个配置使用,可以将要测试的所有配置放到一个文件中,如:python engine.py --api_config_file=PaddleAPITest/tester/api_config/api_config.txt --accuracy=True > tester/api_config/test_log/log.log 2>&1
    • 由于测试过程中可能触发一些bug,导致程序Coredump,进而导致测试中断。PaddleAPITest开发了checkpoint机制,记录“已测试”配置。可以通过如下命令启动批量测试:for i in {1..10000}; do python engine.py --api_config_file=PaddleAPITest/tester/api_config/api_config_merge.txt --accuracy=True >> tester/api_config/test_log/log.log 2>&1; done

    3.2 出错的API的配置和测试结果

    四、注意事项

    1. 问题无法复现时的处理流程:
      a. 需要把这个API所有case全跑一遍看看是不是都不能复现
      b. 可能别的同学只修了GPU导致问题不能复现。但我们需要考虑:CPU、XPU、Sparse、SelectedRows是不是也没问题,因此需要肉眼检查一下。
      c. 即便GPU、CPU、XPU等等全都是没有问题的,我们也需要添加一两个单测到单测文件中。用于CI以后拦截0-SIze问题使用
    2. 可能不具备XPU测试的条件,因此针对XPU Kernel的修改可以不用测试,请尽可能保证代码正确性。
    3. 有些API,比如paddle.subtract、paddle.Tensor.__sub__、paddle.Tensor.subtract其实是一个API,尽量同时报名,防止修复重复了
    4. 修复后,应给相应API的单测添加新的测试用例。如:paddle.subtract对应的测试文件为test/legacy_test/test_subtract_op.py
    5. 如果所有配置均无法复现错误,可能是已经被其它人修好了,在任务表格中标记为未复现
    6. PR提交前,应确保tester/api_config/0sizetensor_accuracy.txt、tester/api_config/0sizetensor_paddleonly.txt、“api_config_merged*”中相应的case全能测试通过,以确保没有引入新的问题
    7. 有些API,可能同时存在于accuracy_error、coredump_error、paddle_error中,分析问题时最好一起分析
    8. 参考修复PR见:refine cholesky 0 size #71668 maximum minimum support 0-size #71829 【BIT】isclose Tensor.isclose support 0-size #72263
  4. wanghuancoder commented on May 16, 2025

    @wanghuancoder
    Contributor

    【报名】: 19,21,23,24,25,52,126,127,128

  5. DanielSun11 commented on May 16, 2025

    @DanielSun11
    ContributorAuthor

    【报名】:38

  6. crashbussy commented on May 19, 2025

    @crashbussy
    Contributor

    【报名】:318

  7. DrRyanHuang commented on May 19, 2025

    @DrRyanHuang
    Collaborator

    【报名】:9、10、130、6、284

  8. DanielSun11 commented on May 19, 2025

    @DanielSun11
    ContributorAuthor

    【报名】: 110、111、116、134

  9. 23 remaining items

  10. ccsuzzh commented on Jun 15, 2025

    @ccsuzzh
    Contributor

    【报名】:355

  11. DanielSun11 commented on Jun 17, 2025

    @DanielSun11
    ContributorAuthor

    【报名】:346

  12. straigrand commented on Jun 19, 2025

    @straigrand
    Contributor

    【报名】:71、244

  13. VVX94 commented on Jun 19, 2025

    @VVX94
    Contributor

    【报名】: 43、135、256

  14. straigrand commented on Jun 20, 2025

    @straigrand
    Contributor

    【报名】:271、353

  15. jerric-charon commented on Jun 23, 2025

    @jerric-charon

    【报名】:328

  16. zhangdongq commented on Jun 24, 2025

    @zhangdongq

    【报名】:9、10

  17. enkilee commented on Jun 24, 2025

    @enkilee
    Collaborator

    【报名】:243、326

  18. enkilee commented on Jun 25, 2025

    @enkilee
    Collaborator

    【报名】:31、293

  19. HeyDavid633 commented on Jul 3, 2025

    @HeyDavid633
    Contributor

    【报名】82、85

  20. DanielSun11 commented on Jul 11, 2025

    @DanielSun11
    ContributorAuthor

    【报名】:18、42、51、83

  21. DanielSun11 commented on Aug 1, 2025

    @DanielSun11
    ContributorAuthor

    本期【开源任务】“Paddle API 0-size 机制建设”,顺利结束!
    感谢 @co63oc @enkilee @wanghuancoder @VVX94 @straigrand @crashbussy @luyl975 各位开发者的贡献!
    感谢 @luotao1 @wanghuancoder @zyfncg 对本次任务的大力支持!
    欢迎各位开发者继续关注社区开源活动~ 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions