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

tensorflow/stream_executor/cuda/cuda_driver.cc:967] failed to alloc 536870912 bytes on host: CUDA_ER

Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 

多方搜索,才知出现这个问题是因为内存使用过多导致。我刚开始设置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看不见 就行了
--------------------- 
作者:无奈的小心酸 
来源:CSDN 
原文:https://blog.csdn.net/wangkun1340378/article/details/72782593 
版权声明:本文为博主原创文章,转载请附上博文链接!

扫描二维码关注公众号,回复: 4220222 查看本文章

猜你喜欢

转载自blog.csdn.net/gdengden/article/details/84000165