【问题标题】:TensorFlow nullptr check failed on GPUGPU上的TensorFlow nullptr检查失败
【发布时间】:2017-05-21 14:49:26
【问题描述】:

我正在使用 TensorFlow 的 python API 来训练 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 是一个 TensorArray

h_ta = tf.TensorArray(
        dtype=dtype,
        size=max_seq_len,
        clear_after_read=False,
        element_shape=[batch_size, num_hidden],
        tensor_array_name="fw_output")

self.syntactic_weights_ta 也是一个 TensorArray

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)

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

我再次测试了脚本,但这次将 while 循环中的 swap_memory 参数设置为 False 并且它也适用于 GPU,但我真的很想知道为什么它不适用于 @ 987654333@.

【问题讨论】:

    标签: python tensorflow nullptr


    【解决方案1】:

    这看起来像是一个错误,TensorArray 的张量存储机制与当 swap_memory=True 时由 while_loop 执行的分配魔法进行交互。

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

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

    并在此处回复 github 问题的链接?

    【讨论】:

    • 我已经打开了一个github.com/tensorflow/tensorflow/issues/10083,但很遗憾无法按照您的要求进行详细说明。我不知道如何在 Windows 10 上使用调试选项进行构建。关于一个最小的代码示例,我会在有时间的时候尝试进一步扩展我发布的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2019-01-13
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多