Python 使用形状[1144144144128]分配张量时的OOM

Python 使用形状[1144144144128]分配张量时的OOM,python,image-processing,memory,machine-learning,gpu,Python,Image Processing,Memory,Machine Learning,Gpu,我使用的计算机是1080,它有8 GB的GPU内存,我的计算机内存是32 GB,但阵列数据可能太大,我无法恢复,计算机告诉我资源已耗尽。如果要解决这个问题或评估GPU内存,我需要这样一个大的麻木数组,这样我就可以买一个更好的计算机来计算。顺便说一下,我使用的BATCHI大小是1,所以我把内存减少到最小,或者我应该考虑减少原始列和我的麻木数组的高度,我认为这会影响我的结果的解决,这是可以的 如果有人能回答我的问题。谢谢您使用的张量本身很大,但对于8Gb的GPU来说没有那么大144*144*144*

我使用的计算机是1080,它有8 GB的GPU内存,我的计算机内存是32 GB,但阵列数据可能太大,我无法恢复,计算机告诉我资源已耗尽。如果要解决这个问题或评估GPU内存,我需要这样一个大的麻木数组,这样我就可以买一个更好的计算机来计算。顺便说一下,我使用的BATCHI大小是1,所以我把内存减少到最小,或者我应该考虑减少原始列和我的麻木数组的高度,我认为这会影响我的结果的解决,这是可以的


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

您使用的张量本身很大,但对于8Gb的GPU来说没有那么大<代码>144*144*144*128约为3.8亿,因此即使使用32位项目,也需要1.5GB。我有一个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资源

接下来,您没有提供您的神经网络架构,但是如果您使用深度卷积神经网络,请注意,第一层消耗了大量参数和梯度的内存。你可能想读书。如果是这种情况,您可能需要插入另一个GPU,并在所有可用的GPU()之间拆分图形。NVidia提供12Gb内存GPU


<>最后,您可以考虑将浮动精度<代码> > tf.FulAT64——> Tf.FulAT32–> Tf.FLUAT16所有变量。这可以节省8倍的内存,有时只够在GPU上运行。

谢谢你的回复,我已经通过让老板买一台更好的机器解决了这个问题。通过使用特殊的较浅的网络和使用int32或int16可以缓解这个问题