程序员开发实例大全宝库

网站首页 > 编程文章 正文

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

zazugpt 2024-09-01 07:56:24 编程文章 23 ℃ 0 评论


强化学习MAPPO论文复现

行路有良伴就是捷径。


Good company on the road is the shortest cut.



今天给大家分享的是,最近强化学习领域较火的一篇论文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 unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC
4096 current, 253916 max



查看CPU逻辑核数

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


在python程序开头加入

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


出现


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

重新运行即可。


(2)动态库GLIBC问题


运行train_smac.sh出现问题


确定好StarCraftII的位置


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



查看系统中GLIBC版本

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


发现最高才到GLIBC2.17


背景补充:

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


解压

tar -zxvf  glibc-2.18.tar.gz


创建编译目录

cd glibc-2.18
mkdir build


编译

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


安装

sudo make -j 


sudo make install


再次查看glibc

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


此时GLIBC2.18已经成功安装


二、运行测试及问题解决


运行星际争霸

python -m pysc2.bin.agent -map Simple64

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


作为玩家启动游戏

python -m pysc2.bin.play –map Simple64


会随机出现一个地图


找到回放存放的路径

cd ~/StarCraftII/
cd Replays
cd RandomAgent
ls


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

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


列出所有地图

python -m pysc2.bin.map_list


继续运行星际争霸

./train_smac.sh


出现新的问题


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

找到starcraft2的文件位置

cd onpolicy/envs/starcraft2


下载SMAC_Maps

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


进入SMAC_Maps

cd smac/smac/env/starcraft2/mps


发现SMAC_Maps


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

./train_smac.sh


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


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


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

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


之后,再次运行测试

./train_smac.sh


此时,已经可以成功运行


总共有1千万步需要更新

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


运行hanabi场景

chmod +x ./train_hanabi_forward.sh


开始运行

./train_hanabi_forward.sh


出现bug为“check recurrent policy!”


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


重新运行


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

进入运行环境

source /etc/profile
source activate marl


再次运行

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


继续探索,出现

IndentationError: unindent does not match any outer indentation level



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


将elif对齐后,重新运行


发现仍有错误,将其删除


重新运行


使用sudo执行


安装wandb

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


切换root用户


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


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


再次执行


出现cuda out of memory


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


再次运行

./train_hanabi_forward.sh


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



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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表