全網(wǎng)良心論文復現(xiàn)!Centos 7.9 復現(xiàn)MAPPO出現(xiàn)的問題匯總【收藏干貨】

強化學習MAPPO論文復現(xiàn)

image

行路有良伴就是捷徑。

Good company on the road is the shortest cut.

image

今天給大家分享的是,最近強化學習領域較火的一篇論文MAPPO的復現(xiàn)。

(今天這篇論文復現(xiàn),需要有一定的強化學習知識背景,因時間有限,今天這次分享,主要把重點放在實驗的問題匯總與解決,論文中有關的一些背景知識,改日慢慢為大家普及)

MAPPO是清華大學于超小姐姐等人的一篇有關多智能體的一種關于集中值函數(shù)PPO算法的變體文章。論文全稱是“The Surprising Effectiveness of MAPPO in Cooperative, Multi-Agent Games”。此論文認為,PPO的策略裁剪機制非常適用于SMAC任務,并且在多智能體的不平穩(wěn)環(huán)境中,IPPO的學習穩(wěn)定性優(yōu)于IAC(independent actor-critic)和IQL(independent q-learning),性能更好。也就是說,此論文認為將PPO算法擴展到多智能體環(huán)境中是十分有效的,并且總結了多智能體任務中非常有用的5個trick。大家感興趣的可以去閱讀下全文。好了,我們言歸正傳,回到今天的主線任務——論文實驗復現(xiàn)及問題解決。

友情傳送門:

MAPPO源碼地址

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

一、問題匯總與解決

(1)線程問題

運行時,出現(xiàn)線程創(chuàng)建失敗

-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邏輯核數(shù)

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

在python程序開頭加入

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

出現(xiàn)

image

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

image

重新運行即可。

(2)動態(tài)庫GLIBC問題

運行train_smac.sh出現(xiàn)問題

image

確定好StarCraftII的位置

image

將星際爭霸文件移動到root目錄下,

sudo mv  /home/lab214/StarCraftII  /root/

運行星際爭霸

python -m pysc2.bin.agent -map Simple64

出現(xiàn)問題報錯

/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

查看系統(tǒng)中GLIBC版本

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

發(fā)現(xiàn)最高才到GLIBC2.17

image

背景補充:

Glibc是gnu發(fā)布的libc庫,即c運行庫。glibc是linux系統(tǒng)中最底層的api,幾乎其它任何運行庫都會依賴于glibc。glibc除了封裝linux操作系統(tǒng)所提供的系統(tǒng)服務外,它本身也提供了許多其它一些必要功能服務的實現(xiàn)…對于CentOS這樣的系統(tǒng),為了追求穩(wěn)定性(這個值得商榷)往往各種庫版本都很低,因此,更新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

創(chuàng)建編譯目錄

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已經(jīng)成功安裝

二、運行測試及問題解決

運行星際爭霸

python -m pysc2.bin.agent -map Simple64

發(fā)現(xiàn),此時已經(jīng)可以成功運行

image

作為玩家啟動游戲

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

會隨機出現(xiàn)一個地圖

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

繼續(xù)運行星際爭霸

./train_smac.sh

出現(xiàn)新的問題

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

發(fā)現(xiàn)SMAC_Maps

image

將其剪切到onpolicy/envs/starcraft2文件夾下,再次運行

./train_smac.sh
image

該錯誤仍然出現(xiàn),這說明,我們需要將地圖文件放置到星際爭霸地圖中去

首先,先瀏覽星際爭霸地圖文件,發(fā)現(xiàn)地圖中沒有SMAC_Maps

image

根據(jù)顯示出的地圖路徑,我們將下載好的SMAC_Maps移動到Maps下

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

之后,再次運行測試

./train_smac.sh

此時,已經(jīng)可以成功運行

image
image

總共有1千萬步需要更新

image

大概訓練九百多萬步后,便會停止。

運行hanabi場景

chmod +x ./train_hanabi_forward.sh
image

開始運行

./train_hanabi_forward.sh

出現(xiàn)bug為“check recurrent policy!”

image

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

image

重新運行

image

仔細研究train_hanabi_forward.sh發(fā)現(xiàn)其中已經(jīng)含有--use_recurrent_policy 猜想這可能是由于環(huán)境問題造成的

進入運行環(huán)境

source /etc/profile

再次運行

image

仍然是一樣的報錯,這說明不是運行環(huán)境問題。

繼續(xù)探索,出現(xiàn)

IndentationError: unindent does not match any outer indentation level
image

這說明出現(xiàn)了空格和Table混用的情況,需要修改空格。定位到157行

image

將elif對齊后,重新運行

image

發(fā)現(xiàn)仍有錯誤,將其刪除

image

重新運行

image

使用sudo執(zhí)行

image

安裝wandb

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

切換root用戶

image

進入root用戶,再進入環(huán)境 運行發(fā)現(xiàn)

image

于是改變hanabi_forward.sh的參數(shù),將algo="mappo"改為algo="rmappo"

image

再次執(zhí)行

image

出現(xiàn)cuda out of memory

image

發(fā)現(xiàn)超出內存,在train_hanabi_forward.sh中修改訓練次數(shù)和隱藏層大小,在這里我將--hidden_size改為了256

image

再次運行

./train_hanabi_forward.sh

發(fā)現(xiàn)此時,終于可以成功運行!

image
image

對此,你有什么看法呢?如果你在操作過程中遇到了什么問題,或有什么想法和建議,在留言區(qū)留下你的足跡吧,與大家一起交流,一起進步~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容