当前位置: 首页 > 知识库问答 >
问题:

ResourceExhaustedError:分配张量时的OOM

梁丘诚
2023-03-14

我制作了自己的AlexNet实现,其中少了一个完全连接的层,用于对102类花卉进行分类。我的培训集由11000个图像组成,而验证和培训集各有3000个图像。我以HDF5格式编写了这三个数据集,并将它们存储在磁盘上。我重新加载了它们,并尝试使用8和75个纪元的批次通过网络传递图像。但是,出现了内存错误

我已经尝试将批量大小减少到8,并将尺寸减少到400x400(原来是500x500),但没有用

tensorflow/core/platform/cpu_feature_guard.cc:141]您的cpu支持此tensorflow二进制文件未编译为使用的指令:AVX2 2019-08-23 00:19:47.336560:I tensorflow/core/common_runtime/gpu/gpu___device.cc:1433]找到了具有以下属性的设备0:name:GeForce GTX 1050 Ti major:6 minor:1 memoryClockRate(GHz):1.62 pciBusID:0000:01:00.0 totalMemory:4.00GiB freeMemory:3.30GiB 2019-08-23 00:19:47.342432:I tensorflow/core/common_runtime/gpu/gpu设备。cc:1512]添加可见gpu设备:0 2019-08-23 00:19:47.900540:I tensorflow/core/common_runtime/gpu/gpu设备。cc:984]设备互连流强1边缘矩阵:2019-08-2300:19:47.904687:I tensorflow/core/common_runtime/gpu/gpu_device.cc:990]0 2019-08-23 00:19:47.907033:I tensorflow/core/common_runtime/gpu/gpu/gpu设备.cc:1003]0:N 2019-08-23 00:19:47.909380:I tensorflow/core/common_runtime/gpu/gpu设备.cc:1115]-

2019-08-08-23 00:20:20:50.06061236:W Tensor10-08-08-08-20:20 20:50.08-08-08-08-23 00:20:20:20:20:50.06066:W Tensor10:20:50.06066:W Tensor10:W Tensor流/核心/核心/核心/普通运行时/公共运行运行运行时/bfc C C C(中国)布布布布布布告分配器。抄:cc:2717:cc:2717:::::::***************************************************:::::::*********************************************************************************************************************************************************************************************************************************.cc:70:资源耗尽:分配时OOM形状为[501764096]且类型为float on/job:localhost/replica:0/task:0/device:GPU:0由分配器GPU\u 0\u bfc回溯的tensor(最后一次调用):文件“train.py”,第80行,在max\u queue\u size=8*2,verbose=1)文件“C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site packages\tensorflow\python\keras\engine\training.py”,第1426行,在fit_generator initial_epoch=initial_epoch)文件“C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site packages\tensorflow\python\keras\engine\training_generator.py”第191行的模型迭代批处理=batch函数(*批处理数据)文件“C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site packages\tensorflow\python\keras\engine\training.py”,第1191行,在调用run\u metadata=self.run\u metadata)文件的第3076行,在批处理输出=self.\u fit\u函数(ins)\pylint:disable=不可调用文件“C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site packages\tensorflow\python\keras\backend.py”中“C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site packages\tensorflow\python\client\session.py”,第1439行,在call run\u metadata\u ptr)文件“C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site packages\tensorflow\python\framework\errors\u impl.py”,第528行,在退出C\u api.TF\u GetCode(self.status.status)中)tensorflow.python.framework.errors\u impl.ResourceExhustederError:OOM当使用形状[501764096]和类型float on/job:localhost/replica:0/task:0/device:GPU:0由分配器GPU\u 0\u bfc[{{节点训练/RMSprop/gradients/loss/kernel/regulazer\u 5/Square\u grad/Mul\u 1}]分配时]提示:如果您想在OOM发生时查看已分配的张量列表,请在OOM上添加report_tensor_allocations_on_to RunOptions以获取当前分配信息。

     [[{{node ConstantFoldingCtrl/loss/activation_6_loss/broadcast_weights/assert_broadcastable/AssertGuard/Switch_0}}]]

提示:如果您想在OOM发生时查看已分配张量的列表,请将report_tensor_allocations_upon_oom添加到RunOptions以获取当前分配信息。

共有1个答案

经伟
2023-03-14

这是因为GPU内存不能自由分配用于训练,这可能是由于内存中的数据集重载,如果不是批量的。但是您已经使用了fit_generator,所以我们可以排除这种情况,因为它提供了批量训练的数据,同时并行运行生成数据。

解决方案是检查使用GPU的进程。如果您使用的是nvidia GPU,您可以通过nvidia smi检查使用GPU的进程,或者您也可以尝试PS-fA | grep python。这将向您显示哪个进程正在运行和使用GPU。只需从PID列中获取进程ID,并通过命令kill-9PID终止进程。重新运行培训,这次您的GPU是免费的。我面临同样的问题,清除GPU对我有帮助。

  • 注意-所有命令都要在终端中运行
 类似资料:
  • 分配张量时如何解决ResourceExhaustedError: OOM的问题? ResourceExhaustedError(回溯见上文):使用形状分配张量时OOM[10000,32,28,28] 我包含了几乎所有的代码 错误中引用的行是: 快跑。。在训练循环中 下面列出了我从调试器输出复制的更多错误(有更多行,但我认为这些是主要错误,其他错误是由此引起的…) tensorflow.python

  • 问题内容: 我想在中复制以下代码。例如,我想为所有先前具有值的张量索引分配a 。 如果我在其中编写类似的代码,则会出现以下错误。 方括号中的条件应为。 有没有一种方法可以实现这种“条件赋值”(因为缺少更好的名称)? 问题答案: TensorFlow API中提供了几种比较运算符。 但是,在直接操纵张量时,没有什么等效于简洁的NumPy语法。你必须要使用个人的,和运营商执行相同的操作。 您的NumP

  • 我正在使用tflite进行语义分割。我有一个经过训练的模型,可以从背景中分割对象,这个模型是在深度实验室上训练的。 我已经使用下面的代码将这个模型(冻结的推理图)转换为tflite格式: 模型在Android上加载,但是当我尝试运行推理时,它会给我这个错误: 原因:java.lang.IllegalStateException:内部错误:准备张量分配时出现意外失败:third_party/tens

  • 问题内容: 我在共享计算资源的环境中工作,即,我们有几台服务器计算机,每台服务器计算机都配备了一些Nvidia Titan X GPU。 对于中小型模型,Titan X的12 GB通常足以让2-3个人在同一GPU上同时进行训练。如果模型足够小,以至于单个模型无法充分利用GPU的所有计算单元,那么与运行另一个训练过程相比,这实际上可以提高速度。即使在同时访问GPU确实减慢了单个训练时间的情况下,具有

  • 非常类似于这个问题,如何在TensorFlow中找到第一个匹配元素的索引 我试着解决这个问题,但不同的是,val不是一个单一的数字,而是一个张量 所以例子 我知道我可以使用一个while循环,但这看起来很混乱。我可以尝试一个映射函数,但是有更优雅的吗?

  • 问题内容: 我的印象是,尽管语法有所不同,但下面的函数a和b在逻辑上是等效的。但是,它们不是,我也不了解它们之间的区别。 在我看来,他们俩都在分配: x对变量z的值, y的值对应于变量x,并且 x + y的值等于变量y。 有人能帮助消除我对多变量分配以及函数a和函数b之间的逻辑差异的误解吗? 问题答案: 分配可以认为是“原子”操作。也就是说,认为在所有操作完成之前,“ 左侧”的所有值都是“冻结”的