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

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

问题来源:

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

测试

1、单个神经网络进行训练
于是做了如下的测试,下图是仅仅训练单个神经网络时的GPU内存占用大小,目前显存占用10.2,共享GPU内存占用0.1
当显存不够时是否会调用共享GPU内存?_第1张图片
当显存不够时是否会调用共享GPU内存?_第2张图片
2、两个神经网络同时训练
在此基础上我又开始训练了第二个网络,但这个网络层数很少,就十来层(没敢用太大的模型测试,大家可以自己试试大一点的网络),结果显示还是可以训练的,只是这时候共享GPU的占用明显多了一些,显存占用达到10.7,共享内存GPU占用提高到了0.5,如下图所示:
当显存不够时是否会调用共享GPU内存?_第3张图片
当显存不够时是否会调用共享GPU内存?_第4张图片
专用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的限制,比专有的内存低。

较好的讲解链接:
专用GPU内存和共享GPU内存区别

显卡和GPU区别:
GPU(Graphic Processing Unit)是图形处理器,一般GPU就是焊接在显卡上的,GPU是显卡的核心芯片,是显卡的一个核心零部件,核心组成部分。GPU芯片+显存芯片+其他一些电容等配件,加散热器等放到板卡上就做成显卡了

GPU是图像处理芯片,属于显卡的重要组成部分,主要用于大量的重复计算,因为GPU功耗很高、背面电流过大,都是焊接在显卡上,独立显卡GPU焊在显卡的电路板上,集成显卡中GPU和CPU集成在一起。CPU是主板上的一块芯片。GPU是显卡上的一块芯片。

显卡类型:当下显卡类型主要包括独立显卡和集成显卡。

独立显卡简称独显,是指成独立的板卡,需要插在主板的相应接口上的显卡,通过PCI-Express、PCI或AGP等扩展槽界面与主板连接的,而通常它们可以相对容易地被取代或升级(假设主板能支持升级),现在还没有出现GPU插在主板上的,因为GPU功耗很高,背面电流过大,还是焊接更为可靠。独立显卡又分为内置独立显卡和外置显卡。平常我们见到的独立显卡都是内置独立显卡,是一片实实在在的显卡插在主板上,比如插在AGP或PCI Express插槽上,拆开机箱看,就是独立显卡和显示器信号线相连的那部分零件。 独立显卡具备单独的显存,不占用系统内存,而且技术上领先于集成显卡,能够提供更好的显示效果和运行性能。显卡作为电脑主机里的一个重要组成部分,对于喜欢玩游戏和从事专业图形设计的人来说显得非常重要。以前民用显卡图形芯片供应商主要包括ATI和NVIDIA两家。(ATI现被AMD收购)

集成显卡一般不带有显存,而是使用系统的一部分主内存作为显存,具体的数量一般是系统根据需要自动动态调整的。显然,如果使用集成显卡运行需要大量占用内存的空间,对整个系统的影响会比较明显,此外系统内存的频率通常比独立显卡的显存低很多,因此集成显卡的性能比独立显卡要逊色一些。使用集成了显卡的芯片组的主板,并不是必须使用集成的显卡,主板完全可以把集成的显卡屏蔽,只是出于成本,很少会这样做。

CPU集成的核心显卡主板集成显卡统称集成显卡,但CPU集成显卡和主板集成显卡是不一样的。

处理器集成显卡就是指集成在CPU内部的显卡,通常称为核心显卡,如Intel酷睿i3 i5 i7系列处理器以及AMD APU系列处理器中多数都集成了显卡。

主板集成显卡是指集成在主板中的显卡,目前处理器核心显卡性能已经领先于主板集成的显卡,并且将显卡核心集成处理器中相比集成主板中优势更明显。

参考链接:GPU与CPU、显卡区别
参考链接:CPU,GPU,TPU,NPU都是什么?

GPU与CPU区别:

GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作,尤其是在3D图形处理时GPU所采用的核心技术有硬件T&L(几何转换和光照处理)、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件T&L技术可以说是GPU的标志。GPU的生产商主要有NVIDIA和ATI。

GPU的构成相对简单,有数量众多的计算单元和超长的流水线,特别适合处理大量的类型统一的数据。但GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。

GPU的工作大部分是计算量大,但没什么技术含量,而且要重复很多很多次。GPU的运算速度取决于雇了多少小学生,CPU的运算速度取决于请了多么厉害的教授。教授处理复杂任务的能力是碾压小学生的,但是对于没那么复杂,但是量特别大的任务,还是顶不住人多。

内存和虚拟内存
1、内存
硬盘是用于长期存储资料的,计算机要用文件和应用程序都要从硬盘中调用。cpu要从硬盘读取数据,而cpu的缓存和硬盘的速度相差太大,这时需要速度居2者之间的内存来起缓冲作用,即硬盘数据放到内存,cpu再从内存读。内存是电脑的数据存储设备之一,其特点为容量较小,但数据传送速度较快,用以弥补硬盘虽然容量大但传送速度慢的缺点。在电脑中,内存被架设在硬盘和高速缓存器之间,从而可以充分发挥CPU的运算能力,不至于使CPU的高速运算能力因数据提取速度过慢。内存是暂时存储一些需要查看或操作的文件和应用程序,供用户进行处理,内存中的资料会因断电而自动清除。
2、虚拟内存
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。虚拟内存同物理内存条一样也是暂时存储一些需要查看或操作的文件和应用程序,供用户进行处理,虚拟内存中的资料会因断电而丢失。

你可能感兴趣的:(python)