最近训练大模型一直踩坑,所以想出一个板块来记录,今天主要说训练数据方面
大模型训练一定要注意几个点,之前只知道batch size很重要,忽视了其他两个点。
- batchsize:每一个GPU上面有一个dataloader,每一个dataloader一次给模型的数据数量
- 每个epoch见到的样本数量:GPU数量batchsizenum steps per epoch
- 每个epoch参数更新的次数:每一个全局accu_step更新一次。打个比方,比如有四张卡,假设没有设置accum step,那么就是四张卡并行的走完一个step,统计一下更新参数。如果设置了acc_step,那么久需要四张卡并行的走完acc_step这么多step之后更新一次参数
- 在并行训练的框架下面,比如torchrun,dataloader本身只是和单卡的batchsize有关
所以训练的时候,尤其需要注意更改数据的时候以上的超参数是否控制好了。尤其是当我们下卡不够的时候,我们设置了acc_step=m,那么这个时候每一个epoch的参数更新的次数就会变成原来(n)的 n/m倍,也就是说参数更新的次数变少了。