DouZero部署实战:一条从零跑通斗地主AI的完整路线图

DouZero部署实战:一条从零跑通斗地主AI的完整路线图

【免费下载链接】DouZero [ICML 2021] DouZero: Mastering DouDizhu with Self-Play Deep Reinforcement Learning | 斗地主AI 【免费下载链接】DouZero 项目地址: https://gitcode.com/gh_mirrors/do/DouZero

想不想让一台电脑学会斗地主?DouZero 是快手开源的斗地主 AI 框架,它靠自我博弈的深度强化学习,从零开始训练出能战胜大多数人类玩家的智能体,论文发表于 ICML 2021。这篇文章会带你走一遍 DouZero 部署实战的完整流程:装环境、加载模型、评估对局、自己训练,最后把 AI 用起来。

斗地主凭什么难倒 AI

先讲个背景故事,方便你理解这套工具的价值。斗地主看起来只是"出牌",但它同时具备四大难题:三方博弈中两个农民要暗中配合、你只能看到自己的手牌(信息不完整)、状态空间巨大、而合法动作组合约有 10⁴ 种且每手都在变。传统强化学习算法面对这种超大的动态动作空间,几乎都会"迷路"。

DouZero 的思路非常朴素:把经典蒙特卡洛方法用神经网络增强,配合动作编码和多进程并行演员,用一套极简的 Deep Monte Carlo 算法硬生生把难题啃了下来。它在一台四卡服务器上训练几天,就超越了当时所有斗地主 AI,在 Botzone 排行榜 344 个智能体中排名第一。这份"以简驭繁"的思路,值得每个 RL 爱好者亲自跑一遍。

先看清手中的工具箱

克隆仓库后,整个项目的骨架其实很清爽,主要就三块:

  • douzero/dmc/:核心算法区,dmc.py 是深度蒙特卡洛训练主逻辑,models.py 定义神经网络结构,arguments.py 是全部训练参数
  • douzero/evaluation/:评估区,simulation.py 负责对局模拟,random_agent.pyrlcard_agent.pydeep_agent.py 分别代表随机、规则和深度三种智能体
  • 根目录的 train.pyevaluate.pygenerate_eval_data.py 则是你日常要敲的三个入口脚本

记住这个结构,后面每一步都是往这三个位置"添砖加瓦"。

三步搞定环境配置

DouZero 部署实战的第一步是环境准备,三步就够:

  1. 克隆仓库:git clone https://gitcode.com/gh_mirrors/do/DouZero
  2. 安装依赖:pip3 install -r requirements.txt,需要 Python 3.6 以上
  3. 安装包本体,推荐安装稳定版:
pip3 install douzero

国内网络下载慢的话,可以换清华镜像源,一条命令的事。这里有个关键提示:训练需要 CUDA 显卡,但评估可以纯 CPU 跑。所以哪怕你没有 GPU,也能把下面的评估流程完整走一遍,只是稍慢而已。

不训练也能玩:先加载预训练模型

很多新手一上来就急着训练,其实更聪明的顺序是先用别人训好的模型把流程跑通。项目作者提供了几款现成模型:

  • baselines/douzero_ADP/:以平均分差(ADP)为目标训练的版本
  • baselines/douzero_WP/:以胜率(WP)为目标训练的版本
  • baselines/sl/:在人类对局数据上预训练的深度智能体

下载后把权重放进 baselines/ 目录即可。注意:这三份模型文件在源码仓库里是占位符,你需要从官方渠道获取权重再放入。

第一次评估:让 AI 跟自己打

拿到模型后,最解气的操作就是看它大杀四方。评估分两步,第一步先生成对局数据:

python3 generate_eval_data.py --num_games 10000

这条命令会随机生成 1 万副牌局并存成 eval_data.pkl,相当于给 AI 出一套固定的"考题"。第二步用 evaluate.py 让它上场:

python3 evaluate.py --landlord baselines/douzero_ADP/landlord.ckpt --landlord_up random --landlord_down random

命令的意思是:地主位放 DouZero-ADP 模型,两个农民位放随机策略。跑完你会在终端看到一屏结果,核心就两个数字:WP(胜率)和 ADP(平均分差)

  • WP:地主赢了几局、农民赢了几局,最直观的强弱指标
  • ADP:地主得分的平均值,反映赢牌时的"碾压程度"

通常地主位能打出 60% 以上的胜率,就说明模型已经相当能打了。想调整对手的话,--landlord_up--landlord_down 可以换成 rlcard(规则 AI)或任意 .ckpt 模型路径,玩出各种花式 PK。

评估结果怎么看才不踩坑

我见过不少新手对着评估输出一头雾水,这里帮你提炼三个判断要点:

  • 看总量:评估默认基于 1 万局,局数太少(比如几百局)胜率波动会很大,别急着下结论
  • 换对手再测:单打随机对手只能说明"AI 不傻",换上 rlcard 规则 AI 再测一次,才能看出真实水平
  • 多进程提速:纯 CPU 评估较慢,可加 --num_workers 4 并行加速,GPU 机器再加 --gpu_device 0

自己训练一个 AI:参数这样调最省心

跑通评估后,就可以试着自己训一个 AI 了。单卡机器直接跑:

python3 train.py

默认每 30 分钟保存一次检查点。多卡机器可以按"模拟多、训练少"的原则分配资源,比如四卡机器让前三张卡各跑 15 个演员进程用于自我对弈,第四张卡专门训练:

python3 train.py --gpu_devices 0,1,2,3 --num_actor_devices 3 --num_actors 15 --training_device 3

几个关键参数的含义帮你理清:--gpu_devices 指定可见的显卡,--num_actor_devices 决定几张卡用于模拟对局,--num_actors 是每张模拟卡上的演员进程数,--training_device 指定训练卡。此外 --objective 可以切换奖励目标(默认 adp,可换 wp),--learning_rate--batch_size 等超参都在 douzero/dmc/arguments.py 里可查。

新手建议:先用默认参数把流程跑通,再逐步加大 --num_actors,观察胜率曲线变化,比一上来就猛调超参更有效率。

训练中途,如何找回最新模型

训练是个长跑,途中崩溃或想中途评估都很常见。好在检查点默认存在 douzero_checkpoints/douzero/ 下,项目还贴心地提供了找回最新模型的小脚本:

sh get_most_recent.sh douzero_checkpoints/douzero/

它会自动挑选三个位置(地主、上家农民、下家农民)最新的权重,统一复制到 most_recent_model/ 目录,方便你直接喂给 evaluate.py 做中途评估。这个小动作能让训练过程形成"训练-评估-再训练"的正向循环。

只有 CPU 怎么办

没有 GPU 也不用劝退。DouZero 支持纯 CPU 训练,代价是速度慢一些:

python3 train.py --actor_device_cpu --training_device cpu

--actor_device_cpu 让模拟演员跑在 CPU 上,--training_device cpu 让训练也走 CPU。Windows 用户需要注意一个历史限制:由于 CUDA 张量多进程在 Windows 上不受支持,只能用 CPU 做演员,用 GPU 训练会报 operation not supported。先用 CPU 把流程跑通,有条件再上显卡,这是最务实的路径。

常见报错排雷

  • operation not supported:Windows 下 GPU 演员报错,改用 --actor_device_cpu
  • 评估找不到模型:确认 .ckpt 路径写对,并已放入 baselines/ 目录
  • eval_data.pkl 不存在:先跑 generate_eval_data.py 生成数据,再执行评估
  • 下载依赖太慢:换清华镜像源,或使用仓库提供的 requirements.txt 逐项安装

把 AI 接进你的应用

模型在手,应用场景就很丰富了:可以做游戏里的智能陪玩、把 DeepAgentact 接口封装成在线出牌服务,甚至作为强化学习课程的教学案例。douzero/evaluation/deep_agent.py 里的模型加载与动作选择逻辑,就是最好的集成样板——它把"读状态、算价值、选最优动作"三步封装得清清楚楚,你只需要把输入换成自己的牌局数据即可。

现在,就动手部署吧

从环境配置、加载预训练模型、跑通评估,到亲手训练并调参,DouZero 部署实战的每一步其实都不复杂,难的是迈出第一步。建议你今天晚上就用一张 CPU 把 generate_eval_data.py + evaluate.py 跑通,亲眼看一次 AI 胜率刷屏,那份成就感会推着你继续玩下去。祝你在斗地主 AI 的世界里玩得开心,期待你训练出超越人类的模型!

【免费下载链接】DouZero [ICML 2021] DouZero: Mastering DouDizhu with Self-Play Deep Reinforcement Learning | 斗地主AI 【免费下载链接】DouZero 项目地址: https://gitcode.com/gh_mirrors/do/DouZero

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值