datamllab / rlcard

Reinforcement Learning / AI Bots in Card (Poker) Games - Blackjack, Leduc, Texas, DouDizhu, Mahjong, UNO.
http://www.rlcard.org
MIT License
2.78k stars 615 forks source link

Env 中的多牌桌流程优化 数倍以上效率提升 #291

Open leafsoar opened 1 year ago

leafsoar commented 1 year ago

在 evn 中 run 函数内部,step 所执行的是单牌桌的单步操作,跟牌时的可操作数量往往很少(单牌只能根单牌和炸弹),所以频繁的调用 AI 计算次数的同时,计算量并不高。整体来说 GPU 的使用率会很高,多进程(CPU 核数多)时 GPU 可能会打满。

而使用多牌桌模型,将多个牌桌的 setp 所需数据,组合一次性送入 AI 模型计算,然后拆分到每桌进行逻辑处理。

计算量可能不会减少,但是送入的次数会大大降低。可以多尝试一些牌桌数量,这里测试的结果是,相比单桌 GPU 运算慢载(CPU 核数多,所以 GPU 成了瓶颈),修改成 32 桌同时进行,GPU 占用率会下降到百分之十几,帧率可以提高数倍(CPU 会成为瓶颈)。更多的牌桌数,会导致 GPU 的运算量下降到个位数,显存有一定提升,但不明显。更多的牌桌数不意味着更高的帧率,有个平衡点,这里测试的是 32 桌左右同时送入 step 中,会提高数倍的效率。均衡 CPU 和 GPU 的性能配比

测试硬件:13900KF + 4090

daochenzha commented 1 year ago

@leafsoar 感谢 有代码可以分享吗

leafsoar commented 1 year ago

@daochenzha 这边是基于 douzero 针对灌蛋的 “魔改” 尝试,融入了一些 rlcard 设计的优点。而针对 rlcard 框架的版本支持,可能涉及到的模型定义,流程上就需要考虑的比较多,还没有支持。

daochenzha commented 1 year ago

@leafsoar 好的 期待您的code

xxTree commented 1 week ago

请教一个问题,我使用DouZero训练出来的掼蛋模型发现一个问题,就是训练一个月了,loss值一直在5到6之间,不下降了,而且好像还不如随机出牌这么厉害请问是哪里的问题呢