keras在使用GPU的时候有个特点,就是默认全部占满显存。
若单核GPU也无所谓,若是服务器GPU较多,性能较好,全部占满就太浪费了。
于是乎有以下五种情况:
1、指定GPU
2、使用固定显存的GPU
3、指定GPU + 固定显存
4 GPU动态增长
5 CPU充分占用
一、 固定显存 GPU
在使用keras时候会出现总是占满GPU显存的情况,可以通过重设backend的GPU占用情况来进行调节。
import tensorflow as tf
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))
需要注意的是,虽然代码或配置层面设置了对显存占用百分比阈值,但在实际运行中如果达到了这个阈值,程序有需要的话还是会突破这个阈值。换而言之如果跑在一个大数据集上还是会用到更多的显存。以上的显存限制仅仅为了在跑小数据集时避免对显存的浪费而已
二 、指定GPU
import os
os.environ[“CUDA_VISIBLE_DEVICES”] = “2”
#python设置系统变量的方法
os.environ[“CUDA_VISIBLE_DEVICES”] = “8,9,10,11,12,13,14,15”
三、指定GPU和固定显存
import os
import tensorflow as tf
os.environ[“CUDA_VISIBLE_DEVICES”] = “2”
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))
命令行可以使用:
https://github.com/tensorflow/nmt/issues/60
CUDA_VISIBLE_DEVICES=0 python -m nmt.nmt
四 GPU动态增长
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import os
os.environ[“CUDA_VISIBLE_DEVICES”] = “1”
config = tf.ConfigProto()
config.gpu_options.allow_growth=True #不全部占满显存, 按需分配
sess = tf.Session(config=config)
KTF.set_session(sess
os.environ指的是占用的GPU编号;allow_growth为动态申请显存占用。
五 tf.keras使用多GPU
https://blog.youkuaiyun.com/sinat_26917383/article/details/75633754