前面课程当中,对数据集进行了替换,接下来还有一部分代码需要调整。主要是两个方面,一个评估方法里面有一个bug,另外一个就是Kaggle超时的问题,我们用Kaggle的两块GPU做并行训练,加快训练速度。

代码示例

1、Bug修复

内容不可见,请联系管理员开通权限。

2、不冻结Bert参数

冻结Bert参数之后,训练过程中只会更新Linear参数,对复杂任务来说是不够的。

内容不可见,请联系管理员开通权限。

3、修改配置

之前考虑到样本不均衡的问题,我们对0标签做了降权,对subject做了加权。在工业级项目中,这个超参要做大量精调,才能有大约十分位的提升,同时也有很多同学有疑惑,给大家减负,就索性不调了,全部重置为1。

内容不可见,请联系管理员开通权限。

4、多GPU并行训练

关系抽取的任务比较难训练,单GPU训练时间会比较长,Kaggle上有T4x2,我们正好可以利用起来,并行训练速度会快很多。

首先,定义一个 BalancedDataParallel 类,来处理多 GPU 负载均衡的问题,这个类的来源是 transformer-xl 的源码。

内容不可见,请联系管理员开通权限。

然后,修改调用逻辑,给两块GPU分配不同的 batch_size,第一块本身负载就比较大,所以分配相对少的数据。

内容不可见,请联系管理员开通权限。

好的,现在本地代码就全部改完了,接下来就是同步到Kaggle,然后重新训练模型了。

本文链接:http://edu.ichenhua.cn/edu/note/726

版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!