vlambda博客
学习文章列表

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


强化学习MAPPO论文复现


行路有良伴就是捷径。


Good company on the road is the shortest cut.


全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


今天给大家分享的是,最近强化学习领域较火的一篇论文MAPPO的复现。


(今天这篇论文复现,需要有一定的强化学习知识背景,因时间有限,今天这次分享,主要把重点放在实验的问题汇总与解决,论文中有关的一些背景知识,改日慢慢为大家普及)


MAPPO是清华大学于超小姐姐等人的一篇有关多智能体的一种关于集中值函数PPO算法的变体文章。论文全称是“The Surprising Effectiveness of MAPPO in Cooperative, Multi-Agent Games”。此论文认为,PPO的策略裁剪机制非常适用于SMAC任务,并且在多智能体的不平稳环境中,IPPO的学习稳定性优于IAC(independent actor-critic)和IQL(independent q-learning),性能更好。也就是说,此论文认为将PPO算法扩展到多智能体环境中是十分有效的,并且总结了多智能体任务中非常有用的5个trick。大家感兴趣的可以去阅读下全文。好了,我们言归正传,回到今天的主线任务——论文实验复现及问题解决


友情传送门:

https://github.com/marlbenchmark/on-policy


一、问题汇总与解决


(1)线程问题


运行时,出现线程创建失败

-u's'rOpenBLAS blas_thread_init: pthread_create failed for thread 8 of 40: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 253916 max


全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


查看CPU逻辑核数

 cat /proc/cpuinfo| grep "processor"| wc -l 

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


在python程序开头加入

import osos.environ['OPENBLAS_NUM_THREADS'] = '1'


出现

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


修改train_mpe_.sh,在后面加上--use_recurrent_policy

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】

重新运行即可。


(2)动态库GLIBC问题


运行train_smac.sh出现问题

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


确定好StarCraftII的位置

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


将星际争霸文件移动到root目录下,

sudo mv /home/lab214/StarCraftII /root/


运行星际争霸

python -m pysc2.bin.agent -map Simple64


出现问题报错

/root/StarCraftII/Versions/Base75689/SC2_x64: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /root/StarCraftII/Libs/libstdc++.so.6)


全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


查看系统中GLIBC版本

strings /lib64/libc.so.6 | grep GLIBC


发现最高才到GLIBC2.17

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


背景补充:


Glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现…对于CentOS这样的系统,为了追求稳定性(这个值得商榷)往往各种库版本都很低,因此,更新glibc到2.18即可。


下载glibc2.18库

curl -O https://mirrors.tuna.tsinghua.edu.cn/gnu/glibc/glibc-2.18.tar.gz

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


解压

tar -zxvf glibc-2.18.tar.gz

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


创建编译目录

cd glibc-2.18mkdir build

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


编译

cd build/../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


安装

sudo make -j 

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


sudo make install

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


再次查看glibc

strings /lib64/libc.so.6 | grep GLIBC

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


此时GLIBC2.18已经成功安装 


二、运行测试及问题解决


运行星际争霸

python -m pysc2.bin.agent -map Simple64

发现,此时已经可以成功运行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


作为玩家启动游戏

python -m pysc2.bin.playmap Simple64

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


会随机出现一个地图

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


找到回放存放的路径

cd ~/StarCraftII/cd Replayscd RandomAgentls

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


在存有回放文件的文件夹下观看回放

python -m pysc2.bin.play -replay RandomAgent/Simple64_2021-04-21-03-13-36.SC2Replay

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


列出所有地图

python -m pysc2.bin.map_list

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


继续运行星际争霸

./train_smac.sh


出现新的问题

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


ValueError: Map 'SMAC_Maps/corridor.SC2Map' not found.

找到starcraft2的文件位置

cd onpolicy/envs/starcraft2


下载SMAC_Maps

git clone https://github.com/oxwhirl/smac.git

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


进入SMAC_Maps

cd smac/smac/env/starcraft2/mps


发现SMAC_Maps

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


将其剪切到onpolicy/envs/starcraft2文件夹下,再次运行

./train_smac.sh

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


该错误仍然出现,这说明,我们需要将地图文件放置到星际争霸地图中去


首先,先浏览星际争霸地图文件,发现地图中没有SMAC_Maps

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


根据显示出的地图路径,我们将下载好的SMAC_Maps移动到Maps

sudo mv  /home/lab214/下载/on-policy-main/onpolicy/envs/starcraft2/SMAC_Maps  /root/StarCraftII/Maps/

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


之后,再次运行测试

./train_smac.sh


此时,已经可以成功运行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


总共有1千万步需要更新

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】

大概训练九百多万步后,便会停止。


运行hanabi场景

chmod +x ./train_hanabi_forward.sh

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


开始运行

./train_hanabi_forward.sh


出现bug为“check recurrent policy!”

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


修改train_hanabi_forward.sh,在其后加上--use_recurrent_policy

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


重新运行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


仔细研究train_hanabi_forward.sh发现其中已经含有--use_recurrent_policy 猜想这可能是由于环境问题造成的

进入运行环境

source /etc/profilesource activate marl


再次运行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】

仍然是一样的报错,这说明不是运行环境问题


继续探索,出现

IndentationError: unindent does not match any outer indentation level


全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


这说明出现了空格和Table混用的情况需要修改空格。定位到157行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


将elif对齐后,重新运行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


发现仍有错误,将其删除

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


重新运行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


使用sudo执行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


安装wandb

pip install -i https://pypi.douban.com/simple --trusted-host pypi.douban.com wandb

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


切换root用户

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


进入root用户,再进入环境 运行发现

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


于是改变hanabi_forward.sh的参数,将algo="mappo"改为algo="rmappo"

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


再次执行

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


出现cuda out of memory

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


发现超出内存,在train_hanabi_forward.sh中修改训练次数隐藏层大小,在这里我将--hidden_size改为了256

全网良心论文复现!Centos 7.9 复现MAPPO出现的问题汇总【收藏干货】


再次运行

./train_hanabi_forward.sh


发现此时,终于可以成功运行!



对此,你有什么看法呢?如果你在操作过程中遇到了什么问题,或有什么想法和建议,在留言区留下你的足迹吧,与大家一起交流,一起进步~