系统信息
- 是否编写了自定义代码(与在TensorFlow中使用的库存示例脚本相反):是
- OS平台和发行版:Windows 7和Ubuntu 18.04.3 LTS(colab)
- 从哪里安装的TensorFlow(源代码或二进制文件):通过pip install tf-nightly-gpu安装
- TensorFlow版本(使用以下命令):v1.12.1-32502-g2544e4e277 2.3.0-dev20200523(Windows和colab)
- Python版本:3.6.6(Windows),3.6.9(colab)
- CUDA/cuDNN版本:10.1/7.6.3.30(Windows),未知(colab)
- GPU型号和内存:NVidia 1080Ti ~11GB(Windows),未知(colab)
描述当前行为
当在tf.function装饰的函数中创建tf.FIFOQueue时,从队列中入队/出队Tensor会失败,并出现NotFoundError,提到名为"localhost/{Some number}/{C++ mangled name of class tensorflow::QueueInterface}"的不存在资源。如果在急切模式下创建队列,所有操作都可以正常工作。
描述预期行为
要么像在急切模式下一样成功执行图形模式执行,要么将队列创建的不适用于图形模式的情况作为API文档记录。
重现问题的独立代码
Linux情况:
https://colab.research.google.com/drive/1OQ68ibI-9u-6f4nslwIzDuMzdztxVGwX?usp=sharing
Windows情况:
import tensorflow as tf
@tf.function
def foo():
queue = tf.queue.FIFOQueue(-1, [tf.string], tf.TensorShape([]))
queue.enqueue('Hello')
s = queue.dequeue()
tf.print(s)
foo()
日志已附加
log.txt
3条答案
按热度按时间f4t66c6m1#
我已经在Colab中尝试使用TF-GPU的夜间版本,并能够重现这个问题。请查看gist here。谢谢!
3b6akqbq2#
当前,您需要在函数外部保留拥有队列资源的Python对象,如下所示:
tensorflow/tensorflow/python/kernel_tests/fifo_queue_test.py
第145行到第157行
| | class_M(module.Module): |
| | |
| | def init(self): |
| | self.q1=data_flow_ops.FIFOQueue(10, [dtypes_lib.int32], shapes=[()]) |
| | self.q2=None |
| | |
| | @def_function.function |
| | def uses_queues(self, x): |
| | if self.q2 is None: |
| | self.q2=data_flow_ops.FIFOQueue(10, [dtypes_lib.int32], shapes=[()]) |
| | self.q2.enqueue(x) |
| | self.q2.enqueue(x+3) |
| | self.q1.enqueue(self.q2.dequeue()) |
如果我们抛出一个错误消息,或者让函数每次运行时创建和销毁一个 transient 队列资源,那就太好了。所以我暂时把这个bug留着。
uyhoqukh3#
请使用2.11V和tf-nightly 2.12.0-dev20221228版本重现此问题,并查看以下代码片段:2.11V 和 nightly。谢谢!