TPU 上的 RaggedTensor

问题描述

我正在尝试使用 TensorFlow 训练神经网络,该网络将 RaggedTensor 作为输入 (tf.keras.layers.Input)。它在 cpu 和 GPU 上运行良好,但我真的很难让它在 TPU 上运行。我想知道你们中的一些人是否设法让它工作(不一定要寻找直接的解决方案,虽然它会很棒,一些工具提示已经很棒了!)。到目前为止,错误消息已经足够明确,我可以继续,但我现在正在苦苦思索如何走得更远。

到目前为止我做了什么:

  1. 我正在使用 tf.data.Dataset 从 TF_Records 读取数据,但我需要将其显式转换为 DistributedDataset 以禁用 prefecting。
strategy.experimental_distribute_dataset(
    dataset,tf.distribute.Inputoptions(
        experimental_prefetch_to_device=False
    )
)
  1. 我得到了 Compilation failure: Detected unsupported operations when trying to compile graph ... on XLA_TPU_JIT: RaggedTensorToTensor,它可以通过允许软设备放置来(某种程度上)修复:
tf.config.set_soft_device_placement(True)
  1. 我现在被 Compilation failure: Input 1 to node '.../RaggedReduceSum/RaggedReduce/RaggedSplitsToSegmentIds/Repeat/SequenceMask/Range' with op Range must be a compile-time constant. 困住了。我完全理解为什么会出现此错误,我完全了解 available ops on TPU,尤其是大多数动态操作应在编译时确定以在 TPU 上运行。但我想不出我怎么能在 TPU 上使用那些参差不齐的张量……

任何想法将不胜感激:)

PS:自 2020 年 7 月 this answer 以来,我没有看到 TensorFlow 团队在 TPU 上的 RaggedTensors 上有多少新闻,但我可能错过了很多关于它的信息......指向 git如果我可以进行更多调查,线程对我来说已经很棒了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)