PatrickStar icon indicating copy to clipboard operation
PatrickStar copied to clipboard

希望能够保持特定层的 weight 仍为 float32

Open liaojianjin opened this issue 3 years ago • 5 comments

有办法让 BatchNorm2d 之类的层保持 float32 进行训练吗?用 half 可能导致 loss 不好收敛

liaojianjin avatar Feb 21 '22 07:02 liaojianjin

可以在一部分结构上用 torch_scope 这个接口包一下,在 torch scope 里面的部分会用使用 fp32 进行训练,例如 moe 的例子里: https://github.com/Tencent/PatrickStar/blob/0731c6ed2065e62d0cd489813b4e162880a5ab51/examples/moe/moe_bert.py#L53-L64

不过注意,如果只是要把一层设置为 fp32 的话,这里的 do_allreduce 应该设置为 True

zhuzilin avatar Feb 22 '22 02:02 zhuzilin

可以在一部分结构上用 torch_scope 这个接口包一下,在 torch scope 里面的部分会用使用 fp32 进行训练,例如 moe 的例子里:

https://github.com/Tencent/PatrickStar/blob/0731c6ed2065e62d0cd489813b4e162880a5ab51/examples/moe/moe_bert.py#L53-L64

不过注意,如果只是要把一层设置为 fp32 的话,这里的 do_allreduce 应该设置为 True

妙啊,意思是这块是torch在管理的,不需要ps参与?

Jack47 avatar Mar 03 '22 06:03 Jack47

可以在一部分结构上用 torch_scope 这个接口包一下,在 torch scope 里面的部分会用使用 fp32 进行训练,例如 moe 的例子里: https://github.com/Tencent/PatrickStar/blob/0731c6ed2065e62d0cd489813b4e162880a5ab51/examples/moe/moe_bert.py#L53-L64

不过注意,如果只是要把一层设置为 fp32 的话,这里的 do_allreduce 应该设置为 True

妙啊,意思是这块是torch在管理的,不需要ps参与?

应该是的,torch_scope 把 config 做了个临时修改 https://github.com/Tencent/PatrickStar/blob/d2a5e1d321e3783258a4792ff2e27751bc2e67a3/patrickstar/core/preprocess.py#L80-L86 在 Module init后将参数注册为torch管理,并且保持输入输出为float https://github.com/Tencent/PatrickStar/blob/d2a5e1d321e3783258a4792ff2e27751bc2e67a3/patrickstar/core/preprocess.py#L366-L375

liaojianjin avatar Mar 03 '22 06:03 liaojianjin

@Jack47 @liaojianjin 最近我们在对派大星进行全面的重构...所以这些特性可能之后都会有些变化.. 例如我们可能之后会直接复用 pytorch autocast,而不是实现自己版本的混合精度训练了,这样的话本 issue 中提到的 layernorm 设置成 fp32 的问题可能就迎刃而解了,也不需要在迁移后重新对齐精度了。所以现在的暴露的接口可能比较简陋,非常抱歉...

zhuzilin avatar Mar 03 '22 07:03 zhuzilin

@Jack47 @liaojianjin 最近我们在对派大星进行全面的重构...所以这些特性可能之后都会有些变化.. 例如我们可能之后会直接复用 pytorch autocast,而不是实现自己版本的混合精度训练了,这样的话本 issue 中提到的 layernorm 设置成 fp32 的问题可能就迎刃而解了,也不需要在迁移后重新对齐精度了。所以现在的暴露的接口可能比较简陋,非常抱歉...

好的好的,👍

Jack47 avatar Mar 03 '22 08:03 Jack47