在GPU上TensorFlow nullptr检查失败

2024-06-26 00:11:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用TensorFlow的pythonapi来训练LSTM的一个变体。 为此,我使用tf.while_loop函数迭代时间步。在

在cpu上运行我的脚本时,它不会产生任何错误消息,但在gpu上,python崩溃的原因是:

...tensorflow/tensorflow/core/framework/tensor.cc:885] Check failed: nullptr != b.buf_ (nullptr vs. 00...)

我的代码中导致这个失败的部分(当注释掉它时,它起作用了)在while循环的主体中:

...
h_gathered = h_ta.gather(tf.range(time))
h_gathered = tf.transpose(h_gathered, [1, 0, 2])
syn_t = self.syntactic_weights_ta.read(time)[:, :time]
syn_t = tf.expand_dims(syn_t, 1)
syn_state_t = tf.squeeze(tf.tanh(tf.matmul(syn_t, h_gathered)), 1)
...

其中time从零开始,在每一步之后递增,h_ta是张量阵列

^{pr2}$

而且self.syntactic_weights_ta也是张量阵列

self.syntactic_weights_ta = tf.TensorArray(
        dtype=dtype,
        size=max_seq_len,
        tensor_array_name="fw_syntactic_weights")
self.syntactic_weights_ta = self.syntactic_weights_ta.unstack(syntactic_weights)

我试图在代码片段中实现的基本上是存储在h_ta中的过去输出的加权和。 最后我用tf.train.AdamOptimizer训练网络。在

我再次测试了这个脚本,但是这次while循环中的swap_memory参数设置为False,它也可以在GPU上运行,不过我很想知道它为什么不能与swap_memory=True一起工作。在


Tags: 代码self脚本timetftensorflowtensordtype
1条回答
网友
1楼 · 发布于 2024-06-26 00:11:12

这看起来像是一个bug,因为TensorArray的张量存储机制与while\u loop在swap_memory=True时执行的分配魔术交互。在

你能在TF的github上打开一个问题吗?还请包括:

  • 完整的堆栈跟踪(TF使用-c dbg preferrable构建)
  • 要重现的最小代码示例
  • 描述问题是否需要您调用backprop。在
  • 这是否可在TF 1.2/夜之夜/主分支中复制。在

并在这里回复github问题的链接?在

相关问题 更多 >