keras or tensorflow 顯存占用問題

事件起因

實驗室服務(wù)器上是四塊GTX1080ti,但是在運行tensorflow或keras程序時,發(fā)現(xiàn)四塊卡的顯存全部被占用了。
就是下面這種情況:


案發(fā)現(xiàn)場.png

正常應(yīng)該是這樣的

沒有運行.png

這讓我很費解啊。

原因分析

出現(xiàn)這種情況的原因是,tensorflow初始化時會默認(rèn)占滿全部顯卡和全部剩余顯存,這種情況肯定是不行的,你一個人用了全部的,其他人還用不用了?
對于這種情況tensorflow官網(wǎng)給出的說法是

By default, TensorFlow maps nearly all of the GPU memory of all GPUs (subject to CUDA_VISIBLE_DEVICES
) visible to the process. This is done to more efficiently use the relatively precious GPU memory resources on the devices by reducing memory fragmentation.

說白了就是,我們?yōu)榱朔乐顾槠蜑榱烁玫睦脙?nèi)存,默認(rèn)占用全部顯存。

但是我們不想用這么多也是有辦法的

解決辦法如下:

tensorflow

  1. 使用tensorflow時可以使用如下代碼來選著使用某塊顯卡
# Creates a graph.
with tf.device('/gpu:0'):
  # write your code here
  1. 限制顯存使用,官網(wǎng)同樣提供了兩種解決方案

a.

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)

在這種方案下,顯存占用會隨著epoch的增長而增長,也就是運行后面的eopch時,會去申請新的顯存,前面已經(jīng)完成的epoch所占用的顯存并不會釋放,原因也是為了防止碎片化。

b.

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
session = tf.Session(config=config, ...)

這種方法就比較給力了,告訴tensorflow,我這塊顯卡只給你30%的顯存,其余的你給我放著不動。

keras

由于keras是使用的tensorflow后端,所以需要加上額外的語句。

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
set_session(tf.Session(config=config)) # 此處不同

上面的語句中設(shè)定使用那一塊顯卡和tensorflow有些不同(我沒試驗過keras是不是可以用tensorflow指定gpu的語句),需要使用CUDA_VISIBLE_DEVICES這個值來設(shè)定,這個值就是讓某幾塊(使用','分隔)顯卡可以被cuda看見,那么程序也就只能調(diào)用那幾塊顯卡了。

需要注意的是,雖然代碼或配置層面設(shè)置了對顯存占用百分比閾值,但在實際運行中如果達(dá)到了這個閾值,程序有需要的話還是會突破這個閾值。換而言之如果跑在一個大數(shù)據(jù)集上還是會用到更多的顯存。以上的顯存限制僅僅為了在跑小數(shù)據(jù)集時避免對顯存的浪費而已。

下面是只設(shè)置1,2卡可見的情況

os.environ["CUDA_VISIBLE_DEVICES"] = "1,2"
多卡.png

下面是正常狀態(tài)


正常狀態(tài).png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容