我目前正在使用具有张量流作为后端的keras训练一系列数据文件的神经网络。更具体地说,我有一个生成器函数,它顺序地从文件中读取数据并将其提供给keras的fit_generator()函数。然而,发生的事情是,一段时间后,似乎tensorflow超出了我的机器的作业内存限制。我得到的是
name: GeForce GTX TITAN
major: 3 minor: 5 memoryClockRate (GHz) 0.8755
pciBusID 0000:02:00.0
Total memory: 5.94GiB
Free memory: 5.87GiB
2017-08-18 09:05:04.052767: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
2017-08-18 09:05:04.052784: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0: Y
2017-08-18 09:05:04.052817: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN, pci bus id: 0000:02:00.0)
500/2136 [======>.......................] - ETA: 778s - loss: 21.8780 - acc: 0.0000e+00
RAM Usage 1.01 GB
706/2136 [========>.....................] - ETA: 679s - loss: 16.7906 - acc: 0.0000e+00as
Read File Number 2
1000/2136 [=============>................] - ETA: 539s - loss: 13.1006 - acc: 0.0000e+00
RAM Usage 1.01 GB
1421/2136 [==================>...........] - ETA: 336s - loss: 10.4089 - acc: 0.0000e+00srun: Exceeded job memory limit
至于现在,我使用资源包和
打印RAM使用情况print(' \n RAM Usage {:.2f} GB \n \n'.format(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1e6))
我还使用了内存分析器,似乎RAM的使用量根本没有增加。我很确定fit_generator不是这样做的 问题,因为问题也发生在我能想到的最简单的发电机上
batch_input = np.zeros((batch_size,20,10,60,1))
batch_out = np.zeros((batch_size,1))
while True:
yield (batch_input, batch_out)
任何人都知道我还能检查什么才能解决这个问题?这可能是我正在研究的系统的GPU驱动程序的问题吗?
请注意,如果我使用Theano后端,相同的代码将顺利运行。
并不确定这是否相关:但另一个想法我注意到,如果我减少要读取的文件数量,我不会超过内存限制,但在完成一个训练核心的时刻之后带有分裂错误的转储。
name: GeForce GTX TITAN
major: 3 minor: 5 memoryClockRate (GHz) 0.8755
pciBusID 0000:02:00.0
Total memory: 5.94GiB
Free memory: 5.87GiB
2017-08-18 08:55:45.345022: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
2017-08-18 08:55:45.345039: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0: Y
2017-08-18 08:55:45.345062: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN, pci bus id: 0000:02:00.0)
500/706 [====================>.........] - ETA: 98s - loss: 4.0806 - acc: 0.0000e+00
RAM Usage 1.01 GB
705/706 [============================>.] - ETA: 0s - loss: 3.9775 - acc: 0.0000e+00Segmentation fault (core dumped)
抱歉这个问题有点长。希望有些人可以给我一些如何搜索这些内存错误的解决方案的提示。
谢谢:)