在昇腾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请根据实际情况设置