使用少量数据训练模型时非常正常,Loss收敛比较快代码没见报错,用大数据量训练训练时就跑了一定时间后报grad_norm值为Nan或Inf了,出现的时间不定但是跑不了太久,数据标注质量总体是有保证的,同一批数据用于训练别的模型没见报什么错,怀疑报错模型的代码实现或者参数设置有不大适合的地方,修改两处参数后即可顺利完成训练:

一是把transformer相关层次结构训练时使用的droppout去掉:

                   attn_cfgs=[
                        dict(
                            type='MultiheadAttention',
                            embed_dims=256,
                            num_heads=8,
                            dropout=0.1), 
                        dict(
                            # type='PETRMultiheadFlashAttention',
                            type='PETRMultiheadAttention',  
                            embed_dims=256,
                            num_heads=8,
                            dropout=0.1), 
                        ],
                    feedforward_channels=2048,
                    ffn_dropout=0.1,
                    with_cp=True,  ###use checkpoint to save memory
                    operation_order=('self_attn', 'norm', 'cross_attn', 'norm',
                                     'ffn', 'norm')),

改成:

                     attn_cfgs=[
                        dict(
                            type='MultiheadAttention',
                            embed_dims=256,
                            num_heads=8,
                            dropout=0), 
                        dict(
                            # type='PETRMultiheadFlashAttention',
                            type='PETRMultiheadAttention',  
                            embed_dims=256,
                            num_heads=8,
                            dropout=0), 
                        ],
                    feedforward_channels=2048,
                    ffn_dropout=0,
                    with_cp=True,  ###use checkpoint to save memory
                    operation_order=('self_attn', 'norm', 'cross_attn', 'norm',
                                     'ffn', 'norm')),

二是把grad的max_norm由默认的35改成1:

optimizer_config = dict(type='Fp16OptimizerHook', loss_scale='dynamic', grad_clip=dict(max_norm=1, norm_type=2))

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐