当前位置:   article > 正文

解决bert模型在gpu上实验结果的不可复现问题_bert 推理在不同的gpu结果不一致

bert 推理在不同的gpu结果不一致

1. 设置随机种子(一般在添加完参数后设置)

  args = parser.parse_args() #(代码中需要的一些参数)
  set_seed(args.seed)
  • 1
  • 2
def set_seed(seed):
    random.seed(seed)
    os.environ['PYTHONHASHSEED'] = str(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False
    torch.backends.cudnn.enabled = True
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2. 检查bert模型的输入是否每次都相同

(1)在设置完第一步中的随机种子后,基本上可实现结果的可复现性。我的算法中用到了bert模型,但设置完随机种子后每次的实验结果仍然会不一样。
(2)后来通过检查发现,bert的输入input_ids每次不一样,因此得到的输出表征会不同,自然最终的实验结果也会不同。
(3)原因在于:我在将类别的token拼接文本token做为bert模型的输入时,涉及到使用set()的方式来过滤掉类别token中的重复元素。由于set()是一种无序的不重复元素序列,因此每次在gpu运行代码时,过滤后的类别token中元素的顺序都会随机改变(但在cpu上没有改变~不知为啥),所以input_ids会不同。
(4)解决方法:在生成bert的输入时,避免使用set()。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/345015
推荐阅读
相关标签
  

闽ICP备14008679号