在昇腾AI处理器上进行BERT-CRF模型训练,发现Loss收敛异常。
在PyTorch模型迁移与训练过程中出现的精度问题,可以从以下两方面依次进行定位。
请参考ptdbg_ascend工具使用说明安装ptdbg_ascend精度工具。BERT-CRF模型训练工程可点击获取链接-ModelZoo,下载BERT-CRF模型训练脚本并准备训练环境和训练数据集。
cd examples/sequence_labeling vi task_sequence_labeling_ner_crf.py
from ptdbg_ascend import register_hook, overflow_check, seed_all, set_dump_path, set_dump_switch, acc_cmp_dump
model = Model().to(device) print(model) if 'npu' in device: optimizer = apex.optimizers.NpuFusedAdam(model.parameters(), lr=args.lr) model, optimizer = amp.initialize(model, optimizer, opt_level=args.opt_level, \ loss_scale=256, combine_grad=True, combine_ddp=True if distributed else False) else: optimizer = optim.Adam(model.parameters(), lr=args.lr) set_dump_path("./data/dump", dump_tag='npu_overflow') # 设置dump路径,最终数据保存在此路径下 register_hook(model, overflow_check, overflow_nums=1) # 使能溢出检测 updates_total = len(train_dataloader) * args.train_epochs scheduler = get_linear_schedule_with_warmup(optimizer, \ num_warmup_steps=warm_factor*updates_total, num_training_steps=updates_total)
bash ./test/train_full_1p.sh --data_path=$data_path # data_path请根据实际情况设置