Skip to content

[0-size Tensor No.9] Add 0-size Tensor support for argmax API. - #73614

Closed
luyl975 wants to merge 0 commit into
PaddlePaddle:developfrom
luyl975:feature/argmax-change
Closed

luyl975 wants to merge 0 commit into
PaddlePaddle:developfrom
luyl975:feature/argmax-change

Conversation

@luyl975

@luyl975 luyl975 commented Jun 25, 2025

Copy link
Copy Markdown
Contributor

PR Category

Execute Infrastructure

PR Types

Improvements

Description

在PaddleAPITest report/0size_tensor中检索paddle.argmax的错误日志。分析paddle.argmax用于沿指定轴查找张量中最大值的索引,返回的是离散索引,认为不存在反向过程,因而认为是前向过程出错。

image

前向修复:
a. 在Paddle代码中检索def argmax,发现该函数中并没有对输入张量维数的检查,而argmax的核心实现调用的是_C_ops的argmax
b. 以_C_ops的argmax在paddle/phi/ops/yaml中检索,发现argmax的InferMeta函数使用为:ArgMinMaxInferMeta
c. 在代码中检索ArgMinMaxInferMeta,其函数体位于paddle\phi\infermeta\unary.cc,检查其对于0-size张量的操作,发现它对于张量为0维时的处理为要求axis必须为-1或0
d. 在paddle/phi/kernels中检索argmax(考虑到报错的文件名为arg_min_max_kernel.cc,因而还对max_、arg_等进行检索),找全所有argmax有关Kernel的相关实现。发现存在函数ArgMaxKernel,共有四个涉及该函数的文件,分别为:
paddle\phi\kernels\arg_min_max_kernel.h
paddle\phi\kernels\cpu\arg_min_max_kernel.cc
paddle\phi\kernels\gpu\arg_min_max_kernel.cu
paddle\phi\kernels\xpu\arg_min_max_kernel.cc
其中第一个文件是后三个文件的头文件,因而考虑对后三个文件中的函数进行检查,其中0-size张量的报错由以下代码引发(改代码在后三个文件中均存在):

image

因而考虑在该函数执行前对输入的张量形状进行判断,
在paddle\phi\kernels\cpu\arg_min_max_kernel.cc的ArgMinMaxKernel函数
在paddle\phi\kernels\gpu\arg_min_max_kernel.cu的ArgMinMaxOpCUDAKernel函数
在paddle\phi\kernels\xpu\arg_min_max_kernel.cc的ArgMaxKernel函数分别添加以下代码

image

反向修复:
由于认为paddle.argmax函数不存在反向过程,因而不进行相关反向修复

单元测试:
在test\legacy_test\test_arg_min_max_op.py中添加0-size张量输入的单测:

image

其中self.dims若设为(0, 4, 5)时numpy产生报错,因而暂时无法进行self.dims=(0, 4, 5)的单元测试
测试结果:

image

PaddleAPITest测试结果:
下载PaddleAPITest:

image

进行测试:

image

Pcard-67164

@CLAassistant

CLAassistant commented Jun 25, 2025 •

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@paddle-bot paddle-bot Bot added the contributor External developers label Jun 25, 2025
@luotao1 luotao1 added the HappyOpenSource Pro 进阶版快乐开源活动,更具挑战性的任务 label Jun 26, 2025
@luotao1

luotao1 commented Jun 26, 2025

Copy link
Copy Markdown
Collaborator

需要解决下冲突

@luotao1

luotao1 commented Jun 26, 2025

Copy link
Copy Markdown
Collaborator

请签署CLA,commit使用的lubingxin,和提交PR的账号luyl975不一样

@luyl975 luyl975 closed this Jul 1, 2025
@luyl975
luyl975 force-pushed the feature/argmax-change branch from 99d9ea5 to 81aa5ba Compare July 1, 2025 07:49
@luyl975
luyl975 deleted the feature/argmax-change branch July 1, 2025 08:15
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