OOM在分配形状张量时[1,144,144,144,128]

时间:2017-08-16 02:38:20

标签: python image-processing memory machine-learning gpu

我使用的计算机是1080,GPU内存为8 GB,我的计算机内存为32 GB,但是阵列数据可能很大,我可以恢复,计算机告诉我资源耗尽。如果有任何方法可以解决这个问题或评估GPU内存,我需要这么大的numpy阵列,所以我可以买一台更好的计算机进行计算。我使用的batch_size的方式是1,所以我把内存减少到最小,或者我应该考虑减少原始列和我的numpy数组的高度,我认为这会影响我的结果的解决方案,这是可以的。

如果有人能回答我的问题。感谢

1 个答案:

答案 0 :(得分:1)

你使用的张量本身很大,但对于8Gb GPU来说并不是那么大。 144 * 144 * 144 * 128约为3.8亿,因此即使使用32位项目,也需要1.5GiB。我有一个8Gb的GeForce GTX 1070(和你一样大小),这是我的Tensorflow实验:

import numpy as np
import tensorflow as tf

X = tf.placeholder(dtype=tf.int32, shape=(1, 144, 144, 144, 128))
init = tf.global_variables_initializer()

with tf.Session() as session:
  session.run(init)
  value = session.run([X], feed_dict={X: np.zeros(shape=(1, 144, 144, 144, 128))})
  print np.array(value).shape

输出:

name: GeForce GTX 1070
major: 6 minor: 1 memoryClockRate (GHz) 1.7465
pciBusID 0000:01:00.0
Total memory: 7.92GiB
Free memory: 4.14GiB
2017-08-17 20:05:54.312424: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0 
2017-08-17 20:05:54.312430: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0:   Y 
2017-08-17 20:05:54.312444: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
(1, 1, 144, 144, 144, 128)

请注意,空闲内存远低于8Gb,因为我使用2个UHD监视器。因此,这可能是您的第一个原因:其他进程可能会占用大量GPU资源。

接下来,您没有提供神经网络架构,但如果您正在使用深度卷积神经网络,请注意第一层消耗大量内存用于参数和渐变。您可能需要阅读https://plnkr.co/edit/r3237ta1XzhM2PX09pMl?p=preview。如果是这种情况,您可能需要插入另一个GPU并将图表拆分为所有可用的GPU(this helpful page for details)。 NVidia提供12Gb内存GPU。

最后,您始终可以考虑减少所有变量的浮动精度tf.float64 -> tf.float32 -> tf.float16。这可以节省8倍的内存,有时甚至可以在GPU上运行。