减少深度学习模型训练过程对设备的损耗
近期在拿paddlepaddle跑知识蒸馏,这一块遇上了很多因为硬件限制导致出问题的地方,查资料的时候发现在其他框架也有类似的问题(溢出、进程出问题等),因此在这里对目前收集到的解决方案做一下小结。
跑模型的时候很多人设备环境有限,公有GPU资源分配不上,多少求人不如求己,只能在自己电脑上部署深度学习环境,如果遇上了很多受设备限制无法跑的模型,可以参考这里对自己的代码或者环境做一下调整,或许会有帮助。
1、调低batchsize
batchsize的大小对设备的损耗是最直观的,每次计算的时候,总需要将一个batch内的数据全部投喂到模型中,让模型学习其中的特征,在这种情况下如果显卡算力有限,直接卡死了batchsize的上限。
毕竟不是谁家也有几百块显卡来跑大模型的,别人在几百块显卡上设置的batchsize,在自己的显卡上当然要对应调低一些。调低这个参数当然不是最优解,但是却是新手最需要优先考虑的方案。
2、控制一个任务只加载一个dataloader
这一块也是最近才发现的,最近经常遇上shm分区溢出,网上有人说是尽量只加载一个dataloader,一个dataloader在初始化成功的时候会默认持续占有一段存储空间,以便之后的取出数据,如果同时加载了trainloader和valloader,一些设备可能会承受不住。
这种堆砌着跑的方式,新手多少需要慎用,如果需要测试集的验证结果,建议新手先保存每一轮的权重文件,然后再设计代码单独对每轮的权重文件投喂测试集进行测试。