当然也是最low最迫不得已的办法,GPU显存越大越强,核数越多越强,充钱少掉头发,充钱使人变强.
(1) 先观察GPU的占用情况: 使用以下linux命令等待一会儿即可得到GPU的情况
nvidia-smi
我们发现,这8核GPU没有哪一核被使用
(2) 查看是否还有其他进程在偷偷地运行着:
fuser -v /dev/nvidia*
如有: 请杀死
(1) NLP任务:如果是基于TensorFlow的BERT模型, 以下几个参数需要注意:
max_seq_length=128 # 最大序列长度
如: 问答的原始的数据往模型输入, 在Bert中是这样的:
[CLS] Are you OK ? [SEP] I’m OK . [SEP]
上句为text_a, 下句是text_b, 我们需要判断text_b是否是text_a的下句, 当上下两句总共的长度超过128的时候, 会truncate截断到128长度, 当长度小于128的时候, 会补0补到128长度, 也就是说, 对这个参数的处理非常消耗资源, 极耗显存, 我开始的模型设置max_seq_length=512出现资源不足, 当降到128时, 成功跑通模型.这个参数可以适当调小:512–>384–>256–>128–>64都可以尝试
num_train_epochs=2 # 训练轮次
所有样本轮一次,即为一个epoch,增大此值,计算量增大,一个20000条数据的二分类问题,epochs=4大概要10分钟(16G 单GPU);
当出现GPU资源不足的时候,可以先适当小一些.
train_batch_size=32 # 使用小批量梯度下降优化时,每次处理32个样本
可以适当调小, 64–>32, 32–>16, 16–>8 都是比较好的, 特别是在XLNet模型中, 影响较大.
(2) 在图像处理任务中:
batch_size # 每次处理的图片数量
先对半缩小试试, 不行再缩小, 甚至取 batch_size=1 都是可以的试验一下, 实在不行, 请购买高质量GPU, 毕竟这个参数: 与GPU显存容量简单成正比, 设置越小, 显卡负担越小, 但GPU利用率越低, 而且当设置为1时, 一次处理一个样本, 不就变成了随机梯度下降?
文中有不足的地方,还望朋友们评论指正, 感谢 !