1、问题描述
在运行由tensorflow构建的Googlenet模型训练字模数据时,出现了以下问题:
ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[512,192,12,12]
如图:
报错信息2、原因描述
显存不够!!!
3、排查
3.1、tensor shape[512,192,12,12],batch_size太大
train(USER_PATH = "/home/wangyaqing", IMAGE_HEIGHT = 48, IMAGE_WIDTH = 48, BATCH_SIZE = 512, EPOCHS = 30, ADAM_LEARNING_RATE = 0.0003, TRAIN_DATA_PATH = "train_data", VALIDATION_DATA_PATH = "test_data")
将batch_size改为256
train(USER_PATH = "/home/wangyaqing", IMAGE_HEIGHT = 48, IMAGE_WIDTH = 48, BATCH_SIZE = 512, EPOCHS = 30, ADAM_LEARNING_RATE = 0.0003, TRAIN_DATA_PATH = "train_data", VALIDATION_DATA_PATH = "test_data")
3.2、排查测试集和数据集送进网络的批次数量
如果改了训练集batch后发现还是报错,检查是否是测试集几次性输入所有图片,要注意排查测试集和数据集都要分批送进网络。
3.3、tensorflow占用显存份额太小
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.1)
with tf.Session(config = tf.ConfigProto(gpu_options=gpu_options)) as sess:
有时候tensorflow自己会自动退出,是因为tf默认占所有显存,如果有别的进程在使用显存,可能会自动退出。所以加了上面这句话,但指定中0.1的显存这也太少了,可以修改指定的显存占用比例。
附:检查GPU使用情况
(1)查看GPU使用情况
GPU使用情况在命令行输入 nvidia-smi 显示GPU的使用情况:
表格中会显示显卡的一些信息,第一行是版本信息,第二行是标题栏,第三行就是具体的显卡信息了,如果有多个显卡,会有多行,每一行的信息值对应标题栏对应位置的信息。
* GPU:编号
* Fan:风扇转速,在0到100%之间变动
* Name:显卡名
* Temp:显卡温度
* Perf:性能状态,从P0到P12,P0性能最大,P12最小
* Persistence-M:持续模式的状态开关,该模式耗能大,但是启动新GPU应用时比较快,这里是off
* Pwr:能耗
* Bus-Id:涉及GPU总线的东西
* Disp.A:表示GPU的显示是否初始化
* Memory-Usage:现存使用率,这里已经快满了
* GPU-Util:GPU利用率
* Compute M.:计算模式需要注意的一点是显存占用率和GPU占用率是两个不一样的东西,类似于内存和CPU,两个指标的占用率不一定是互相对应的。
命令行输入 kill -9 进程号 把消耗资源的进程关闭
网友评论