rtx 2070s无法从以下设备分配GPU内存:CUDA_ERROR_OUT_OF_MEMORY:内存不足

时间:2020-01-11 13:32:15

标签: python tensorflow

tf 2.0.0-gpu CUDA 10.0 RTX2070super

嗨。我在分配内存方面遇到问题。这样,内存的初始分配为7GB。

创建的TensorFlow设备(/ job:localhost /副本:0 /任务:0 /设备:GPU:0具有6994 MB内存)

2020-01-11 22:19:22.983048:我tensorflow / stream_executor / platform / default / dso_loader.cc:44]成功打开了动态库libcudnn.so.7 2020-01-11 22:19:23.786225:我tensorflow / stream_executor / cuda / cuda_driver.cc:830]无法从设备分配2.78G(2989634304字节):CUDA_ERROR_OUT_OF_MEMORY:内存不足 2020-01-11 22:19:24.159338:我tensorflow / stream_executor / platform / default / dso_loader.cc:44]成功打开了动态库libcublas.so.10.0

限额:7338884724 使用中:5888382720 最大使用量:6255411968 NumAllocs:1264 MaxAllocSize:2372141056

但是我只能使用5900MB的内存,其余的内存始终无法分配。

我猜想如果在rtx 2070s中使用了整个gpu内存,我会使用2种类型的数据类型(float16,float32)。所以我通过使用此代码获得了政策

opt = tf.keras.optimizers.Adam(1e-4)

opt = tf.train.experimental.enable_mixed_precision_graph_rewrite(opt)

仍然,分配总是失败。

1 个答案:

答案 0 :(得分:0)

Tensorflow内存管理可能令人沮丧。

主要建议:每当看到OOM时,实际上内存不足,您要么必须缩小模型大小,要么要减小批量大小。 TF尝试分配足够的内存时,无论之前分配了多少内存,都会抛出OOM。

在一开始,TF会尝试分配相当大的内存块,这大约相当于整个可用内存的90-98%-在您的情况下为5900MB。然后,当实际数据开始占用更多空间时,TF将另外尝试分配足够的内存量或更多-2.78G。如果不适合,则会抛出OOM,就像您的情况一样。您的GPU无法容纳5.9 + 2.8Gb。最后一个2.78G块实际上可能比TF需要的多一点,但是如果您有多个训练步骤,它将在以后使用,因为最大所需内存可能会在相同的Session.run的内存之间波动。