• Stars
    star
    376
  • Rank 113,810 (Top 3 %)
  • Language
    Jupyter Notebook
  • License
    MIT License
  • Created over 6 years ago
  • Updated almost 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

中国象棋alpha zero程序

icyChessZero 中国象棋alpha zero

这个项目受到alpha go zero的启发,旨在训练一个中等人类水平或高于中等人类水平的深度神经网络,来完成下中国象棋的任务。目前这个项目仍在积极开发中,并且仍然没有完成全部的开发,欢迎pull request 或者star。 然而受到计算资源限制,这样庞大的任务不可能在一台机器上完成训练,这也是我完成了分布式训练代码的原因,希望各位小伙伴能够加入,一起训练这样一个中国象棋alpha go的网络。

我的估计是达到4000~5000elo分数的时候深度网络可以达到目标,现在深度网络已经到了3000分的边缘,达到人类中上水平的目标并不是不可能的。

目前的elo:

elo

详细胜率表:

table

当然,目前棋力还比较一般,因为是从完全随机开始训练的,比方说某个对局片段(800 playouts):

demo

推荐代码运行环境

  • python==3.6.0
  • tensorflow==1.4.0
  • threadpool==1.3.2
  • xmltodict==0.11.0
  • urllib3==1.22
  • numpy==1.14.3
  • tflearn==0.3.2
  • pandas==0.19.2
  • scipy==1.1.0
  • matplotlib==2.0.0
  • tqdm==4.19.4
  • tornado==4.5.1(集群master必须安装,slave不需要)
  • uvloop==0.9.1(windows可不装)

推荐机器环境

  • 机器在北京邮电大学机房中(不加入我们的集群或者自组集群可以不管这条)
  • windows 或 linux服务器
  • 16G以上内存
  • 4个以上CPU物理核
  • 一张以上能够进行深度学习运算的显卡

加入我们的集群训练(北邮校内only)

目前我们的集群已经有四台gpu机器(两台windows,两台linux)在夜以继日地运行,我们需要更多,如果你恰好有北邮机房内闲置的gpu服务器的权限,希望你加入我们,一起训练中国象棋的alpha go zero。

集群分为master和slave,加入集群的机器均为slave,master和slave分工如下:

  • slave : 负责自动从master拉取最新模型权重,完成自对弈,并且把棋谱自动上传到master
  • master: 负责给slave提供权重,并且负责模型的更新,评估,以及从slave接收棋谱

如果你想要加入我们的训练:

  1. 首先联系我 qq/微信: 892009517 ;邮箱:[email protected], 由于项目仍然在快速迭代,所以经常需要更新代码,与我联系获得最新的消息或代码更新的时间很必要。
  2. 如果你实在不想联系我,那么可以进行如下操作,直接加入集群(不推荐):

windows 机器加入集群(北邮校内only)

clone工程后在cmd中执行下面命令

cd script

./multithread_start.bat [thread_number] [gpu_core] [python_env]

比如:

./multithread_start.bat 10 0 python3

意味着在0号GPU上用python3环境跑10个进程(一般一个1080ti GPU可以支持到至多24个进程),然而GPU并不是唯一瓶颈,不推荐跑超过物理核数两倍的进程数量。

linux 机器加入集群(北邮校内only)

clone工程后在shell中执行

cd script

比如:

sh multithread_start.sh -t 10 -g 0 -p python3 

意味着在0号GPU上用python3环境跑10个进程(与上面windows版本对应)

总之

总之,如果想要加入集群,请先联系我,因为如果直接加入集群,可能会有我这边代码更新了然后部分slave没更新的情况,这样会造成不一致,后果会不可知。

自组集群

如果你在北邮没有机器,然而在校外有一些机器,希望能跑起来这样一个分布式程序,那么请按照下面的步骤做:

  1. 确定你要这么做,这是一个耗时,昂贵,不讨好,但是有点意思的工作
  2. 推荐你的机器(们)的环境满足推荐配置,并且安装好应该装的包
  3. master 机器一定要是linux(目前没有支持master也是windows)
  4. fork一份icyChessZero的代码,找到 config/conf.py 这个文件,把server的ip改成你希望的master的ip
  5. master 和slave分别clone这份fork的代码
  6. 在master上cd scripts运行 initize_weight.py 生成第一份随机权重
  7. 在master上cd distribute运行 distributed_server.py开启master服务端口
  8. 在slave机器上起slave进程的方法同上文"加入集群"
  9. master上如果有空闲的资源可以起几个slave进程
  10. 模型更新和validate的方法在scripts/daily_update.sh中,按照你的需求改这个shell文件,并且把它放到crontab中设置为每小时运行一次(它会检查棋谱数量,数量足够后它会执行模型更新和评估工作)

查看棋谱

slave机器运行出来的棋谱在 data/distributed 目录下,是cbf文件,可以通过"象棋桥"软件查看,也可以在 ipynbs/see_gameplay.ipynb 中查看

查看训练状态

master 机器可以在ipynbs/elo_graph.ipynb 中查看集群训练的模型的elo到什么水平了。

没做的事

还有挺多东西可以做的,工程也还在快速开发,比如:

  1. 给棋谱加上一些meta,比如每一步的mcts分析,方便查个别case

2.长将和长捉的判断还没有做

  1. 给代码加上版本限制,master只接受与自己版本相同的slave的棋谱
  2. 专门搞一个web ui实时展示elo和棋谱等
  3. readme写清楚模块划分 .....

等等等等 如果你发现有你想做的,提提pull request或者联系我撒

这个work的一些细节已经以草稿的形式发布在了: http://icybee.cn/article/69.html

联系方式:

More Repositories

1

TexasSolver

🚀 A very efficient Texas Holdem GTO solver ♠️♥️♣️♦️
C++
1,757
star
2

ChineseAiDungeonChatGPT

中文版的ai地牢,直接使用的openai的ChatGPT api作为讲故事的模型。
Python
1,391
star
3

TexasHoldemSolverJava

A Java implemented Texas holdem and short deck Solver
Java
808
star
4

ChineseAiDungeon

中文版ai地牢,基于清源CPM fineutne
Python
236
star
5

elephantfish

elephantfish: 一个只有124行的中国象棋引擎
Python
233
star
6

FastLoRAChat

Instruct-tune LLaMA on consumer hardware with shareGPT data
Jupyter Notebook
121
star
7

XQPy

象棋巫师(非官方)python实现
JavaScript
68
star
8

AlphaNLHoldem

An unoffical implementation of AlphaHoldem. 1v1 nl-holdem AI.
Jupyter Notebook
65
star
9

ByrBbsMirror

北邮人论坛镜像源代码
Python
39
star
10

icyface_offline

offline part of icyface
Jupyter Notebook
30
star
11

icytranslate_offline

The offline part of icytranslate(a english-chinese translate platform) ,the output of this project should be a translate model
Jupyter Notebook
19
star
12

icyElephant

a chinese chess engine using conv neural network with zero look-ahead
Jupyter Notebook
19
star
13

gym_chinese_chess

中国象棋gym环境
Jupyter Notebook
12
star
14

AiDungeonChatGPT

AI-Dungeon like Game, directly uses openai's ChatGPT api as a storytelling model.
Python
11
star
15

icyface_api

rest api of icyface
Python
8
star
16

ChineseChessMuzero

使用Muzero算法进行中国象棋对弈
Jupyter Notebook
8
star
17

icytranslate_api

restful api of icytranslate (an opensource english - chinese translate platform)
Jupyter Notebook
7
star
18

icycloud

An docker based IAAS platform
JavaScript
6
star
19

mandarin_recognition

chinese mainland madarin speech recognition neural networks
Jupyter Notebook
5
star
20

icygo

a cnn based go engine
Jupyter Notebook
5
star
21

icyface_website

JavaScript
5
star
22

FastChat

FastChat clone
Python
4
star
23

shisanshui_ai

十三水AI,使用Deterministic CFR解决十三水问题
C++
4
star
24

dark-lora

dark version of a chat LLM
Jupyter Notebook
4
star
25

deuces

A python3 port of https://github.com/worldveil/deuces , a pure python poker hand evaluator
Python
4
star
26

icytranslate_website

the website of icytranslate, a english-chinese translate system
CSS
3
star
27

texas_holdem

德州扑克 通用solver构建中进行的一些实验
Jupyter Notebook
2
star
28

rainfall_prediction

Jupyter Notebook
2
star
29

texassolver_page

webpage of texas solver
HTML
2
star
30

simple_ocr

Jupyter Notebook
2
star
31

Object-detection

Using tensorflow to build a series of object detection networks, and discuss each network's performance
Jupyter Notebook
2
star
32

en2ch_translate

a demo that translates english to chinese
Jupyter Notebook
1
star
33

Lesson1_simple_face

face recognition using hisgram,HOG,LBP,CNN, etc, a brief code history of facial recognition
Jupyter Notebook
1
star