在Python中使用CuPy库时,矢量化代码中的意外内存泄漏和时间性能

时间:2019-12-07 02:24:57

标签: python-3.x optimization gpu cupy

我有一个函数正在使用CuPy库执行矩阵运算。整个功能被矢量化。当我检查整个程序在GPU VRAM中分配的内存时,GPUtil.showUtilization()报告72%的GPU内存已满(我使用具有4 GB VRAM的NVIDIA 1050Ti)。根据我的计算,程序中所有阵列总共使用的内存约为数百MB。

此外,我为程序中的不同功能计时,但是其中两个完成时间太长-大约0.2-0.5s。当我用不同的参数两次调用函数时,即使所有矩阵的大小相同,第二次也总是比较慢(0.5s至0.1s)。由于我需要多次使用该函数,因此会产生问题。这两个函数中最大数组的大小是形状为300x500和500x500的稀疏矩阵。

奇怪的是,当我尝试优化花费时间最长的代码部分时,它们所花费的时间保持不变。还尝试仅将CPU用于这些部件,但是程序的运行时间保持不变(到最后一位),即使两个功能的报告时间更改为零,并且节省的时间也记入了其他功能中剧本。 time.process_time()函数可能有问题吗?

尝试清除所有内存,并使用CuPy(https://docs-cupy.chainer.org/en/stable/reference/generated/cupy.get_default_pinned_memory_pool.html#cupy.get_default_pinned_memory_pool)关闭固定的内存池分配器,但没有成功,因为垃圾回收的速度甚至更慢。

任何帮助将不胜感激!

伊沃(Ivo)

0 个答案:

没有答案