Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bert模型的embedding层在X86+英伟达平台上使用opencl的结果和cpu的结果对不上 #2424

Closed
tzhang2014 opened this issue Jun 12, 2023 · 24 comments
Labels
bug Something isn't working

Comments

@tzhang2014
Copy link

tzhang2014 commented Jun 12, 2023

平台(如果交叉编译请再附上交叉编译目标平台):

Platform(Include target platform as well if cross-compiling):

X86

Github版本:

Github Version:

2.5.1
直接下载ZIP包请提供下载日期以及压缩包注释里的git版本(可通过7z l zip包路径命令并在输出信息中搜索Comment 获得,形如Comment = bc80b11110cd440aacdabbf59658d630527a7f2b)。 git clone请提供 git commit 第一行的commit id

Provide date (or better yet, git revision from the comment section of the zip. Obtainable using 7z l PATH/TO/ZIP and search for Comment in the output) if downloading source as zip,otherwise provide the first commit id from the output of git commit

编译方式:

Compiling Method

请在这里粘贴cmake参数或使用的cmake脚本路径以及完整输出
Paste cmake arguments or path of the build script used here as well as the full log of the cmake proess here or pastebin
cmake .. \
-DMNN_BUILD_TEST=ON \
-DMNN_CUDA=ON \
-DMNN_CUDA_PROFILE=ON \
-DMNN_OPENCL=ON \
-DMNN_BUILD_QUANTOOLS=ON \
-DMNN_BUILD_DEMO=ON \
-DMNN_BUILD_CONVERTER=ON \
-DMNN_BUILD_BENCHMARK=ON \
-DMNN_SEP_BUILD=OFF \
-DMNN_BUILD_OPENCV=ON \
-DMNN_IMGCODECS=ON

编译日志:

Build Log:

粘贴在这里
Paste log here or pastebin

demo_embed_debug.zip

@jxt1234 jxt1234 added the bug Something isn't working label Jun 14, 2023
@jxt1234
Copy link
Collaborator

jxt1234 commented Jun 14, 2023

收到

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 16, 2023

可以修改下source\backend\opencl\execution\image\EltwiseExecution.cpp文件,将210行的return new EltwiseExecution(inputs, "in0-sign(in1)*in0/(fabs(in1)>(FLOAT4)((FLOAT)0.0000001)?fabs(in1):(FLOAT4)((FLOAT)0.0000001))", op, backend);改为:
return new EltwiseExecution(inputs, "in0-floor(sign(in1)*in0/(fabs(in1)>(FLOAT4)((FLOAT)0.0000001)?fabs(in1):(FLOAT4)((FLOAT)0.0000001)))*in1", op, backend);
再重新编译试试。

@tzhang2014
Copy link
Author

可以修改下source\backend\opencl\execution\image\EltwiseExecution.cpp文件,将210行的return new EltwiseExecution(inputs, "in0-sign(in1)*in0/(fabs(in1)>(FLOAT4)((FLOAT)0.0000001)?fabs(in1):(FLOAT4)((FLOAT)0.0000001))", op, backend);改为: return new EltwiseExecution(inputs, "in0-floor(sign(in1)*in0/(fabs(in1)>(FLOAT4)((FLOAT)0.0000001)?fabs(in1):(FLOAT4)((FLOAT)0.0000001)))*in1", op, backend); 再重新编译试试。

你好,替换后,提交的模型是可以对上,但是实际我有三个输入,另外一个输入权重超过25M,我就裁了,三个输入结果还是对不上。
bert_embed

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 16, 2023

能给下三输入的模型吗

@tzhang2014
Copy link
Author

能给下三输入的模型吗

git上传不了,可以给个邮箱吗,我把测试样例和模型一起发过去

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 16, 2023

发送到这个邮箱吧
[email protected]

@tzhang2014
Copy link
Author

发送到这个邮箱吧 [email protected]

已发,请查收哈

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 21, 2023

这个模型我本地测试结果opencl与cpu是一致的。

@tzhang2014
Copy link
Author

这个模型我本地测试结果opencl与cpu是一致的。

附件是我这边的打印信息,和您那边的是一样的吗?我用的是2.5.1的MNN
log.zip

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 21, 2023

我这边复现问题了,我先定位下。

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 26, 2023

我这边把输入弄对,现在cpu和opencl结果一致了,但与你给的log结果显示不一样。你那边可以试试MNNV2Basic.cpp这个文件,改下里面的输入,看下结果对不对。

@tzhang2014
Copy link
Author

我这边把输入弄对,现在cpu和opencl结果一致了,但与你给的log结果显示不一样。你那边可以试试MNNV2Basic.cpp这个文件,改下里面的输入,看下结果对不对。

好的,我我试试哈,感谢

@tzhang2014
Copy link
Author

tzhang2014 commented Jun 26, 2023

我这边把输入弄对,现在cpu和opencl结果一致了,但与你给的log结果显示不一样。你那边可以试试MNNV2Basic.cpp这个文件,改下里面的输入,看下结果对不对。

你好,我用basic把里面的filename << pwd << "input0.txt" 改成filename << pwd << "input_ids.txt"后,cpu和opencl还是不一样,不改的话是因为代码里面给输入都是送0,输出是一样的,

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 26, 2023

使用basic,你可以把runMask参数置为2,然后在pwd目录下创建output文件夹,这个会在运行后将每一层的输入输出dump下来,你可以看下cpu和opencl的dump结果是否一致。

@tzhang2014
Copy link
Author

使用basic,你可以把runMask参数置为2,然后在pwd目录下创建output文件夹,这个会在运行后将每一层的输入输出dump下来,你可以看下cpu和opencl的dump结果是否一致。

我就是这么测的呢,两个结果不一样。。。

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 26, 2023

dump显示第一层的输入是一样的,但是经过第一个binary之后结果就不一致了吗?我这边之前不对就是第一次的输入就不一致了,后面改好后,结果就变得一样了。

@tzhang2014
Copy link
Author

dump显示第一层的输入是一样的,但是经过第一个binary之后结果就不一致了吗?我这边之前不对就是第一次的输入就不一致了,后面改好后,结果就变得一样了。

我是直接看最后的output.txt的呢

@tzhang2014
Copy link
Author

dump显示第一层的输入是一样的,但是经过第一个binary之后结果就不一致了吗?我这边之前不对就是第一次的输入就不一致了,后面改好后,结果就变得一样了。

为啥opencl的输入和cpu的不一样呢,都是读的input_ids

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 26, 2023

opencl涉及到数据从cpu到gpu的拷贝,你有阿里钉账号吗,我们可以私聊下

@tzhang2014
Copy link
Author

opencl涉及到数据从cpu到gpu的拷贝,你有阿里钉账号吗,我们可以私聊下

有,我在MNN钉钉群里,怎么加您

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 26, 2023

你在群里的名称是什么

@tzhang2014
Copy link
Author

你在群里的名称是什么

我在1群发消息了,看到没

@Qxinyu
Copy link
Collaborator

Qxinyu commented Jun 26, 2023

你搜下共进吧,我是在三群

@tzhang2014
Copy link
Author

你搜下共进吧,我是在三群

我进三群了,加您了看到了么

@jxt1234 jxt1234 closed this as completed Jun 29, 2023
This was referenced Jul 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants