PaddleMIX
PaddleMIX copied to clipboard
【PPMix No.17】 mar推理对齐
add mar model and demo files
Paddle效果
Torch效果
https://github.com/PaddlePaddle/PaddleMIX/issues/1046#issuecomment-2751017056
Thanks for your contribution!
把对齐的标准和结论也贴到这个PR里吧
按模块测试精度,分别固定相同输入float32
MAR 模型的forward主要由三个组件构成,已实现mask的生成逻辑对齐(迁移实现部分torch.scatterAPI,实现相同逻辑广播)在forward_loss部分,时间步与噪音生成调用了randint及randn API,而即使设置了相同的seed,Paddle与Torch生成的参数依旧不同。
当固定了这两个参数时,依旧产生了非常随机的误差,这个随机性来自于前向扩散过程。固定前向扩散后,分析发现这些误差的产生是由于Torch模型推理时自动使用了float16精度计算,而Paddle仍然使用float32,而高斯扩散前向扩散过程x_t = self.q_sample(x_start, t, noise=noise)可能会加大了这种误差。由于扩散过程中的随机性,使得result_lossshape[1024]中的某个数可能被随机到e11次方量级(实际推理应该会很少发生),使得数据误差剧增(最终结果位为该张量的mean())。
试了一些办法没有能让Torch的模型以float32精度运行
x = self.forward_mae_encoder(x, mask, class_embedding)z = self.forward_mae_decoder(x, mask)loss = self.forward_loss(z=z, target=gt_latents, mask=mask)| 模块 | 精度误差 | |------------------------|-----------------------| |forward_mae_encoder()|3.54e-07| |forward_mae_decoder()|1.75e-08| |forward_loss()| 不稳定(依赖q_sample随机性) | |model()| ≤0.02(依赖q_sample随机性) |
还有什么修改意见吗老师
建议你按照readme走一遍 是不是能够走通完整流程 @594233
建议你按照readme走一遍 是不是能够走通完整流程 @594233
好的老师,我现在进行实验
建议你按照readme走一遍 是不是能够走通完整流程 @594233
好的老师,我现在进行实验
老师,您建议的对,从新环境运行发现了以下错误并进行了修改
- requirements.txt 有问题,由于我是使用conda生成的依赖目录,包含了许多只能用pip安装,无法用conda安装的包,更新了requirements.txt文件,直接固定使用pip安装
- 转换脚本的内部系统路径设置错误,由往上三层变为往上五层
- 运行过程中出现了reshape API报错TypeError: reshape() takes from 2 to 3 positional arguments but 4 were given,推测由于某些依赖环境导致的,使用元组传递形状参数,即解决 例如 x = x[(1 - mask_with_buffer).nonzero(as_tuple=True)].reshape(bsz, -1, embed_dim) 更改为 x = x[(1 - mask_with_buffer).nonzero(as_tuple=True)].reshape((bsz, -1, embed_dim)) 修改完上述错误已能按README顺利操作 @lyuwenyu 麻烦老师继续审阅
@luotao1 老师,可以合入了嘛,或者还有哪些问题需要修改呢
lgtm
hi, @594233
- 非常感谢你对飞桨的贡献,我们正在运营一个PFCC组织。PFCC是飞桨开源的贡献者俱乐部,只有给飞桨合入过代码的开发者才能加入,俱乐部里每两周会有一次例会(按兴趣参加),也会时不时办线下meetup面基,详情可见 https://github.com/luotao1 主页说明。
- 如果你对PFCC有兴趣,请发送邮件至 [email protected],我们会邀请你加入~