PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
22.1k stars 5.55k forks source link

`paddle.linalg.triangular_solve` 函数反向传播时给出的梯度有误 #57863

Open bridgekat opened 11 months ago

bridgekat commented 11 months ago

bug描述 Describe the Bug

paddle.linalg.triangular_solve 函数反向传播时给出的梯度有误

# paddlepaddle <= 2.5.1
import paddle

a = paddle.to_tensor([[-1.]], dtype=paddle.float32)
a.stop_gradient = False
b = paddle.to_tensor([[-1.]], dtype=paddle.float32)
b.stop_gradient = False
c = paddle.linalg.triangular_solve(a, b, upper=False, transpose=False, unitriangular=False)

paddle.grad(outputs=[c], inputs=[a])

在Windows+CPU平台下多次运行这段代码,无报错,但输出的结果不确定(可能出现 01-1 等情况)。正确值应为 1

其他补充信息 Additional Supplementary Information

Screenshot 2023-10-02 222559
zhwesky2010 commented 11 months ago

@bridgekat 你好,正确结果是 -1 ,我这边用linux cpu / gpu计算结果也是不对的,所以应该是kernel计算的问题,与设备关系不大,我后面会修复这个kernel的bug。