首页 > 解决方案 > 带有张量流的OOM

问题描述

我在整个训练我的tensorflow模型时都面临OOM错误,结构如下:

tf.contrib.layers.embed_sequence 用 GoogleNewsVector 初始化 2 * tf.nn.rnn_cell.DropoutWrapper(tf.nn.rnn_cell.LSTMCell) #forward 2 * tf.nn.rnn_cell.DropoutWrapper(tf.nn.rnn_cell.LSTMCell) #backward tf.nn.bidirectional_dynamic_rnn 包装上述层 tf.layers.dense 作为输出层

我试图将批量大小降低到 64,我的输入数据被填充到 1500,我的词汇量是 8938

我使用的集群非常强大(https://wiki.calculquebec.ca/w/Helios/en)我使用两个节点,每个节点有 8 个 GPU,但仍然出现此错误:

2019-02-23 02:55:16.366766:W tensorflow/core/framework/op_kernel.cc:1273] OP_REQUIRES 在 reverse_op.cc:270 处失败:资源耗尽:在分配具有 shape[2000,800,300] 的张量并键入 float 时出现 OOM在 /job:localhost/replica:0/task:0/device:GPU:1 上由分配器 GPU_1_bfc

我正在使用带有 MirroredStrategy 的估计器 API,但仍然没有用,有没有办法让 tensorflow 只使用 GPU 运行训练并将张量存储在主机内存中?欢迎任何其他建议。

标签: tensorflowmachine-learning

解决方案


使用 GPU 运行特定操作(例如训练期间的一些张量乘法)需要将这些张量存储在 GPU 上。

您可能想使用 Tensorboard 或类似的工具来查看哪些操作需要最多的内存用于您的计算图。特别是,嵌入和 LSTM 之间的第一个链接可能是罪魁祸首,您需要以某种方式缩小范围。


推荐阅读