ResourceExhaustedError(多方面解决GPU显存不足)

ResourceExhaustedError 字面意思就是:该模型在运行过程中使用GPU资源的时候,GPU资源枯竭了,有以下解决办法:

1.充钱:

当然也是最low最迫不得已的办法,GPU显存越大越强,核数越多越强,充钱少掉头发,充钱使人变强.
ResourceExhaustedError(多方面解决GPU显存不足)_第1张图片

2.资源占用层面:

(1) 先观察GPU的占用情况: 使用以下linux命令等待一会儿即可得到GPU的情况

nvidia-smi

ResourceExhaustedError(多方面解决GPU显存不足)_第2张图片
我们发现,这8核GPU没有哪一核被使用
(2) 查看是否还有其他进程在偷偷地运行着:

fuser -v /dev/nvidia*

如有: 请杀死

3.模型代码层面:

(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模型中, 影响较大.

下图是官网的参考:
ResourceExhaustedError(多方面解决GPU显存不足)_第3张图片

(2) 在图像处理任务中:

batch_size  # 每次处理的图片数量

对半缩小试试, 不行再缩小, 甚至取 batch_size=1 都是可以的试验一下, 实在不行, 请购买高质量GPU, 毕竟这个参数: 与GPU显存容量简单成正比, 设置越小, 显卡负担越小, 但GPU利用率越低, 而且当设置为1时, 一次处理一个样本, 不就变成了随机梯度下降?

文中有不足的地方,还望朋友们评论指正, 感谢 !

你可能感兴趣的:(深度学习)