Skip to content

[0-size Tensor No.11、262、287] Add 0-size Tensor support for argsort/sort API. - #72872

Merged
wanghuancoder merged 9 commits into
PaddlePaddle:developfrom
enkilee:0size-11-argsort
May 30, 2025
Merged

wanghuancoder merged 9 commits into
PaddlePaddle:developfrom
enkilee:0size-11-argsort

Conversation

@enkilee

@enkilee enkilee commented May 22, 2025 •

Copy link
Copy Markdown
Collaborator

PR Category

Execute Infrastructure

PR Types

Improvements

Description

No.11、287 argsort:
在xpu_test中加入单测。

develop的代码经测试没问题

aistudio@jupyter-115720-9209054:~/PaddleAPITest$ python engine.py --api_config_file="/home/aistudio/PaddleAPITest/tester/api_config/big_and_0size/argsort.txt" --paddle_only=True
2025-05-27 02:56:52.431372 test begin: paddle.argsort(Tensor([0, 1],"float64"), axis=0, )
W0527 02:57:01.197355  6586 gpu_resources.cc:114] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 12.0, Runtime API Version: 11.8
[Pass] paddle.argsort(Tensor([0, 1],"float64"), axis=0, )
2025-05-27 02:57:01.205345 test begin: paddle.argsort(Tensor([0, 1],"float64"), axis=0, descending=True, )
[Pass] paddle.argsort(Tensor([0, 1],"float64"), axis=0, descending=True, )
2025-05-27 02:57:01.207407 test begin: paddle.argsort(Tensor([0, 1],"float64"), axis=0, descending=True, stable=True, )
[Pass] paddle.argsort(Tensor([0, 1],"float64"), axis=0, descending=True, stable=True, )
2025-05-27 02:57:01.208636 test begin: paddle.argsort(Tensor([0, 1],"float64"), axis=0, stable=True, )
[Pass] paddle.argsort(Tensor([0, 1],"float64"), axis=0, stable=True, )
2025-05-27 02:57:01.209786 test begin: paddle.argsort(Tensor([0, 3, 4],"float64"), axis=0, descending=True, stable=True, )
[Pass] paddle.argsort(Tensor([0, 3, 4],"float64"), axis=0, descending=True, stable=True, )
2025-05-27 02:57:01.210981 test begin: paddle.argsort(Tensor([0, 3, 4],"float64"), axis=0, stable=True, )
[Pass] paddle.argsort(Tensor([0, 3, 4],"float64"), axis=0, stable=True, )
2025-05-27 02:57:01.212088 test begin: paddle.argsort(Tensor([0, 3, 4],"float64"), axis=1, )
[Pass] paddle.argsort(Tensor([0, 3, 4],"float64"), axis=1, )
2025-05-27 02:57:01.213198 test begin: paddle.argsort(Tensor([0, 3, 4],"float64"), axis=1, descending=True, )
[Pass] paddle.argsort(Tensor([0, 3, 4],"float64"), axis=1, descending=True, )
2025-05-27 02:57:01.216692 test begin: paddle.argsort(Tensor([0, 3, 4],"float64"), descending=True, )
[Pass] paddle.argsort(Tensor([0, 3, 4],"float64"), descending=True, )
2025-05-27 02:57:01.217781 test begin: paddle.argsort(Tensor([0, 30],"float64"), axis=1, descending=True, stable=True, )
[Pass] paddle.argsort(Tensor([0, 30],"float64"), axis=1, descending=True, stable=True, )
2025-05-27 02:57:01.218922 test begin: paddle.argsort(Tensor([0, 30],"float64"), axis=1, stable=True, )
[Pass] paddle.argsort(Tensor([0, 30],"float64"), axis=1, stable=True, )
2025-05-27 02:57:01.220044 test begin: paddle.argsort(Tensor([0, 4, 2],"int64"), axis=0, stable=True, )
[Pass] paddle.argsort(Tensor([0, 4, 2],"int64"), axis=0, stable=True, )
2025-05-27 02:57:01.221209 test begin: paddle.argsort(Tensor([0, 4, 2],"int64"), axis=1, stable=True, )
[Pass] paddle.argsort(Tensor([0, 4, 2],"int64"), axis=1, stable=True, )
2025-05-27 02:57:01.222335 test begin: paddle.argsort(Tensor([0, 4, 2],"int64"), axis=2, stable=True, )
[Pass] paddle.argsort(Tensor([0, 4, 2],"int64"), axis=2, stable=True, )
2025-05-27 02:57:01.233197 test begin: paddle.argsort(Tensor([0, 4],"int64"), axis=0, stable=True, )
[Pass] paddle.argsort(Tensor([0, 4],"int64"), axis=0, stable=True, )

No.262:
根据log日式显示,
改了argsort,就等于改了sort

Pcard-67164

@paddle-bot

paddle-bot Bot commented May 22, 2025

Copy link
Copy Markdown

你的PR提交成功,感谢你对开源项目的贡献!
请关注后续CI自动化测试结果,详情请参考Paddle-CI手册。
Your PR has been submitted. Thanks for your contribution!
Please wait for the result of CI firstly. See Paddle CI Manual for details.

@paddle-bot paddle-bot Bot added the contributor External developers label May 22, 2025
@luotao1 luotao1 added the HappyOpenSource Pro 进阶版快乐开源活动,更具挑战性的任务 label May 22, 2025
@enkilee enkilee changed the title [0-size Tensor No.12] Add 0-size Tensor support for argsort API. [0-size Tensor No.11] Add 0-size Tensor support for argsort API. May 23, 2025
@enkilee enkilee changed the title [0-size Tensor No.11] Add 0-size Tensor support for argsort API. [0-size Tensor No.11、12] Add 0-size Tensor support for argsort API. May 23, 2025
@DanielSun11

Copy link
Copy Markdown
Contributor

修改cpu和gpu的kernel之后需要添加对应的单测。PR中补充paddleAPITest的测试结果

@enkilee

enkilee commented May 23, 2025

Copy link
Copy Markdown
Collaborator Author

修改cpu和gpu的kernel之后需要添加对应的单测。PR中补充paddleAPITest的测试结果

test_argsort_op.py中已经有0-size Tensor的单测了

@enkilee enkilee changed the title [0-size Tensor No.11、12] Add 0-size Tensor support for argsort API. [0-size Tensor No.11、12、262] Add 0-size Tensor support for argsort API. May 26, 2025
@enkilee enkilee changed the title [0-size Tensor No.11、12、262] Add 0-size Tensor support for argsort API. [0-size Tensor No.11、12、262] Add 0-size Tensor support for argsort/as_real/sort API. May 26, 2025
@DanielSun11

Copy link
Copy Markdown
Contributor
  • 请补充下paddleAPITest的测试结果。
  • 请一并报名任务287 paddle.Tensor.argsort

@enkilee enkilee changed the title [0-size Tensor No.11、12、262] Add 0-size Tensor support for argsort/as_real/sort API. [0-size Tensor No.11、12、262、287] Add 0-size Tensor support for argsort/as_real/sort API. May 27, 2025
@DanielSun11

Copy link
Copy Markdown
Contributor

XPU的前向ArgsortKernel似乎没有添加对0 size Tensor的支持,请检查

@enkilee

enkilee commented May 27, 2025

Copy link
Copy Markdown
Collaborator Author

XPU的前向ArgsortKernel似乎没有添加对0 size Tensor的支持,请检查

if (rank == 0) {
phi::Copy(dev_ctx, input, dev_ctx.GetPlace(), false, output);
phi::funcs::set_constant(dev_ctx, indices, static_cast<int64_t>(0));
return;
}

@DanielSun11

DanielSun11 commented May 27, 2025 •

Copy link
Copy Markdown
Contributor

XPU的前向ArgsortKernel似乎没有添加对0 size Tensor的支持,请检查

if (rank == 0) { phi::Copy(dev_ctx, input, dev_ctx.GetPlace(), false, output); phi::funcs::set_constant(dev_ctx, indices, static_cast<int64_t>(0)); return; }

auto rank = in_dims.size();这里rank指的是有几个维度,rank为0是0-dim。0-size指的是某个维度为0,进而所有维度的乘积也就是numel为0 请注意区分二者的区别。0-size Tensor的rank不一定为0,比如shape为[1,0,2]的Tensor,rank为3,numel = 1*0*2 = 0

@enkilee

enkilee commented May 27, 2025

Copy link
Copy Markdown
Collaborator Author

XPU的前向ArgsortKernel似乎没有添加对0 size Tensor的支持,请检查

if (rank == 0) { phi::Copy(dev_ctx, input, dev_ctx.GetPlace(), false, output); phi::funcs::set_constant(dev_ctx, indices, static_cast<int64_t>(0)); return; }

auto rank = in_dims.size();这里rank指的是有几个维度,rank为0是0-dim。0-size指的是某个维度为0,进而所有维度的乘积也就是numel为0 请注意区分二者的区别。0-size Tensor的rank不一定为0,比如shape为[1,0,2]的Tensor,rank为3,numel = 102 = 0

明白了,学习,谢谢

@luotao1

luotao1 commented May 29, 2025

Copy link
Copy Markdown
Collaborator

@DanielSun11 可以review了

DanielSun11

This comment was marked as abuse.

@DanielSun11
DanielSun11 self-requested a review May 29, 2025 06:36

@DanielSun11 DanielSun11 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

对于paddle.as_real的处理不够完善。
paddle.as_rea 报的是InvalidArgument,此时说明是参数检查报的错,但是并不代表不需要修改。请根据 https://www.paddlepaddle.org.cn/documentation/docs/zh/3.0-beta/api/paddle/as_real_cn.html#as-real 检查下参数是否合法,以及验证一下torch是否支持同样的shape。如果0 size Tensor的输入是合法的但是报了InvalidArgument,此时需要修改

@enkilee

enkilee commented May 29, 2025 •

Copy link
Copy Markdown
Collaborator Author

对于paddle.as_real的处理不够完善。 paddle.as_rea 报的是InvalidArgument,此时说明是参数检查报的错,但是并不代表不需要修改。请根据 https://www.paddlepaddle.org.cn/documentation/docs/zh/3.0-beta/api/paddle/as_real_cn.html#as-real 检查下参数是否合法,以及验证一下torch是否支持同样的shape。如果0 size Tensor的输入是合法的但是报了InvalidArgument,此时需要修改

没太明白,一切以APITest工具为准吗?可是错误是3月份的log,5月份的并没有as_real的错,而且直接调用,3月份的错误代码现在执行并不会报错

import paddle
x = paddle.to_tensor([10, 0, 10, 20], dtype = "complex128")
s = paddle.as_real(x)
print(s)
W0529 07:01:43.434468 19996 gpu_resources.cc:114] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 12.0, Runtime API Version: 11.8
Tensor(shape=[4, 2], dtype=float64, place=Place(gpu:0), stop_gradient=True,
       [[10., 0. ],
        [0. , 0. ],
        [10., 0. ],
        [20., 0. ]])

@DanielSun11

Copy link
Copy Markdown
Contributor
10, 0, 10, 20]

paddleAPITest的config中 paddle.as_real(Tensor([0, 10, 10, 20],"complex128"), ) ,[0, 10, 10, 20]是Tensor的shape,并不是tensor初始化的tuple,请重新测一下。测试结果以paddleAPITest为准,但是仍然需要添加单测来验证一些极端case。

@enkilee enkilee changed the title [0-size Tensor No.11、12、262、287] Add 0-size Tensor support for argsort/as_real/sort API. [0-size Tensor No.11、262、287] Add 0-size Tensor support for argsort/as_real/sort API. May 29, 2025
@enkilee

enkilee commented May 29, 2025

Copy link
Copy Markdown
Collaborator Author
10, 0, 10, 20]

paddleAPITest的config中 paddle.as_real(Tensor([0, 10, 10, 20],"complex128"), ) ,[0, 10, 10, 20]是Tensor的shape,并不是tensor初始化的tuple,请重新测一下。测试结果以paddleAPITest为准,但是仍然需要添加单测来验证一些极端case。

好的,那我12重开PR

@wanghuancoder wanghuancoder left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个还需要改GPU、CPU的Kernel

@enkilee enkilee changed the title [0-size Tensor No.11、262、287] Add 0-size Tensor support for argsort/as_real/sort API. [0-size Tensor No.11、262、287] Add 0-size Tensor support for argsort/sort API. May 29, 2025
@enkilee

enkilee commented May 29, 2025

Copy link
Copy Markdown
Collaborator Author

as_real按照3月份log的shape测试了下,好像也没有问题:

import paddle
x = paddle.randn(shape=[0, 4], dtype='complex64')
z = paddle.as_real(x)
print(z)

y = paddle.randn(shape=[10, 0, 10, 20], dtype='complex128')
z = paddle.as_real(y)
print(z)

result:

Tensor(shape=[0, 4, 2], dtype=float32, place=Place(gpu:0), stop_gradient=True,
       [])
Tensor(shape=[10, 0, 10, 20, 2], dtype=float64, place=Place(gpu:0), stop_gradient=True,
       [[],



        [],



        [],



        [],



        [],



        [],



        [],



        [],



        [],



        []])

@DanielSun11 DanielSun11 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@wanghuancoder
wanghuancoder merged commit cf56cbd into PaddlePaddle:develop May 30, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contributor External developers HappyOpenSource Pro 进阶版快乐开源活动,更具挑战性的任务

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants