gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:45:09 25 4
gpt4 key购买 nike

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

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

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

我还想问一下,有没有办法把每个worker计算出的梯度在n步后批量应用到一起?

最佳答案

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

但这仅适用于异步训练。如果可用的 CPU 核心有限并且您想使用 GPU,您可能需要对多个工作线程进行同步训练,就像 OpenAI 在其 A2C implementation 中所做的那样。 。只有环境是并行化的(通过多处理), tensorflow 使用 GPU,没有任何图形并行化。 OpenAI 报告称,同步训练的结果比 A3C 的结果更好。

编辑:

以下是更多详细信息:

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

关于multithreading - Tensorflow 中的 A3C - 我应该使用线程还是分布式 Tensorflow API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48111120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com