问题描述

当多个调用tensorflow的程序同时运行时,经常会出现显存空间不够的报错。

如下图,此时在cmd(win)/termial(ubuntu)调用:

nvidia-smi

查看静态(当时)的显卡情况:可以看到下面显示八个GPU,每个GPU的内存都将近占满,但是仅仅第一个GPU在使用(使用率92%)。

或者输入一下命令动态刷新(每1s刷新一次)GPU情况:

watch -n 1 nvidia-smi

内存不足的原因:当你的程序调用tensorflow后且未指定GPU,tensorflow会自动默认占用全部GPU的内存,但仅仅使用部分。

tensorflow显卡配置

PS,八块K80显卡,20w的硬件~~~~

 解决办法:

1. 指定固定的GPU:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = '0'   #指定第一块GPU可用 '-1'代表CPU,'1,2,3'代表第2-4块卡。

2.如下配置

config = tf.ConfigProto()
config.gpu_options.allow_growth = True      #程序按需申请内存
sess = tf.Session(config = config)
#当allow_growth设置为True时,分配器将不会指定所有的GPU内存,而是根据需求增长

3.在执行训练脚本前使用:

export CUDA_VISIBLE_DEVICES=1
#来限制可见的GPU数目

相关文章: