使用少量数据训练模型时非常正常,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

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐