【问题标题】:Getting interrupted by signal 11: SIGSEGV被信号 11 打断:SIGSEGV
【发布时间】:2020-01-15 02:06:51
【问题描述】:

我所知道的是,当这个分支被执行并且来自它的weights 被传递给tf.data.experimental.sample_from_datasets 时会发生错误:

# ...
elif pretrain_cfg.schedule == PretrainSchedule.CONVERGE_LINEARLY:
    logger.info('[%s] - Pretrain: Using CONVERGE_LINEARLY schedule' % self.name)
    a = tf.minimum(tf.constant(1.0, dtype=tf.float64, shape=(1,)), global_step / max_pretrain_steps)
    b = tf.maximum(tf.constant(0.0, dtype=tf.float64, shape=(1,)), 1 - global_step / max_pretrain_steps)
    weights = a * const_task_weights + b * pretrain_task_weights

return tf.data.experimental.sample_from_datasets(datasets, weights=weights)

以下作品:

weights = tf.cond(
    tf.greater(global_step, max_pretrain_steps),
    true_fn=lambda: const_task_weights,
    false_fn=lambda: pretrain_task_weights
)

但由于某种原因,这会导致SIGSEGV

a = tf.minimum(tf.constant(1.0, dtype=tf.float64, shape=(1,)), global_step / max_pretrain_steps)
b = tf.maximum(tf.constant(0.0, dtype=tf.float64, shape=(1,)), 1 - global_step / max_pretrain_steps)
weights = a * const_task_weights + b * pretrain_task_weights

我真的不明白问题出在哪里,但问题肯定来自这一行:

weights = a * const_task_weights + b * pretrain_task_weights

问题是为什么。由于sample_from_datasetsweights 参数,在这种情况下依赖global_step 可能无效。

但是,在sample_from_datasets 中我没有看到任何可疑之处,因为在sample_from_datasets 中发生的第一件事是

weights = ops.convert_to_tensor(weights, name="weights")

所以将张量传递给它应该没问题。

有什么想法吗?


错误输出:

INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 0 into /data/translation/multi-problem/hi2en/model/512-3-1-1024/de2en.hi2en/c19cfad259cad911/model.ckpt.
bash: line 1:  4153 Segmentation fault      (core dumped) env "CUDA_VISIBLE_DEVICES"="0" "LIBRARY_ROOTS"="/Users/username/Library/Caches/PyCharm2018.2/remote_sou...

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

【问题讨论】:

  • 尝试保存检查点时的段错误是 IMO 打开错误报告问题的原因。即使假设您做错了什么,也应该进行检查以防止这种情况发生。不能多说,我真的不知道错误的来源可能是什么,因为我不知道当 TF 保存检查点时会发生什么,以及这如何影响你处理权重的方式。
  • @GPhilo 听起来很合理。我将在 github 上打开一个问题 :)
  • @GPhilo 这实际上是我自己的错(见答案)。 :D

标签: tensorflow


【解决方案1】:

好的,事实证明问题不是直接使用 tensorflow - 实际上根本不是。

问题是因为const_task_weightspretrain_task_weights 的形状不同。我没有验证输入并且在其他地方有错误。

请注意,如果形状不匹配,您可能会收到此类错误。

我想这不能通过 tensorflow 来检查或确定,所以这将是用户必须注意的事情(需要引用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多