深度学习学习——解决Low volatile GPU-Util but high GPU Memory Usage

提高深度学习的训练效率:
这个文章中给了一个场景:
复制自原文:
深度学习学习——解决Low volatile GPU-Util but high GPU Memory Usage_第1张图片
深度学习学习——解决Low volatile GPU-Util but high GPU Memory Usage_第2张图片
上面这个文章介绍的一个情况:
除了频繁的io以外,还有一个可能的原因会导致Low volatile GPU-Util but high GPU Memory Usage这个问题:
ECC
应该是GPU默认打开了ECC(error correcting code, 错误检查和纠正),会占用显存和降低显卡性能,打开Persistence Mode Enabled(用root执行nvidia-smi -pm 1)后5、6号显卡的显卡使用率恢复正常水平,问题解决。
文章留了两个开放性问题:
1.为什么tensorflow的程序不会被ECC影响?
2.为什么在7号显卡上执行pytorch程序后,其他显卡的使用率都会恢复正常?
后面有空的话可以查下这两个问题。

Pytorch Gpu Utlilization
另外一个:PyTorch Profiler: Major Features & Updates
pytorch-profiler
tips:有一个工具估计用的上:HWMonitor
深度学习学习——解决Low volatile GPU-Util but high GPU Memory Usage_第3张图片
这里还有另一个大佬给的解决方案,比较ok感觉,还做了详细的实验来测试效果:

此外别人给的一些方案,我测试了但是在我本地没有效果,不知道问题出在哪了:
模型提速技巧
减少日志IO操作频率
使用pin_memory和num_workers
使用半精度训练
更好的显卡,更轻的模型
另外也可以通过增大batch size提高epoch速度,但是收敛速度也会变慢,需要再适当升高学习率
出处在这里:
【深度学习】踩坑日记:模型训练速度过慢,GPU利用率低

可能会出现的一些踩坑的问题的解决方案,很实用:
1、测试时out of memory可能是因为未设置no_grad:

with torch.no_grad():
    for data, label in test_loader:

2、用watch nvidia-smi命令查看GPU利用率时发现利用率一会儿为100%,一会儿为0%,高低跳动不定,可以在dataloader中设置num_workers=n, pin_memory=True:

train_loader = torch.utils.data.DataLoader(dataset=trainset, batch_size=128, shuffle=True, num_workers=8, pin_memory=True)
test_loader = torch.utils.data.DataLoader(dataset=testset, batch_size=1, shuffle=False, num_workers=8, pin_memory=True)

3、训练时第一个epoch GPU显存足够,但第二个以及之后的epoch显存翻倍,并出现out of memory,可以在一个训练epoch结束时del一些变量:

for epoch in range(num_epochs):
	###
	del x, y1, y2, output, output_, labels, loss1, loss2

出自:https://blog.csdn.net/S20144144/article/details/103176926

此外在tensorflow下解决这个问题有一个简单的思路是使用tf.data+estimator,这篇文章详细介绍了使用方法:
训练效率低?GPU利用率上不去?快来看看别人家的tricks吧~
里面介绍的核心点在prefetch和parallel mapping上
评论区某大佬的观点是:官方有best pratice证明:实际操作上只要num_parallel thread数跟cpu core number能够匹配性能提升就会很显著,但是别的大佬觉得tf.data+estimator还是yyds
这篇文章里,介绍了一个关于pytorch比较省力的说明,说自己写buffer类就能影响GPU效率 我是不太懂,之后再看看别的大佬的说法
update一下,好像是说TensorFlow2不建议使用Estimators了,链接在这:estimator
然后说estimator不适合拿来做inference的

你可能感兴趣的:(量化投资,量化投资)