PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
22.19k
stars
5.57k
forks
source link
bfloat16 dtype 下 paddle.nn.functional.linear和 torch.nn.functional.linear 存在diff #58561
Open
wtmlon opened 12 months ago
bug描述 Describe the Bug
Description
注:本 issue 内需要用到的脚本都在这个PR,可直接下载
在迁移 paddlenlp 模型时发现两端会在 nn.Linear后出现 diff,排查后发现paddle.matmul算子与 torch.matmul存在 diff
复现流程,首先在 paddle 虚拟环境下运行bf16_matmul.py,读取给定的 hs_0.npy(fp32)作为 x,w.npy (fp32)作为 W,进行(bf16) matmul 运算和 F.linear 运算,得出结果存为sdpa.npy(fp32)/sdpa1.npy(fp32), 该脚本代码如下
x_np = np.load('hs_0.npy') x = paddle.to_tensor(x_np, dtype='bfloat16') w_np = np.load('w.npy') w = paddle.to_tensor(w_np, dtype='bfloat16')
out = F.linear(x, w.T, bias=None) out1 = paddle.matmul(x, w, transpose_y=True) print(out) print(paddle.all((out-out1)==0)) np.save('sdpa.npy', out.astype('float32')) np.save('sdpa1.npy', out1.astype('float32'))
最后运行 check.a.py脚本对两端结果做差
可以看到在 gpu 下,两端 matmul 可以对齐,但是两端的 F.linear 是有 diff 的
其他补充信息 Additional Supplementary Information
No response