Tensorflow不精确超时

Tensorflow不精确超时,tensorflow,Tensorflow,我一直在测试sess.runs(应用于卷积神经网络)的超时功能,似乎超时不是很精确 例如,如果我将超时设置为800毫秒,则在触发超时异常之前可能会有1-2秒的延迟。这让我相信,取消通知不会在计算节点之间捕获。(根据时间线,各为0.2-0.5秒) 所以 1) 有没有办法使超时更精确 2) Tensorflow取消通知是否在节点计算之间捕获?Tensorflow中的取消和超时机制仅用于取消少量的阻塞操作,特别是:从空队列到满队列,以及从文件 如果运行一个包含非阻塞操作(如and)的图形,并且超时过期

我一直在测试sess.runs(应用于卷积神经网络)的超时功能,似乎超时不是很精确

例如,如果我将超时设置为800毫秒,则在触发超时异常之前可能会有1-2秒的延迟。这让我相信,取消通知不会在计算节点之间捕获。(根据时间线,各为0.2-0.5秒)

所以

1) 有没有办法使超时更精确


2) Tensorflow取消通知是否在节点计算之间捕获?

Tensorflow中的取消和超时机制仅用于取消少量的阻塞操作,特别是:从空队列到满队列,以及从文件

如果运行一个包含非阻塞操作(如and)的图形,并且超时过期,TensorFlow通常会等到这些操作完成,然后返回“超过截止日期”错误

为什么会这样?我们添加了取消,因为用户开始将阻塞操作的管道构建到他们的图形中(例如for),并且需要某种形式的取消来彻底关闭这些管道。超时还有助于调试这些管道中可能不幸发生的死锁。相比之下,TensorFlow设计为尽可能高效地调度非阻塞操作:例如,在GPU上运行时,TensorFlow将在GPU计算流上异步将多个操作排队,而不会在它们完成时阻塞。虽然在技术上可以检查每个操作执行之间的取消,但这会增加操作调度的延迟,并在常见情况下降低总体性能


但是,如果非阻塞操作的超时/取消对您的用例有用,请随时打开一个作为特性请求的

很酷,知道只有少数阻塞操作是可取消的很好。我看到
WaitForNotificationWithTimeout
WaitForNotification
散布在似乎可以取消的地方。将
WaitForNotificationWithTimeout
添加到非阻塞操作会使它们也可以取消吗?我试图弄清楚在图形操作之间禁用/启用取消需要什么,以便我可以尝试进行修改。我可能也会打开一个github功能请求来解决它。可能有一些情况可以通过这种方式解决,但一般的问题并不是那么简单,因为非阻塞操作几乎从不显式地等待通知和
run()
调用必须等到任何正在进行的工作完成后才能返回(以避免指针悬空)。很多隐式阻塞存在于Eigen(并行工作在多个线程中被分片)或GPU设备(运行时与GPU流同步以确保所有异步工作都已完成)中。每一个都是可以修复的,但可能需要很大的更改…我明白了。。。一个可行的选择是检查executor类中的
取消管理器的
已取消
属性(可能在
NodeDone
ScheduleReady
),如果是,返回?我目前正在尝试,但一些线程的
取消管理器\uu
似乎没有被取消(导致死锁)。只是想知道这个想法是否有致命的缺陷……在executor中检查
取消\u manager\uu->IsCancelled()
可能有助于提前退出,但这无助于取消GPU流上发布的工作。哎呀,每一步都应该有一个取消管理器,所以我不确定你说的其他线程是什么意思。该代码相当复杂,因此可能需要更改多个位置(需要进行一些基准测试以确保不会导致细粒度工作负载的性能下降)。