为什么这个 Keras 模型需要超过 6GB 的内存?
Why does this Keras model require over 6GB of memory?
使用 Tensorflow 后端,此 Keras 模型似乎需要 6GB 以上的 RAM。我的粗略计算表明存储权重不应超过 500MB。怎么回事?
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
IMAGE_SIZE = 128
print('Build model...')
model = Sequential()
# three color channels, 128x128
# 16 con filters, 3 rows, 3 columns
model.add(Convolution2D(16, 3, 3, input_shape=(3, IMAGE_SIZE, IMAGE_SIZE)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(1))
model.add(Dense(3 * IMAGE_SIZE * IMAGE_SIZE))
model.compile(loss='mse', optimizer='sgd')
它是一个连接到单个神经元的卷积层(16 个 3x3 滤波器),然后该单个神经元连接到约 50k 个神经元。
我是 Keras 的新手,所以我想我的误解很根本,但我似乎无法弄清楚。
事实证明,我的问题是在 LD_CONFIG_PATH
中包含了 CUDA 7.5 的路径,但在 PATH
中包含了 CUDA 7.0 的路径。显然,这种笨拙的组合会产生一些未定义的行为,在我的例子中会产生内存泄漏。
在用 valgrind
检查代码后,我发现 7.0 中的 nvcc
本质上是跳入了 CUDA (7.5) 库的废话区域,这并不意外。它泄漏内存而不是崩溃,这实际上是非常惊人的,而且 Theano 也有同样的错误。
希望以后没有其他人会受到这一特定问题的困扰,但如果是,请仔细检查您的版本路径!
在我的本地机器上,没有安装 GPU'd Tensorflow,我仍然遇到内存泄漏,这似乎是以前 (0.7.0) 版本中的一个错误,已通过 (0.7.1) 解决发布。同样,我还没有弄清楚为什么我的非 GPU Theano 后端也产生了泄漏,但是在升级 Tensorflow 之后,Theano 后端也没有泄漏。这是一件很奇怪的事情,但我相信这个问题的一般解决方案是 "upgrade" 和 "double-check your env".
使用 Tensorflow 后端,此 Keras 模型似乎需要 6GB 以上的 RAM。我的粗略计算表明存储权重不应超过 500MB。怎么回事?
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
IMAGE_SIZE = 128
print('Build model...')
model = Sequential()
# three color channels, 128x128
# 16 con filters, 3 rows, 3 columns
model.add(Convolution2D(16, 3, 3, input_shape=(3, IMAGE_SIZE, IMAGE_SIZE)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(1))
model.add(Dense(3 * IMAGE_SIZE * IMAGE_SIZE))
model.compile(loss='mse', optimizer='sgd')
它是一个连接到单个神经元的卷积层(16 个 3x3 滤波器),然后该单个神经元连接到约 50k 个神经元。
我是 Keras 的新手,所以我想我的误解很根本,但我似乎无法弄清楚。
事实证明,我的问题是在 LD_CONFIG_PATH
中包含了 CUDA 7.5 的路径,但在 PATH
中包含了 CUDA 7.0 的路径。显然,这种笨拙的组合会产生一些未定义的行为,在我的例子中会产生内存泄漏。
在用 valgrind
检查代码后,我发现 7.0 中的 nvcc
本质上是跳入了 CUDA (7.5) 库的废话区域,这并不意外。它泄漏内存而不是崩溃,这实际上是非常惊人的,而且 Theano 也有同样的错误。
希望以后没有其他人会受到这一特定问题的困扰,但如果是,请仔细检查您的版本路径!
在我的本地机器上,没有安装 GPU'd Tensorflow,我仍然遇到内存泄漏,这似乎是以前 (0.7.0) 版本中的一个错误,已通过 (0.7.1) 解决发布。同样,我还没有弄清楚为什么我的非 GPU Theano 后端也产生了泄漏,但是在升级 Tensorflow 之后,Theano 后端也没有泄漏。这是一件很奇怪的事情,但我相信这个问题的一般解决方案是 "upgrade" 和 "double-check your env".