知方号

知方号

当显存不够时是否会调用共享GPU内存?

当显存不够时是否会调用共享GPU内存?

深度学习训练时当显存不够时是否会调用共享GPU内存进行训练? 问题来源:

在用pycharm做一个模型训练时,想着能否同时再跑一个模型进行训练,但是发现显存已经不足1G了,于是就产生了上述的问题,在显存已然不足情况下能否通过占用共享GPU内存再对第二个深度学习模型进行训练?

测试

1、单个神经网络进行训练 于是做了如下的测试,下图是仅仅训练单个神经网络时的GPU内存占用大小,目前显存占用10.2,共享GPU内存占用0.1 2、两个神经网络同时训练 在此基础上我又开始训练了第二个网络,但这个网络层数很少,就十来层(没敢用太大的模型测试,大家可以自己试试大一点的网络),结果显示还是可以训练的,只是这时候共享GPU的占用明显多了一些,显存占用达到10.7,共享内存GPU占用提高到了0.5,如下图所示: 专用GPU内存与共享GPU内存区别:

所谓共享GPU内存就是系统内存,是win10开始做的优化,本质上就是系统内存,cpu和显卡都可以用,当显存不够用时,可以借用一部分给显卡,防止程序崩溃,但明显训练的速度也会减慢。

GPU内存是“专用GPU内存”和“共享GPU内存”加一块的容量。而“共享GPU内存”是win10系统专门为显卡划分的优先内存容量。在显卡显存不够的时候,系统会优先使用这部分“共享GPU内存”。在win10系统中,会划分一半容量的物理内存容量为“共享GPU内存”。“显存不够内存凑,内存不够硬盘凑”,在程序运行时,win10系统会优先使用显卡显存,但程序需要显存超过显存容量的时候,为了避免程序崩溃win10系统就会在“共享GPU内存”中借用内存给显卡当显存,但借用容量不会超过“共享GPU内存”总容量。因为内存相对于显存来说带宽和时延都比较小,不可避免会带来程序运行效率降低,如果放在游戏中就是掉帧卡顿的问题。不过“共享GPU内存”虽然占据一半物理内存容量,却并不是说其他程序就不能使用这些内存容量。它是一个共享容量,只不过优先给显卡使用而已。

专有内存就是GPU自己用的,不会分给其它应用,而共享内存就是所有应用都可以使用,但是GPU优先使用。这里的内存指的是从系统内存中提出来的,优先让GPU使用。假如32G内存,而共享内存有16G,有两个GPU,实际上系统内存并没有全部占用,16G是两个GPU一起使用的,而不是每个都有16G。

共享内存不仅仅是多GPU共享,而且还是GPU和的其他应用一起共享,只不过GPU优先级高些罢了。而且Windows也尽量会使用专有的GPU内存,而共享的GPU内存完全可以在其它应用大量使用内存后归他们使用。而且这个值无法设置,需要由Windows根据系统内存大小自行设定。共享内存的带宽和时延受到PCIe的限制,比专有的内存低。

较好的讲解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。