tensorflow 内存不足:Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

原来设置128图像一个batch,256*256  内存不够用

后来改为64 batch

多方搜索,才知出现这个问题是因为内存使用过多导致。我刚开始设置batch_size为5 迭代了137次出现了以上错误信息。按照网上说法将batch_size改为2迭代了3百多次停止。后来干脆设置为1,才没能出现以上错误信息。很是奇怪,觉得batch_size为1或者为2差别不大,应该不是根本原因,而是误打误撞解决了

再行搜索,得知原因是:loss或者网络的输出不断积累导致计算图不断扩张。解决方案:在训练的循环过程中,需要用到loss,则用loss.data[0]

 

今天刚把服务器搭建起来 结果程序就跑不起来 当时差点把自己吓尿了
错误类型:CUDA_ERROE_OUT_OF_MEMORY

E tensorflow/stream_executor/cuda/cuda_driver.cc:924] failed to alloc 17179869184 bytes on host: CUDA_ERROR_OUT_OF_MEMORYW ./tensorflow/core/common_runtime/gpu/pool_allocator.h:195] could not allocate pinned host memory of size: 17179869184Killed

其实很容易理解 大致意思就是 服务器的GPU大小为M
tensorflow只能申请N(N<M)
也就是tensorflow告诉你 不能申请到GPU的全部资源 然后就不干了
解决方法:
找到代码中Session
在session定义前 增加

config = tf.ConfigProto(allow_soft_placement=True)
#最多占gpu资源的70%
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)
#开始不会给tensorflow全部gpu资源 而是按需增加
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
这样就没问题了

其实tensorflow 算是一个比较贪心的工具了
就算用device_id指定gpu 也会占用别的GPU的显存资源 必须在执行程序前
执行 export CUDA_VISIBLE_DEVICES=n(n为可见的服务器编号)
再去执行python 代码.py 才不会占用别的GPU资源
最近刚开始搞tensorflow 之前都是caffe
这周连续3天被实验室的人 举报 占用过多服务器资源 真是心累 只要用上面的方法
也就是执行代码前 执行 export CUDA_VISIBLE_DEVICES=n
只让1个或者个别GPU可见 其他GPU看不见 就行了

 

 

如果是因为GPU内存不够,可以在代码里加入:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.5) 
config = tf.ConfigProto(allow_soft_placement=True, gpu_options=gpu_options)
tf.Session(condig=config)

其中 0.5表示使用50%的GPU内存资源,tensorflow比较贪心,每次都默认使用最大内存运行,所以内存不够时,可以自己做一个限制。

二:出现此问题的另外一个原因可能是你的cpu不够了,当运行的网络很大的时候,或者需要加载很大的权重,需要cpu来做,容易会导致这个错误,在命令行里输入

$top   
1
(退出来是ctrl+z)

可以查看cpu的使用信息,如果发现有其他不想要的进程在占用cpu,可以查看到进程的PID号码,然后使用命令

$sudo kill 262**
1
后面的数字是PID码

如果出现Process finished with exit code (interrupted by signal 6: SIGKILL)这个信息,可能是cuDNN版本和tensorflow版本不兼容的问题,详细看提示信息

如果是在运行一段时间后出现了这个问题,可能是发生了内存泄露的问题,解决方法可以参考我的另一篇博客http://blog.csdn.net/qq_25737169/article/details/78125550
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值