【问题标题】:Large overhead for calling python code in tensorflow eager mode在 tensorflow 急切模式下调用 python 代码的开销很大
【发布时间】:2020-04-21 18:38:36
【问题描述】:

我正在自定义环境中使用 tensorflow 训练深度 RL 代理,并注意到在我的训练循环中调用 environment.step 方法比在外部调用要慢得多。 这是解释这一点的伪代码

class agent():
    ........
    def train(): 
        for i in batch_size: 
            start = time.time()
            nextstate, reward, done = env.step()
            agent.timecounter += time.time - start

对于代理,我会发现调用 env.step 在单个批次的 ~.8 秒挂壁时间中占用 ~.5 秒。如果我只是正常调用代码,而不是在代理训练循环中调用,我看不到这种开销。

start = time.time()
for i in batch_size: 
    out = env.step()
print(time.time() - start)

我会发现只需要 ~.01 秒即可运行 environment.step 相同的次数。是什么导致了这种额外的开销?这让我的训练变得非常缓慢。

我尝试了健身房的 cartpole 环境,它没有这个问题。我的自定义环境有几个字典属性。这可能是导致问题的原因吗?我没有看到我的代码和健身房的购物车之间有任何其他差异。

在您的机器上重现的完整代码可在https://github.com/ronan-keane/havsim/tree/DL3 获得 在scripts/meng assignments/control 1/traintest.py

【问题讨论】:

    标签: python tensorflow reinforcement-learning tf.keras


    【解决方案1】:

    我设法回答了我自己的问题。问题是从神经网络到自定义 python 代码的输入被转换为 tf.float32。然后,这将导致 python 代码将所有内容转换为张量,然后纯 python 代码中的所有数学运算都将作用于新转换的张量。这增加了 50 倍的巨大开销。 只需将 NN 的输出转换为常规 python 浮点数即可解决问题。

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2017-01-09
      • 2021-11-03
      • 2020-08-28
      相关资源
      最近更新 更多