ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3090显卡 爆显存调试

2022-02-10 21:00:38  阅读:249  来源: 互联网

标签:显存 RAM worker batch 3090 num 内存 显卡


可能存在的原因

  1. 每每轮到dataloader加载数据时:
for epoch in range(start_epoch, end_epoch):
    for i, data in enumerate(trainloader):

dataloader一次性创建num_worker个worker,(也可以说dataloader一次性创建num_worker个工作进程,worker也是普通的工作进程),

并用batch_sampler将指定batch分配给指定worker,worker将它负责的batch加载进RAM。

然后,dataloader从RAM中找本轮迭代要用的batch,如果找到了,就使用。如果没找到,就要num_worker个worker继续加载batch到内存,直到dataloader在RAM中找到目标batch。一般情况下都是能找到的,因为batch_sampler指定batch时当然优先指定本轮要用的batch。

  1. num_worker设置得大,好处是寻batch速度快,因为下一轮迭代的batch很可能在上一轮/上上一轮…迭代时已经加载好了。坏处是内存开销大,也加重了CPU负担(worker加载数据到RAM的进程是CPU复制的嘛)。num_workers的经验设置值是自己电脑/服务器的CPU核心数,如果CPU很强、RAM也很充足,就可以设置得更大些。

  2. 如果num_worker设为0,意味着每一轮迭代时,dataloader不再有自主加载数据到RAM这一步骤(因为没有worker了),而是在RAM中找batch,找不到时再加载相应的batch。缺点当然是速度更慢。

原因确认:

1、显卡是两张3090,24*2的显存,我之前内存大小为16G,加到32G,能调大batch了,而且内存占用也吃不满30%左右,但是显存还是跑不满,所以继续加内存到64G,现在显存能够几乎吃满。但是内存占用只有18%了。我就不是很清楚明明是内存的问题,而且内存有空间的,就是报显存分配不足的错误,无法理解。
2、num——worker也需要调整,加到64G内存之后num_worker调整为4,显存占用上去了,CPU占用下去了,之前CPU占用和心电图一样,现在稳定在28%左右。
3、evaluate()步骤中,使用torch.no_grad(),可以降低eval过程中对val数据集对模型的占用,避免爆显存。

标签:显存,RAM,worker,batch,3090,num,内存,显卡
来源: https://blog.csdn.net/tuanzi2809/article/details/122772811

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有