Equim-chan / Mortal

🚀🀄️ A fast and strong AI for riichi mahjong, powered by Rust and deep reinforcement learning.
https://mortal.ekyu.moe
GNU Affero General Public License v3.0
929 stars 118 forks source link

Online Train报错;请教一下Online Train的正确流程应该是怎样的? #33

Closed Nitasurin closed 1 year ago

Nitasurin commented 1 year ago

配置好config online参数后 在已经运行server.py和train.py(online)的情况下,运行client.py报以下错误 image

此外,想请教下online train的正确流程应该是怎样的?

Equim-chan commented 1 year ago

我没有预见过这个错误。

online train 的基本上是把 server client trainer 按顺序起起来。

Nitasurin commented 1 year ago

我在我的个人PC上运行了online train,可以很好地工作。 但是在两台深度学习服务器上都会报设备未就绪的错误,我怀疑可能是服务器端口的问题。

Nitasurin commented 1 year ago

我现在选择在本地运行client,服务器运行server和train,已经能正常进行online train。 谢谢E老师解答

Nitasurin commented 1 year ago

运行onlinetrain一段时间后,模型性能没有任何进步,反而退化十分严重(平均顺位已经退化到3位以后了)。我不知道训练过程是否存在错误..

Equim-chan commented 1 year ago

这个也很正常,online 对各种超参都极其敏感。

Nitasurin commented 1 year ago

我尝试调整了各项可能与online-train有关的超参后,还是无法解决online train过程中的困难:mortal似乎无法正确评估更新后网络的性能。在稍长时间的自对弈训练后,Trainee的策略在性能上远劣于Trainer(随着时间推移两者差距还在进一步扩大)。我使用的是V2版本,Train_no_oracle_guiding

Equim-chan commented 1 year ago

你先自己研究吧,我这边目前 v3 对配置的改动稍微比较多,现在提了之后可能也会失效。

hyskylord commented 1 year ago

你后来解决了吗?以前尝试online training的时候我也遇到了这个问题,不过检查了数据发现dqn loss确实下降了。

Nitasurin commented 1 year ago

@hyskylord 很遗憾,我并没有完全解决这个问题。最近我将精力放在了别处,因此未能取得更多进展; dqn_loss受超参等因素影响较大,仅能作为一种参考。

Equim-chan commented 1 year ago

提醒一下这不是传统的机器学习任务,loss 在这里没有什么参考价值,一切应以 test play 的统计数据为准。

hyskylord commented 1 year ago

提到loss只是为了说明程序在正常运行,并没有强调实际价值的意思。 经过了一些测试后我认为这是因为V2本身的设计就没有考虑到offline转online的问题,导致offline的梯度方向完全和online的梯度方向不同。我尝试了从零开始online训练时就没有遇到这个问题。个人推测如果offline训练时关闭cql也可以回避这个问题,不过没有进一步的尝试。

Equim-chan commented 1 year ago

offline 的核心就是 CQL,这个可关不得。

从 v1 以来在在线服务上跑的模型基本都是 offline + online 的产物,这个路线是没什么问题的,只是确实 offline 转 online 这个切换要改的东西比较繁杂。我之后再考虑一下要不要把具体的配置公开出来。

不过至少得改一下 lr 吧,这个可能是最关键的配置。offline 转 online 的训练需要非常低的 lr,不超过 1e-5,而且可能要通过 accumulate gradient 来加 batch size (也就是加大 opt_step_every),从另一个维度继续减小 lr。