前言:
据我了解很多较为成熟的模型,比如说:bert等,他们的实验过程都是在云TPU上进行了微调,且相关TPU的容量均为64GB;
我们目前一般企业中的服务器均为GPU,且内存层面16G、32G不等。
也就是说我们此时的硬件条件如果强行使用官方给出来的指导参数,很可能会出现内存溢出现象,这个问题笔者最近接受了领导安排的一些新模型的调研任务中感受颇深,接下来简单聊聊。
调研过程中遇到的问题
- 内存溢出
问题解决思路
1、鉴于内存使用量与批量大小有直接关系,所以我优先想到的就是调整batch_size大小;
2、使用较短的最大序列长度进行微调以节省服务器内存,将max_seq_length从默认值512,直接调整到128(此处数值调整还需要客观参考训练集中的数据的实际情况来确定,非无脑调整),不仅解决有利于解决模型在预训练过程中的内存溢出问题,还加快了模型的训练速度;
3、查看相关模型的源码发现,该模型默认优化器是Adam,这需要很多存储m和v向量的额外内存。所以我对优化器也做了调整,切换了SGD;
当我做完以上三点调整之后,直接启动了模型的预训练过程,但是在预训练过程中,依然出现了内存溢出问题;
之后我又在查看model_path的过程中,发现我他娘的使用的是Large model,果断调整了Base model;
4、查阅资料发现,Large model要比Base model需要消耗多得多的内存(requires significantly more memory than Base.),调整之后发现,一起正常,问题解决;