微信号:Unity-GreaterChina

介绍:Unity官方开发者平台,分享最前沿的技术文章和开发经验,精彩的Unity活动和社区相关信息.

使用Docker实现ML-Agents功能

2018-03-30 12:08 Unity

我们之前已经为大家介绍过《Mac下配置Unity机器学习代理工具》和《Windows 10下配置Unity机器学习代理工具和TensorFlow环境》,但是还是不少开发者表示配置环境是个难题,一部分使用者对于安装TensorFlow、Python等工具链比较头疼。


现在随着Unity机器学习工具ML-agents v0.3 beta版的发布,今天由Unity技术经理鲍健运向各位推荐一种比较方便的“实验性”解决方案:使用Docker在Windows和Mac平台下进行ML-Agents的训练与推理

 

这种解决方案还存在一些限制:

  • 目前的设置会强制让TensorFlow和Unity使用CPU进行计算。(当然,如果你是没有N卡的Mac用户,原来的解决方案也是一样的情况。)

  • Docker支持仅限于其代理不使用基于摄像头的视觉观察( camera-based visual observations)的学习环境。 因此,像GridWorld这种示例,在Docker方式下是不支持的。

  • 因为Windows 10版的Docker需要使用Hyper-V功能,所以对于Windows 10的版本有所限制。


 

什么是Docker?

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

 


必要准备:

  • Unity Linux 发布平台支持功能(Unity 2017.1+)

  •  Docker

 

安装Docker

Windows或Mac系统,通过Unity安装器或者Unity Hub下载Unity,确保安装Linux发布平台的支持(Linux Build Support)。


安装 Docker,大家可以前往Docker官网根据自己电脑的系统下载所需的安装包。


由于Docker在与主机隔离的环境中运行容器,主机中的已安装目录用于共享数据,例如: Unity可执行文件,课程文件和TensorFlow图形。 为了方便起见,我们在存储库的根目录下创建了一个空的unity-volume文件夹。当然,你可以根据自身实际需求,随意使用其他目录。

 

使用方法

这个解决方案主要有三个步骤:使用特定标志构建Unity环境,构建Docker容器,最后运行容器。  如果你不熟悉为ML-Agents构建Unity环境,可以先移步学习我们之前发布的《Unity机器学习项目实战:3D平衡小球》学习,下文也以《3D平衡小球》项目为例。

 

构建环境

由于Docker通常运行与主机共享(linux)内核的容器,所以必须为Linux平台构建Unity环境。 在构建Unity环境时,请从Build Settings窗口中选择以下选项:

  • Target Platform 设置为 Linux

  • Architecture 设置为 x86_64

  • 取消 Development Build 勾选

  • 取消 Headless Mode 勾选(必须,因为Unity二进制文件将在没有安装图形驱动程序的容器中运行。)

 

 

然后点击 Build,选择一个环境名称(比如ML-Agents-3DBall),并将输出的目录设置为 unity-volume。构建完成后,确保在统一卷下创建文件<环境名称> .x86_64和子目录<环境名称> _Data /。 

构建 Docker 容器

首先确保Docker引擎正在你的机器上运行。 需要注册登录Docker账户,命令行输入docker -v来确认Docker环境已启动。通过cd+路径进入项目的根目录:

注意:因为根目录下有Dockerfile来辅助构建。

 

然后docker命令来构建Docker容器:

docker build -t <image-name> .

注意:后面的“.”不能少,而且前面有个空格。


将<image-name>替换为Docker映像的名称,例如:balance.ball.v0.1。

 

构建开始


第一步就是在容器中安装Python库。 

 

第二步升级apt-get,第三步导入安装需求表(即ML-Agents需要的TensorFlow及相关工具链)。

 

一系列安装完成,容器构建结束。

 

运行Docker容器

使用命令行在项目根目录运行以下docker指令:

docker run --name <container-name> \

           --mount type=bind,source="$(pwd)"/unity-volume,target=/unity-volume \

           <image-name>:latest <environment-name> \

           --docker-target-name=unity-volume \

           --train \

           --run-id=<run-id>


相关参数说明:

  • <container-name>:容器名称,用于标识容器(以防中断和终止容器)。 这是可选的,如果没有设置,Docker会生成一个随机名称。 请注意,对于Docker镜像的每次运行,这必须是唯一的。

  • <image-name>和<environment-name>:分别引用图像和环境名称。

  • source:引用你的主机操作系统中将存储Unity可执行文件的路径。

  • target:指示Docker将源路径挂载为具有该名称的磁盘。

  • docker-target-name:指示ML-Agents Python软件包它可以读取Unity可执行文件并存储图形的磁盘名称。因此这个与target相同。

  • train和run-id:传递给learn.py的ML-Agents参数。train 训练算法,run-id用于标记每个实验的唯一标识符。

 

例如这里创建的ML-Agents-3DBall项目,命令示例如下:

 

ML-Agents机器学习训练开始。

 

代码化训练开始。

 

ML-Agents-3DBall项目机器学习训练成功。训练完的Model:ML-Agents-3DBall_ML-Agents-3DBall_first_trial.bytes。

 

中途中止方法

如果你对培训进度感到满意,则可以使用以下命令在保存状态的同时停止Docker容器:

docker kill --signal=SIGINT <container-name>


<container-name>是在先前的docker run命令中指定的容器的名称。在这个演示项目中即ML-Agents-3DBallContainer.first.trial。如果你没有指定,你可以通过运行docker container ls找到随机生成的标识符。

 

验证model


将生成的Model文件放到Unity ML-Agents → Examples → 3DBall → TFModels目录中。

 

调整 Brain 下的 type 为 Internal,选择 Graph Model 为之前生成的 Model。

 

运行验证。从下图看看见验证已经成功。

 

小结

运用Docker可以快速方便的帮助我们搭建ML-Agents所需的机器学习环境,无需我们自行设置诸如Python、TensorFlow等功能。虽然作为实验性的解决方案,它还存在一些缺陷,但是相信在不久的将来我们Unity能提供更好更便利的机器学习解决方案,大大降低开发者的技术门槛。


更多关于机器学习的内容



官方活动

订阅Unity Plus加强版,三重好礼等待您! (最后2天)

时间:截止到3月31日 线上促销

促销地址:https://store.unity.com/cn/offer/plus-triple-boost


Unite Beijing 2018 及 Training Day

活动信息:5月11-13日 北京国家会议中心

售票官网: http://unite2018.csdn.net/  或者直接扫描下图二维码进行购票!


点击“阅读原文”访问Unity官方社区 !

 
Unity官方平台 更多文章 缓存服务器Cache Server 6.0发布 Unity for Magic Leap技术预览版推出 Asset Store|高端视觉效果资源推荐 Unity机器学习代理ML-Agents v0.3 Beta版发布 今晚8点直播 |Unity艺术工具相关功能详解
猜您喜欢 二期培训课程结束,13人毕业。 五分钟搞定Bash功能与使用技巧 HTML5峰会战略结盟Google,开启HTML5最好的时代 少有人走的路II:与心灵对话 PHP中exec、system等函数调用linux命令问题