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)。所以我通过使用此代码获得了政策
仍然,分配总是失败。
答案 0 :(得分:0)
Tensorflow内存管理可能令人沮丧。
主要建议:每当看到OOM时,实际上内存不足,您要么必须缩小模型大小,要么要减小批量大小。 TF尝试分配足够的内存时,无论之前分配了多少内存,都会抛出OOM。
在一开始,TF会尝试分配相当大的内存块,这大约相当于整个可用内存的90-98%-在您的情况下为5900MB。然后,当实际数据开始占用更多空间时,TF将另外尝试分配足够的内存量或更多-2.78G。如果不适合,则会抛出OOM,就像您的情况一样。您的GPU无法容纳5.9 + 2.8Gb。最后一个2.78G块实际上可能比TF需要的多一点,但是如果您有多个训练步骤,它将在以后使用,因为最大所需内存可能会在相同的Session.run的内存之间波动。