自 BERT 出现以来,NLP 领域已经进入了大模型的时代,大模型虽然效果好,但是毕竟不是人人都有着丰富的 GPU 资源,在训练时往往就捉襟见肘,出现显存 out of memory 的问题,或者训练时间非常非常的久,因此,这篇文章主要解决的问题就是如何在 GPU 资源受限的情况下训练 transformers 库上面的大模型。
这篇文章源自Vadim Irtlach 大佬在 Kaggle 的开源 notebook,感谢原作者的分享,本 NLP 小白觉得受益良多,因此搬运分享给大家,已取得作者授权,大部分内容是照搬翻译过来的,小部分内容结合自己的理解进行了补充和修改,不对的地方请大家批评指正。
尽管 Huggingface 开源的 Transformers 在自然语言处理(NLP)任务中取得了惊人的成功,但由于里面的模型参数数量庞大,即使是使用 GPU 进行训练或者部署,也仍具有非常大的挑战性,因为用如此大的模型进行训练或推理,会很容易发生显存不足(OOM)以及训练时间过长的问题。(这里想吐槽一句的是,kaggle 上面的 NLP 比赛现在动不动就用五折 debert-large-v3,没几块 V100 根本玩不起这种比赛,所以这篇文章对我这种只能用 colab 的 p100 来跑实验的穷学生来说真的是福音啊!)
然而,有很多方法可以避免显存不足以及训练时间过长的方法,这篇文章的主要贡献就是介绍了这些方法的原理以及如何实现,具体包括以下几种方法:
-
梯度累积(Gradient Accumulation)
-
-
自动混合精度(Automatic Mixed Precision)
-
-
梯度检查点(Gradient Checkpointing)
-
-
- 均匀动态填充(Uniform Dynamic Padding)
阅读详情
内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢