1. 下载StarCraft II游戏到服务器里面
如下图所示:
2.创建环境+安装pytorch
采用anaconda来创建虚拟环境:
conda create -n 虚拟环境名称 python=3.8
实例为:
conda create -n pymarl python=3.8
采用3.8的python的兼容性更强
然后切换到创建好的环境:
conda activate pymarl
在这个环境当中装pytorch包,有两种方式,一种是线上装,还有一种是离线装。
①对于线上装pytorch的话,可以去官网查找对应的cuda版本的pytorch进行安装:https://pytorch.org/get-started/previous-versions/
②我采用的是离线装pytorch的方式:
这是下好的pytorch的包:
离线安装pytorch包的命令:
conda install --offline pytorch文件名
实例为:
conda install --offline /home/zpq/pytorch-1.8.0-py3.8_cuda11.1_cudnn8.0.5_0.tar.bz2
采用离线安装pytorch有一个问题,如下:
就是动态库会找不到。解决方案就是安装cudatoolkit,它的作用可以来链接动态库。
conda install cudatoolkit=11.1
注意这里的cudatoolkit需要对应自己的pytorch版本。具体还是去官网那边去找:https://pytorch.org/get-started/previous-versions/
如果以上的conda安装出现问题的话,比如conda里找不到cudatoolkit=11.1的情况,可以转用pip来进行安装
pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
至此可以再测试下pytorch是否安装好了:
python
import torch
在linux窗口输入上述代码没有报错,即证明pytorch装好了。
3.下载及配置pymarl+smac
通过git来获取pymarl的代码:
git clone https://github.com/oxwhirl/pymarl.git
如果上述git出现问题,就将https改为git,即为:
git clone git://github.com/oxwhirl/pymarl.git
获取完后代码为:
注意如上的3rdparty并不是原生下载下来就有的,所以不需要惊慌为什么你下载的和我的不一样。
下面就是说一下这个3rdparty的创建以及它的作用。
它的作用就是作为软链接,来链接到我们服务器里已经下好的StarCraft II游戏,这样有一个好处,那就是一台服务器只需要有一个这个游戏就行了,就不需要一个项目配一个StarCraft II游戏。毕竟一个这个游戏接近40G,空间占比还是很大的。
具体代码操作:
在linux窗口上,首先用cd命令切换进你的pymarl的代码里面:
比如:
cd ~/code/pymarl/
由于我pymarl是放在code文件目录下的,所以会有这一层父目录的存在。
然后进行创建3rdparty:
mkdir 3rdparty
然后切换进3rdparty
cd 3rdparty/
再使用连接的命令:
ln -s StarCraftII的安装路径 StarCraftII
实例:
ln -s /home/user/StarCraftII StarCraftII
由于我这个游戏是存放在user目录下的,所以是这样的操作。操作完后,我们可以看到这样的效果:
这就证明你已经软链接成功了!
下面再就是安装SMAC了,smac的作用就是作为游戏的接口,它的安装命令很简单:
pip install git+https://github.com/oxwhirl/smac.git
然后安装完,要记得在你的home目录里的.bashrc文件末尾加入这样一行命令:
记得在.bashrc文件里加了这行命令之后要再source它一下,让上面加的那行代码生效。
source .bashrc
export SC2PATH = /home/user/StarCraftII/
即这一行的命令的作用就是为了让smac能够找到游戏具体的位置。【注意:之前的3rdparty是为了让pymarl能够找到游戏所做的软链接】。
否则的话,当你测试smac的时候会得到这样类似的错误信息哦~
ps:下面这一小部分是写给自己要重装SMAC看的,读者可以略过这一小部分。
因为我的smac已经安装过了,并且采用的是可编辑式的smac,因此需要先切换到当前的smac所在根目录,也就是:cd /data/zpq/code_135/pymarl/src
然后采用SMAC的github官网提供的可编辑安装即可:
也就是在上述的目录内运行:
pip install -e smac/
这样俺的smac就安装好了,然后测试smac有没有安装好的结果图跟上述的结果图可能有点不同,因为我的smac是经过改动的,所以运行python -m smac.examples.random_agents语句的结果可能还是会报错,如下所示:
但是不需要慌张,到这里就对于自己来说,这个smac已经重新安装成功了。
4.测试环境
做完上述的smac配置步骤就可以进行测试smac环境了:
python -m smac.examples.random_agents
如果跑出来的结果图是这样的,并且没有报错:
那么恭喜你,你的smac的配置已经完成了!
然后就可以测试pymarl的配置了:【注意,到现在为止pymarl肯定是还没有配置好的,我们要通过运行下面的代码,然后发现一个错误就导入进一个包,以及根据相对应的提示来对里面的代码进行一点点的修改】
直接运行这句话【跑这句代码的时候,要确认你所在的目录是在/pymarl/的里面】:
python src/main.py --config=qmix --env-config=sc2 with env_args.map_name=2s3z t_max=20000
然后你可能就会发现这么个问题:
那么这个问题就是告诉你,你要装这个包了!输入下面命令,就得以解决。
pip install sacred
然后就接着用上面测试pymarl是否配置好的运行代码来跑,接着找错误,看到差什么包就安装什么包就可以了。
注意!!!这里有一个包要注意,需要指定它的版本号,那就是对应yaml的包不能装最新的版本,装最新的版本会导致其中有些语句过时了从而报错。
pip install PyYAML==3.13
我这边用的是3.13版本的yaml。
然后就是重复上面的步骤:①检查pymarl是否配置好②加入依赖的包,就是①②反复横跳。
最后就是你可能会碰到这样的问题:
你的报错信息出现了这样的说法
item = “{:.4f}”.format(np.mean([x[1] for x in self.stats[k][-window:]]))
那么你需要对于你的src/utils/logging.py文件里面的一句代码【大概在48行左右的位置】进行修改:
import torch as th
# 当我没有写入上面"import XXX"的代码的时候,下面的"item = XXX"是位于48行
# 写入了上面的代码后,"item = XXX"就在49行的位置了
item = "{:.4f}".format(th.mean(th.tensor([x[1] for x in self.stats[k][-window:]])))