ml-agents是Unity官方专门用来提供强化学习的工具包,关于ml-agents的介绍不是本文的重点。相比于其他的工具包只需要在package manager中导入,ml-agents需要进行一下简单的配置。这篇文章就对于配置过程及过程中可能遇到的一些问题给予解答。
Unity开源网址:https://github.com/Unity-Technologies/ml-agents
ml-agents的配置有CPU版和GPU版,因为目前GPU并没有提供太多的增益。本篇文章就介绍CPU的配置了。
本篇文章的环境为:windows10+Unity2021.3+Anaconda
cmd执行
conda create -n ml-agents python=3.7
activate ml-agents
cmd执行
pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
python -m pip install mlagents==0.28.0
判断是否下载成功:
mlagents-learn --help
下载网址:https://github.com/Unity-Technologies/ml-agents/releases/tag/release_19
最新版本是Release_20,但19会稳定一点
cd ml-agents-envs
pip install -e .
cd ..
cd ml-agents
pip install -e .
完成以上过程以上环境配置成功
ps:因为需要python环境,所以以后每次使用都需要先activate到指定环境才能执行mlagents的一些命令
笔者在配置过程中遇到了一些问题,在此做个记录,也希望能够提供一些帮助
原因及解决方案:这个是因为Anaconda虽然安装成功了但没有进入环境变量,在环境变量中的Path中配置一下就可以。具体步骤参考:https://blog.csdn.net/m0_68744965/article/details/125700817
同时在Anaconda下使用ml-agents需要多次使用conda命令,关于conda命令可以参考:https://zhuanlan.zhihu.com/p/94744929
在cmd中进行如下操作:
python
import torch
print(torch.__version__)
C:\Users\Administrator>conda create -n ml-agents python=3.7
Collecting package metadata (current_repodata.json): failed
CondaSSLError: OpenSSL appears to be unavailable on this machine. OpenSSL is required to
download and install packages.
Exception: HTTPSConnectionPool(host='repo.anaconda.com', port=443): Max retries exceeded with url: /pkgs/main/win-64/current_repodata.json (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available."))
解决方法:将xxxx/Anaconda3/LIbrary/bin添加到环境变量(这个很多最开始配置Anaconda的教程都没提)
C:\Users\Administrator\Desktop\ml-agents-release_19\ml-agents-release_19>mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun
┐ ╖
Version information:
ml-agents: 0.28.0,
ml-agents-envs: 0.28.0,
Communicator API: 1.5.0,
PyTorch: 1.7.1+cpu
Traceback (most recent call last):
File "D:\Anaconda\envs\ml-agents\Scripts\mlagents-learn-script.py", line 33, in <module>
sys.exit(load_entry_point('mlagents', 'console_scripts', 'mlagents-learn')())
File "c:\users\administrator\desktop\ml-agents-release_19\ml-agents-release_19\ml-agents\mlagents\trainers\learn.py", line 260, in main
run_cli(parse_command_line())
File "c:\users\administrator\desktop\ml-agents-release_19\ml-agents-release_19\ml-agents\mlagents\trainers\learn.py", line 256, in run_cli
run_training(run_seed, options, num_areas)
File "c:\users\administrator\desktop\ml-agents-release_19\ml-agents-release_19\ml-agents\mlagents\trainers\learn.py", line 89, in run_training
stats_writers = register_stats_writer_plugins(options)
File "c:\users\administrator\desktop\ml-agents-release_19\ml-agents-release_19\ml-agents\mlagents\plugins\stats_writer.py", line 47, in register_stats_writer_plugins
if ML_AGENTS_STATS_WRITER not in importlib_metadata.entry_points():
File "D:\Anaconda\envs\ml-agents\lib\site-packages\setuptools\_vendor\importlib_metadata\__init__.py", line 239, in __eq__
return self._key() == other._key()
AttributeError: 'str' object has no attribute '_key'
原因及解决方案:这个是因为缺少一个库,cmd中执行python -m pip install importlib-metadata
C:\Users\Administrator\Desktop\Unity_workstation\Rollerball\config>mlagents-learn config/rollerball_config.yaml --run-id=RollerBall
Traceback (most recent call last):
File "D:\Anaconda\envs\ml-agents\Scripts\mlagents-learn-script.py", line 33, in <module>
sys.exit(load_entry_point('mlagents', 'console_scripts', 'mlagents-learn')())
File "D:\Anaconda\envs\ml-agents\Scripts\mlagents-learn-script.py", line 22, in importlib_load_entry_point
for entry_point in distribution(dist_name).entry_points
File "D:\Anaconda\envs\ml-agents\lib\site-packages\importlib_metadata\__init__.py", line 937, in distribution
return Distribution.from_name(distribution_name)
File "D:\Anaconda\envs\ml-agents\lib\site-packages\importlib_metadata\__init__.py", line 531, in from_name
raise PackageNotFoundError(name)
importlib_metadata.PackageNotFoundError: No package metadata was found for mlagents
原因及解决方法:这个是因为环境被移动过了,之前激活的失败了。需要重新激活环境,在新路径下执行:
cd ml-agents-envs
pip install -e .
cd ..
cd ml-agents
pip install -e .
ml-agents官方提供了很多demo,都放在https://github.com/Unity-Technologies/ml-agents/tree/develop/Project/Assets/ML-Agents/Examples
本文就以其中的一个3DBall的小项目为例,体会一下整体训练过程
在进行下面的操作前,请保证本文第一部分的环境配置已经成功。
具体一点就是cmd中activate ml-agents
本文中使用的是官方的demo,所以只要下载代码,在项目中选择3DBall并导入unity端就行了(官方的代码已经带了训练模型,需要取消一下才能从头训练,也就是下图圈出来的部分要选择None)
cmd执行如下命令:
mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun --force
对这个命令解释一下,这里面有三个参数:第一个是一个yaml的配置文件,要注意下执行路径(相对路径)要提前在cmd中cd到config的上一层再执行,第二个参数是–run-id是唯一标识符,第三个参数是强制生产,因为id唯一,如果用同一个id连续训练两次是不行的(第一次训练是不用加的,不过我习惯性全都加上)
命令执行后就会输出以下内容:
Unity运行之后发现已经开始在训练了(有移动效果),并且cmd端会有如下输出:
[INFO] Hyperparameters for behavior name 3DBall:
trainer_type: ppo
hyperparameters:
batch_size: 64
buffer_size: 12000
learning_rate: 0.0003
beta: 0.001
epsilon: 0.2
lambd: 0.99
num_epoch: 3
learning_rate_schedule: linear
beta_schedule: linear
epsilon_schedule: linear
network_settings:
normalize: True
hidden_units: 128
num_layers: 2
vis_encode_type: simple
memory: None
goal_conditioning_type: hyper
deterministic: False
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
network_settings:
normalize: False
hidden_units: 128
num_layers: 2
vis_encode_type: simple
memory: None
goal_conditioning_type: hyper
deterministic: False
init_path: None
keep_checkpoints: 5
checkpoint_interval: 500000
max_steps: 500000
time_horizon: 1000
summary_freq: 12000
threaded: False
self_play: None
behavioral_cloning: None
这里是训练了50w次,训练结束后会在result文件夹生成一个3DBall.onnx文件(后面使用到的训练文件)
位置如下图:
这个移动的时候需要注意,直接从文件夹拖到项目中,放到目标文件夹下没用
再次运行Unity就发现按照模型训练的结果,在运动了。
继续给一些过程记录说明:
原因及解决办法:这个是因为cmd端会使用这个端口,开Unity的时候端口还没有打开,不用管的。cmd起来了,再次运行Unity就没了
.onnx是预训练模型,.nn是训练结果模型。我们使用onnx就可以了
最后留一下过程中看到的有用的资料:
https://blog.csdn.net/tianjuewudi/article/details/121116043
https://www.bilibili.com/video/BV1hE411W7Pi
https://www.bilibili.com/video/BV1qB4y1T7TG
http://www.yaotu.net/biancheng/145132.html