PatrickStar
PatrickStar copied to clipboard
希望能够保持特定层的 weight 仍为 float32
有办法让 BatchNorm2d 之类的层保持 float32 进行训练吗?用 half 可能导致 loss 不好收敛
可以在一部分结构上用 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_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
这个接口包一下,在 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
@Jack47 @liaojianjin 最近我们在对派大星进行全面的重构...所以这些特性可能之后都会有些变化.. 例如我们可能之后会直接复用 pytorch autocast,而不是实现自己版本的混合精度训练了,这样的话本 issue 中提到的 layernorm 设置成 fp32 的问题可能就迎刃而解了,也不需要在迁移后重新对齐精度了。所以现在的暴露的接口可能比较简陋,非常抱歉...
@Jack47 @liaojianjin 最近我们在对派大星进行全面的重构...所以这些特性可能之后都会有些变化.. 例如我们可能之后会直接复用 pytorch autocast,而不是实现自己版本的混合精度训练了,这样的话本 issue 中提到的 layernorm 设置成 fp32 的问题可能就迎刃而解了,也不需要在迁移后重新对齐精度了。所以现在的暴露的接口可能比较简陋,非常抱歉...
好的好的,👍