Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Tensorflow中的A3C-我应该使用线程还是分布式Tensorflow API_Multithreading_Tensorflow - Fatal编程技术网

Multithreading Tensorflow中的A3C-我应该使用线程还是分布式Tensorflow API

Multithreading Tensorflow中的A3C-我应该使用线程还是分布式Tensorflow API,multithreading,tensorflow,Multithreading,Tensorflow,我想在我的本地机器(1个CPU,1个cuda兼容GPU)上实现强化学习的异步Advantage Actor Critic(A3C)模型。在该算法中,多个“学习者”网络与环境副本交互,并定期更新中心模型 我见过在同一个图中创建n个“工作者”网络和一个“全局”网络并使用线程来运行这些网络的实现。在这些方法中,通过对具有“全局”范围的可训练参数应用梯度来更新全局网络 然而,我最近读了一些关于分布式tensorflow的文章,现在我有点困惑了。使用分布式tensorflow API实现这一点会更容易/更

我想在我的本地机器(1个CPU,1个cuda兼容GPU)上实现强化学习的异步Advantage Actor Critic(A3C)模型。在该算法中,多个“学习者”网络与环境副本交互,并定期更新中心模型

我见过在同一个图中创建n个“工作者”网络和一个“全局”网络并使用线程来运行这些网络的实现。在这些方法中,通过对具有“全局”范围的可训练参数应用梯度来更新全局网络

然而,我最近读了一些关于分布式tensorflow的文章,现在我有点困惑了。使用分布式tensorflow API实现这一点会更容易/更快/更好吗?在文档和会谈中,他们总是明确提到在多设备环境中使用它。我不知道在本地异步算法中使用它是否有点过分


我还想问,有没有一种方法可以批量处理每个工作人员计算的梯度,以便在n个步骤后一起应用?

在实现这两个步骤之后,我发现使用线程比分布式tensorflow API更简单,但它的运行速度也更慢。与线程相比,使用的CPU核越多,分布式tensorflow的速度就越快

然而,这只适用于异步培训。如果可用的CPU内核有限,并且您希望使用GPU,那么您可能希望使用多个工作人员的同步培训,就像OpenAI在其应用程序中所做的那样。只有环境是并行的(通过多处理),tensorflow使用GPU而没有任何图形并行。OpenAI报告说,同步训练比A3C训练效果更好

编辑:

以下是一些更详细的信息:


A3C分布式tensorflow的问题在于,在调用学习步骤之前,需要调用多个tensorflow向前传递(以获得n个步骤中的动作)。但是,由于您异步学习,您的网络将在其他工作人员执行的n个步骤中发生变化。因此,您的策略将在n个步骤中更改,学习步骤将使用错误的权重。分布式tensorflow不会阻止这一点。因此,在分布式tensorflow中还需要一个全局网络和一个本地网络,这使得实现不比使用线程的实现更容易(对于线程,您不必学习如何使分布式tensorflow工作)。在运行时方面,在8个CPU内核或更少的CPU内核上不会有太大的差异。

Tensorforce似乎有一个实现:为什么不多进程实现和求和更新,而不是多线程?由于多进程使用多核,这会更快吗?@SridharThiagarajan Tensorflow不支持多进程。螺纹版本的tensorflow零件将使用多芯。但是python部分不会,因此它不能很好地扩展。