tensorflow - 带有张量流的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 运行训练并将张量存储在主机内存中?欢迎任何其他建议。
解决方案
使用 GPU 运行特定操作(例如训练期间的一些张量乘法)需要将这些张量存储在 GPU 上。
您可能想使用 Tensorboard 或类似的工具来查看哪些操作需要最多的内存用于您的计算图。特别是,嵌入和 LSTM 之间的第一个链接可能是罪魁祸首,您需要以某种方式缩小范围。
推荐阅读
- python - pygpu问题:DLL加载失败:找不到指定的程序
- c++ - 通过 reinterpret_cast 和 std::launder 访问存储
- javascript - Nuxt:SyntaxError Unexpected token {
- vue.js - 我收到了这个警告:DatePickerAndroid 已被合并
- python - Python 中的测试精度(图像分类)
- html - 如果未显示,请保留 div 的位置
- c# - 如何检查 Firebird 数据库的 nbak 状态
- javascript - 使用 Typescript 或 NodeJS 发出 HTTP 请求
- c# - 是否可以使用更多条件过滤 IIS 工作进程?
- node.js - 在非 icognito 中启动浏览器以保留登录