最近,我已经使用深度强化学习为Snake游戏训练了AI。为此,我使用了带有tensorflow-gpu 2的Keras API。
(不确定是否需要查看代码,但是如果是的话,这些是最重要的部分:
)
我测量到,在model.predict中花费的总时间是在model.fit中花费的30倍,而预测的次数是实际训练示例的3倍。我的假设是,这是因为游戏模拟是在CPU上运行的,而在CPU和GPU之间传输数据的延迟正是导致预测如此缓慢的原因。 (拟合过程发生在模拟游戏结束时,因此所有训练数据都可以一次性传输)
第二个问题是:我如何检验这个假设?但是主要的问题是:如何解决这个问题?我知道如何编写CUDA程序。我可以编写一个Snake的CUDA实现。但是,我对Tensorflow或其他任何ML框架的了解还不够,如何知道如何在不让数据先通过CPU / RAM的情况下使用它来使用此数据。我该怎么办?
一件有用的事情是增加同时模拟游戏的数量。 30倍系数是512或256(我不记得是哪个)同时进行的游戏,而计数越少,情况就越糟(只有2场同时进行的游戏是50倍)。但我不希望超过512个同时进行的游戏会增加很多价值。
我也尝试过在CPU上运行卷积神经网络。虽然该比率更合理(预测仅比拟合慢4倍),但拟合和预测两者都比使用GPU花费更多的时间。