PaddleMIX icon indicating copy to clipboard operation
PaddleMIX copied to clipboard

【PPMix No.17】 mar推理对齐

Open 594233 opened this issue 6 months ago • 3 comments

add mar model and demo files Paddle效果 mar Torch效果 sample (1) https://github.com/PaddlePaddle/PaddleMIX/issues/1046#issuecomment-2751017056

594233 avatar May 14 '25 17:05 594233

Thanks for your contribution!

paddle-bot[bot] avatar May 14 '25 17:05 paddle-bot[bot]

把对齐的标准和结论也贴到这个PR里吧

lyuwenyu avatar May 15 '25 08:05 lyuwenyu

按模块测试精度,分别固定相同输入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())。 image 试了一些办法没有能让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 随机性) |

594233 avatar May 15 '25 14:05 594233

还有什么修改意见吗老师

594233 avatar May 17 '25 07:05 594233

建议你按照readme走一遍 是不是能够走通完整流程 @594233

lyuwenyu avatar May 19 '25 07:05 lyuwenyu

建议你按照readme走一遍 是不是能够走通完整流程 @594233

好的老师,我现在进行实验

594233 avatar May 19 '25 07:05 594233

建议你按照readme走一遍 是不是能够走通完整流程 @594233

好的老师,我现在进行实验

老师,您建议的对,从新环境运行发现了以下错误并进行了修改

  1. requirements.txt 有问题,由于我是使用conda生成的依赖目录,包含了许多只能用pip安装,无法用conda安装的包,更新了requirements.txt文件,直接固定使用pip安装
  2. 转换脚本的内部系统路径设置错误,由往上三层变为往上五层
  3. 运行过程中出现了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 麻烦老师继续审阅

594233 avatar May 19 '25 10:05 594233

@luotao1 老师,可以合入了嘛,或者还有哪些问题需要修改呢

594233 avatar May 20 '25 07:05 594233

lgtm

lyuwenyu avatar May 20 '25 08:05 lyuwenyu

hi, @594233

  • 非常感谢你对飞桨的贡献,我们正在运营一个PFCC组织。PFCC是飞桨开源的贡献者俱乐部,只有给飞桨合入过代码的开发者才能加入,俱乐部里每两周会有一次例会(按兴趣参加),也会时不时办线下meetup面基,详情可见 https://github.com/luotao1 主页说明。
  • 如果你对PFCC有兴趣,请发送邮件至 [email protected],我们会邀请你加入~

luotao1 avatar May 21 '25 02:05 luotao1