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

强化学习MAPPO论文复现

image

行路有良伴就是捷径。

Good company on the road is the shortest cut.

image

今天给大家分享的是,最近强化学习领域较火的一篇论文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。大家感兴趣的可以去阅读下全文。好了,我们言归正传,回到今天的主线任务——论文实验复现及问题解决。

友情传送门:

MAPPO源码地址

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

一、问题汇总与解决

(1)线程问题

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

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

查看CPU逻辑核数

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

在python程序开头加入

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

出现

image

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

image

重新运行即可。

(2)动态库GLIBC问题

运行train_smac.sh出现问题

image

确定好StarCraftII的位置

image

将星际争霸文件移动到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)
image

查看系统中GLIBC版本

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

发现最高才到GLIBC2.17

image

背景补充:

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
image

解压

tar -zxvf  glibc-2.18.tar.gz
image

创建编译目录

cd glibc-2.18
image

编译

cd build/
image

安装

sudo make -j 
image
sudo make install
image

再次查看glibc

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

此时GLIBC2.18已经成功安装

二、运行测试及问题解决

运行星际争霸

python -m pysc2.bin.agent -map Simple64

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

image

作为玩家启动游戏

python -m pysc2.bin.play –map Simple64
image

会随机出现一个地图

image

找到回放存放的路径

cd ~/StarCraftII/
image

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

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

列出所有地图

python -m pysc2.bin.map_list
image

继续运行星际争霸

./train_smac.sh

出现新的问题

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

找到starcraft2的文件位置

cd onpolicy/envs/starcraft2

下载SMAC_Maps

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

进入SMAC_Maps

cd smac/smac/env/starcraft2/mps

发现SMAC_Maps

image

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

./train_smac.sh
image

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

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

image

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

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

之后,再次运行测试

./train_smac.sh

此时,已经可以成功运行

image
image

总共有1千万步需要更新

image

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

运行hanabi场景

chmod +x ./train_hanabi_forward.sh
image

开始运行

./train_hanabi_forward.sh

出现bug为“check recurrent policy!”

image

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

image

重新运行

image

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

进入运行环境

source /etc/profile

再次运行

image

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

继续探索,出现

IndentationError: unindent does not match any outer indentation level
image

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

image

将elif对齐后,重新运行

image

发现仍有错误,将其删除

image

重新运行

image

使用sudo执行

image

安装wandb

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

切换root用户

image

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

image

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

image

再次执行

image

出现cuda out of memory

image

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

image

再次运行

./train_hanabi_forward.sh

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

image
image

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容