小编Dan*_*Dan的帖子

在单个(多核)CPU 设备上执行 TensorFlow

我对TensorFlow在只有CPU设备且网络仅用于推理的特定情况下的执行模型有一些疑问,例如使用图像识别(https://www.tensorflow.org/tutorials/ image_recognition ) 具有多核平台的 C++ 示例。

下面,我将尝试总结一下我的理解,同时提出一些问题。

Session->Run()(文件 direct_session.cc)调用 ExecutorState::RynAsynch,它用根节点初始化 TensorFlow 就绪队列。

然后,指令

runner_([=]() { Process(tagged_node, scheduled_usec); }); (executor.cc, function ScheduleReady, line 2088)
Run Code Online (Sandbox Code Playgroud)

将节点(以及相关操作)分配给 inter_op 池的线程。但是,我并不完全了解它是如何工作的。例如,在 ScheduleReady 尝试分配比 inter_op 池大小更多的操作的情况下,操作如何入队?(FIFO 顺序?)池的每个线程都有一个操作队列或有一个共享队列? 我在哪里可以在代码中找到它?我在哪里可以找到池的每个线程的主体?

另一个问题是关于 inline_ready 管理的节点。这些(廉价或死)节点的执行与其他节点之一有何不同?

然后,(仍然,据我所知)执行流程从执行操作的 ExecutorState::Process 继续,区分同步和异步操作。同步和异步操作在执行方面有何不同?

当操作被执行时,PropagateOutputs(它调用 ActivateNodes)将每个后继节点的节点添加到就绪队列中,由于当前节点(前驱)的执行而变得就绪。

最后,NodeDone() 调用 ScheduleReady() 来处理当前在 TensorFlow 就绪队列中的节点。

反之,intra_op 线程池如何管理取决于具体的内核,对吧?内核请求的操作可能比intra_op 线程池大小多吗?如果是,它们按哪种顺序排队?(先进先出?)

一旦操作被分配给池中的线程,那么它们的调度就留给底层操作系统或者 TensorFlow 强制执行某种调度策略?

我在这里问是因为我在文档中几乎没有找到关于这部分执行模型的任何内容,如果我错过了一些文档,请指出我所有的文档。

threadpool tensorflow

4
推荐指数
1
解决办法
1785
查看次数

标签 统计

tensorflow ×1

threadpool ×1