本文分享如何安装机器学习代理工具(Unity Machine Learning Agents),并通过官方范例3D小球,了解整个环境的安装过程。
在本文中使用的案例是3D平衡小球(3D Balance Ball)的运行环境。该环境包含多个平板和小球。这些平板可以自己做纵向及橫向旋转,来保持小球不掉离平板。每个平板都是一個代理,通过保持小球在平板上的时间得到奖励;掉出平板,则会扣除奖励。这个训练过程的目的在于让平半学习永远不让球落下。
整篇文章为参考以下文件列表所整合的一个攻略流程:
Windows 10安裝攻略 by Jason Weimann
Mac安装攻略 by 鲍健运
专例Github
整合Unity教学
Pyhon与其他软件安装
架在Windows 10平台上:
本教学需要安装的软件清单如下:
Nvidia CUDA toolkit - CUDA 8.0.61
CUDNN档案 - CUDA 8.0使用的v6.0版
安装Anaconda会安装以下套件:
- Python
- Jupyter
- TensorFlow
- Matplotlib
- numpy
- pillow
- docopt
Unity范例专案
设定Unity机器学习代理工具和TensorFlow环境(Windows 10)
说明
本章节针对Windows 10平台。
请注意软件所对应的版本,如果版本不同可能会导致安装不成功。
下载和安装软件前关闭Unity和Visual Studio,并确认你的Windows 10电脑采用NVIDIA显卡,因为本文所使用的GPU加速工具包是NVIDIA的CUDA。
安裝CUDA工具
首先需要下载CUDA 8.0.61。請到CUDA下载页面,选择下载CUDA Toolkit 8.0 GA2。
下载完成后执行安装,当出现下图所示的选择安装介面。请选择“Express”,一直下一步到完成CUDA工具的安裝。
安装CUDA深度神经网络资料库CUDNN
接下來需要下载CUDA深度神经网络库(CUDA Deep Neural Network),简称CUDNN。它是专门针对深度神经网路框架设计的一套GPU计算加速方案。全世界的深度学习研究者和框架开发者都使用CUDNN来增强GPU计算效能。这让他们能专注于训练神经网络、开发软件应用,不用在低级別的GPU性能調整上耗费时间。CUDNN支持当下流行的各种深度学习框架,包括Caffe2、MATLAB、Microsoft Cognitive Toolkit、TensorFlow和PyTorch等。
CUDNN下载页面,选择CUDA 8.0使用的v6.0版本下载。当下载CUDNN時,Nvidia 会要求你登陆,可以注册一个免费账号登陆。
下载完成后解压缩会有三个目录(bin、include和lib资料夹),确定CUDA工具安装完成后,把这三个目录复制到CUDA 8.0工具资料夹。
一般来说安裝CUDA時的预设路径是:
C:\Program Files\NVIDIA GPU Computing Toolkit\cuda\v8
设定环境变量和路径
接下來需要帮Windows系统增加环境变量和路径设定。
1.控制面板->系统和安全->系统
2.进入高级系统设置,点击环境变量
3.进入环境变量 可新增路径
4.点击新建按钮
加一个CUDA_HOME,数值设为:
C:\Program Files\NVIDIA GPU Computing Toolkit\cuda\v8.0
选择确定。
编辑路径Path
先找到Path,点击编辑,会出现系统路径快捷表。
新增两个系统路径。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64
和
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\CUPTI\libx64
最上面两个是安装CUDA时产生的不要去动它
新加的路径会在最下面,注意不要打错字了
安裝Anaconda
为了要安装Python和Jpyther套件,为了避免繁锁的安装流程,建议采用Anaconda来安装会比较容易。
到Anaconda的下载页面,下载Python 3.6,选择64位版本。下载完成后安装Anaconda,按照系统下一步到完成安装。
安装完成后你应该可以载快速选择单找到Anaconda Prompt,开启它。
接下来所有的Command line指令都是在Anaconda Prompt执行。
下一步,我们要创建使用Python 3.5.2的执行环境。在Anaconda Prompt中输入指令来建立环境:
conda create -n tensorflow-gpu python=3.5.2
然后输入指令启动刚刚创建的环境:
activate tensorflow-gpu
最后用这个指令安装TensorFlow:
pip install tensorflow-gpu
当安装完成后,你就可以输入指令启动Python来测试刚刚的流程是否成功。指令为:
python
然后输入指令测试:import tensorflow as tf
下载Unity的范例专案
接下来要瞎咋本次的3D小球专案,你需要从Github页面下载专案,可以直接下载并解压缩到任意位置,或是通过Github Desktop直接克隆一份到你的电脑上。为了让工作轻松建议不要太深的目录,例如D:\ml\就好。
接下来从菜单里面找到Anaconda Prompt。用右键点击Anaconda Prompt,选择更多->以系统管理员身份执行
刚刚解压缩后的unity-3D小球专案目录下有一个python目录。从这个Anaconda prompt视窗把目录切换到刚刚下载好的ml-agents专案的python目录位置。
例如:我把ml文件夹放在D:\ml\ml-agents\,那么我们要把目录切换到D:\ml\ml-agents\python。执行:
cd d:\ml\ml-agents\python
然后要安装html5lib库,输入指令:
conda install --force html5lib
然后输入:
pip install .
注意:install后面有个.
安装专案所需的Python库和工具
以下说明两个安装方法,可以二选一:
方法一:
安装Jupyter Notebook
Jupyter Notebook是一个开源的Web应用程式,可以让你建立和共用包含即时程式码,方程式,视觉化和说明文本的文档。 用途包括:资料清理与转换,数值类比,统计建模,机器学习等等。
输入
pip3 install jupyter
安装Jupyter Notebook
安装NumPy
NumPy是Python语言的开源数学扩展库。支援高级大量的维度的数组与矩阵运算,此外也针对阵列运算提供大量的数学函式程式库。由于NumPy刚刚宣布不再支援Python 2,所以建议直接使用Python 3。
输入
pip3 install numpy
安裝 NumPy。
安装Pillow
Pillow是PIL(Python Imaging Library,Python图像库)的一个分支,提供了对于开发者许多比较友好和直观的功能。
输入
pip3 install pillow
安裝 Pillow。
安装docopt
docopt是Python的命令列参数解析器,其基于多年来用于描述程式介面的说明咨询而设计的,因此可以给开发者清晰的输出体验。
输入
pip3 install docopt
安装 docopt 。
安装TensorFlow
TensorFlow是现今非常流行的使用资料流程图进行数值计算的开源软件库。图中的节点代表数学运算, 而图中的边则代表在这些节点之间传送的多维阵列。这种灵活的架构可以让你使用一个API将计算工作部署到设备,伺服器或者移动设备中的一个或多个CPU或GPU。TensorFlow 最初是由Google 机器智慧研究部门的 Google Brain 团队中的研究人员和工程师开发的,用于进行机器学习和深度神经网络的研究,但它是一个非常基础的系统,因此也可以应用于众多其他领域。
输入
pip3 install tensorflow
安装 TensorFlow。
方法二:
Python库快捷安装
一步步通过pip3安装这些库有些麻烦,如果你已经安装了Python3,并且克隆了Github上完整的ml-agents专案。
你可以打开Terminal,把目录该岛ml-agents专案下python的目录:
cd /Users/(你的名字)/UnityMachineLearningAgents/python
输入pip3 install.
安装以上所有的Python库和工具。
完成安装
如果你按照上面两种方法顺利操作的话,接下来我们就可以到unity里面设定要学习的内容
确保你已经下载Unity载github上ml-agents专案
确保使用Unity2017.1或以上版本
设定Unity环境
启动unity,开启刚刚下载资料李的unity-environment目录
载启动窗口中,选择open,并载弹出的视窗中,选择unity-environment,点击Open
注意:如果弹出警告“Opening Project in Non-Matching Editor Installation",请自动忽略。
打开专案后,载project视窗,到资料夹Assets/ML-Agents/Examples/3DBall/,按两下Scene的示例场景。
点击功能Edit -> Project Settings -> Player,选中Resolution and Presentation里的Run in Background属性。
将Resolution and Presentation中的Display Resolution Dialog属性,选择Disabled。
在左边的场景hierarchy 视察中,展开Ball3DAcademy游戏物件,并选中它的子物件Brain3DBrain,在右边的Inspector中查看属性。
将物件的Type of Brain设定为External。
(注:设为External是为了在外部做训练,未來把训练资料放回专案后,设回Internal就可以在Unity里面看到训练后的行为)
点击File -> Build Settings
选择目标平台。选项勾选development build来记录除错咨询。点build开始打包。
注意:存档路径请之间直接指定ml-agents底下的python目录,给予的文件名也要记住,待会儿要填入一样的文件名。
用强化学习训练大脑
如果上面已经跑过Jupyter安装流程,你可以:
开启Anaconda Prompt
切换目录到专案的python目录
cd d:\ml\ml-agents\python
执行jupyter notebook
开启浏览器localhost:8888就会看到jupyter notebook在python的位置被打开(
用PPO训练模型
下一步我们训练代理,让它在平台上平衡小球的位置,我们会使用一個叫做近端策略优化(Proximal Policy Optimization),简称PPO的强化学习演算法。这个算法经过实验,证明是十分安全、高效且比其他强化学习演算法实用性更强的,所以我们选择这个演算法来作为Unity机器学习代理的范例演算法。
如果想要了解更多关于近端策略优化演算法的咨询,请参考OpenAI发布的文章:
现在请按照下面步骤操作:
在Jupyter中打開PPO.ipynb
修改env_name的值 = 刚刚打包的专案文件名字
run_path目前设定为ppo,依需求可以改到別的目录也可以不改
(可选)针对本专案例如果你想要快点训练完成,可以多调整以下设定:
max_steps = 5000
buffer_size = 5000
batch_size = 512
注意,训练方法和ml-agent v0.2不同。v0.2使用Jupyter notebook运行ppo.ipynb文件。但是v0.3改为使用命令行的方法。
我们回到Anacoda Prompt,输入以下命令:
python learn.py 3dball --run-id=test --train
观察训练过程
如果顺利的话,你的机器人应该已经开始训练。要更仔细的观察训练过程,你可以使用Tensorboard。
在Anaconda Prompt视窗切换目录到专案的python目录
cd d:\ml\ml-agents\python
輸入:
tensorboard --logdir=summaries
然后再浏览器中打开localhost:6006
将训练好的模型载入Unity环境
训练结果数据保存在models\test\下
停止执行PPO就能停止训练。现在你就已经有训练好的TensorFlow模型。你必须将保存的模型转换为Unity可使用的格式,透過以下步骤载入到Unity中。
把训练好的bytes复制到:
Assets/ML-Agents\Examples\3Dball\TFModels
设定对TensorFlowSharp的支援
因为对TensorFlowSharp的支持目前还处于实验阶段,预设情况下它是被禁用的。要打开它,你必须按照下列不揍。
请注意Internal Brain模式只在完成以下步骤后才能使用。
从这里下载TensorFlowSharp套件,并加入Unity中。
功能表選擇Edit -> Project Settings -> Player。找到Other Settings,在Scripting Runtime Version属性中选择Experimental (.NET 4.6 Equivalent),在Scripting Defined Symbols属性中,加入ENABLE_TENSORFLOW。(请注意:多个平台代表每个平台都要设定)
重启Unity
重新打开3DBall場景
从场景的hierarchy视图选择Ball3DBrain物件
如下图将Type of Brain改为Internal
如下图将Graph Model指定刚刚加入.bytes文件
将Graph Placeholder的size值设为1
增加名为epsilon的placeholder,设定类型为floating point,范围从0到0。
注意:上面这两个设定应该在专案里已经设好了。
设定这两个步骤是有必要的,因为3DBall是个持续的控制环境,而TensorFlow模型会用噪音参数来决定行动。但那样的情況下控制过程是很难得的,所以不需要epsilon变数)
最后按Play按钮,查看训练后的结果在Unity Edito里面呈现。
流程非常繁琐但現在你应该可以看到被训练好的模型已经能自行控制平衡小球的行为。