PaddlePaddle / Paddle

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

关于自定义c++算子的运算结果不一致问题 #39173

Open WhiteFireFox opened 2 years ago

WhiteFireFox commented 2 years ago

问题描述在这个仓库的readme里面,真的非常辛苦大佬了,在这里给各位大佬磕头了:

https://github.com/WhiteFireFox/rnnt

paddle-bot-old[bot] commented 2 years ago

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档常见问题历史IssueAI社区来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

GT-ZhangAcer commented 2 years ago

Mark

xingfeng01 commented 2 years ago

https://github.com/WhiteFireFox/rnnt/tree/main/paddle 这里好像少了 setup.py 文件

WhiteFireFox commented 2 years ago

https://github.com/WhiteFireFox/rnnt/tree/main/paddle 这里好像少了 setup.py 文件

不好意思,打包的时候忘了,已经更新上去了,辛苦您们再查收一遍

WhiteFireFox commented 2 years ago

https://github.com/WhiteFireFox/rnnt/tree/main/paddle 这里好像少了 setup.py 文件

不好意思,打包的时候忘了,已经更新上去了,辛苦您们再查收一遍

刚刚更新了paddle/binding.cc文件,与aistudio上面的对应上了,辛苦您们查收,给大佬磕头了

xingfeng01 commented 2 years ago

已经分配到相关同学

WhiteFireFox commented 2 years ago

非常感谢您的帮助

chenwhql commented 2 years ago

请问这个算子,在C++代码实现中有随机数相关的逻辑吗

WhiteFireFox commented 2 years ago

请问这个算子,在C++代码实现中有随机数相关的逻辑吗

C++代码实现中没有随机数相关,随机数是在python里已经取到了,paddle/pytorch都是用的numpy取的后再转Tensor,最后进的C++算子中进行运算

chenwhql commented 2 years ago

好的,我复现一下再和您沟通

chenwhql commented 2 years ago

同步一下进展,在测试脚本中,我看paddle和torch的写法不太一样,就把paddle的对应更新了一下,单测就没有diff了,麻烦您确认下是不是这样,更改如下

image

但是我把torch的改成和之前paddle一样的写法,这里也是能过的,更改如下

image

这说明paddle这里可能存在什么隐性的bug,我还需要继续追查,如果您比较着急,可以先试试按上图更新写法后继续您的工作,不阻塞就好

WhiteFireFox commented 2 years ago

X S6Y N4%OPLR% V { 5IZF

有点奇怪,我这边test不过去,附上项目链接,可以帮忙看一下吗:https://aistudio.baidu.com/aistudio/projectdetail/3448565

chenwhql commented 2 years ago

好的,我明天在2.2上分析一下再回复您,可能是我这边用的是develop版本导致的

WhiteFireFox commented 2 years ago

好的,我明天在2.2上分析一下再回复您,可能是我这边用的是develop版本导致的

好,那我尝试下develop版本后再给您回复,太感谢您了

WhiteFireFox commented 2 years ago

好的,我明天在2.2上分析一下再回复您,可能是我这边用的是develop版本导致的

是的,在develop版本上面没有问题了,谢谢你了,确实2.2和develop有区别。

WhiteFireFox commented 2 years ago

好的,我明天在2.2上分析一下再回复您,可能是我这边用的是develop版本导致的

是的,在develop版本上面没有问题了,谢谢你了,确实2.2和develop有区别。

在c++的实现中,rnnt这个算子在并行运算中需要取某个位置的数出来运算,取数的index是根据同一时刻载入gpu中推算得到的,会不会是这个问题导致的?

chenwhql commented 2 years ago

2.2.2会报那个错误是由于在执行rnnt_loss之前,没有切换会gpu device导致的,2.2.2中tensor的stream是在当前全局place为gpu place时才会设置,而develop近期在自定义算子上有比较大的重构,取stream这里改为直接取全局默认stream了,所以develop不会报错

所以,在2.2要避免上面那个报错的话,需要把place改回来 image

chenwhql commented 2 years ago

develop近期对自定义算子的改动主要是,支持在自定义算子中调用C++ API,提升易用程度,目前基于develop版本,也可以使用paddle::experimental::empty, paddle::experimental::zeros_like等接口(因为API还不太稳定,暂时加experimental),参数基本和Python一致,目前接口还在不断补充中,预计2.3版本体系会比较完善,有兴趣您也可以试用

image

WhiteFireFox commented 2 years ago

develop近期对自定义算子的改动主要是,支持在自定义算子中调用C++ API,提升易用程度,目前基于develop版本,也可以使用paddle::experimental::empty, paddle::experimental::zeros_like等接口(因为API还不太稳定,暂时加experimental),参数基本和Python一致,目前接口还在不断补充中,预计2.3版本体系会比较完善,有兴趣您也可以试用

image

好的,这个C++ API期待已久了,期待您们的更新,但是有没有办法不用再在前面加set_device("cpu")这种操作呢,也想知道为啥先set_device("cpu")再.cuda就正常了。

chenwhql commented 2 years ago

嗯嗯,这个我还会继续追查,有进展再和您同步

GT-ZhangAcer commented 2 years ago

非常感谢@chenwhql @xingfeng01 两位大佬这近些天的支持

WhiteFireFox commented 2 years ago

嗯嗯,这个我还会继续追查,有进展再和您同步

好的,感谢大佬们这些天的支持,期待您们的进展,使得python那边的coding更加简洁高效~