ML-Agents 使用Docker 运行 ML-Agents

原文链接:https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Using-Docker.md

ML-Agents使用Docker 运行 ML-Agents

目前我们为希望使用Docker进行训练或推理的Windows和Mac用户提供了解决方案。这个选项对那些想避免自己安装Python和TensorFlow的人来说可能很有吸引力。目前的配置强制使TensorFlow和Unity只依靠CPU进行计算。因此,我们的Docker仿真不使用GPU而使用Xvfb进行可视化渲染。 Xvfb是一种实用程序,它使ML-Agent(或任何其他应用程序)能够虚拟地进行渲染,即它不会假定运行ML-Agents的机器具有附加的GPU或显示器。这意味着如果环境中涉及Agent使用基于摄像头进行视觉观察可能会变慢。

 

要求

  • Unity Linux Build Support Component
  • Docker

配置

  • 下载Unity安装程序并添加Linux Build Support组件
  •  如果您没有在您的机器上安装它,请下载并安装Docker
  • 由于Docker在与主机隔离的环境中运行容器,需要使用主机中的一个目录用于共享数据,例如, Unity可执行文件,训练文件和TensorFlow图形。为了方便起见,我们为此目的在存储库的根目录下创建了一个空的unity-volumn目录,当然也可以随意使用任何其他目录。本指南的其余部分假设unity-volumn目录是使用的目录。

用法

 使用Docker 运行 ML-Agents涉及三个步骤:使用特定标志构建Unity环境,构建Docker容器,最后运行容器。如果您不熟悉为ML-Agents构建Unity环境,请首先阅读我们的3D平衡球示例指南入门指南。

建立环境

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

  • Target Platform设置为Linux
  • Architecture设置为x86_64
  • 如果环境不包含视觉观察,则可以在此处选择headless选项。

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

 

构建Docker容器

 首先,确保Docker引擎正在您的机器上运行。然后通过在存储库的顶层调用以下命令来构建Docker容器:

docker build -t <image-name> .

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

 

运行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用于标记每个训练的唯一标识符。

对于3DBall环境,例如这将是:

docker run --name 3DBallContainer.first.trial \
           --mount type=bind,source="$(pwd)"/unity-volume,target=/unity-volume \
           balance.ball.v0.1:latest 3DBall \
           --docker-target-name=unity-volume \
           --train \
           --run-id=3dball_first_trial

 有关Docker安装的更多详细信息,请查看Docker中的这些文档。

 

停止容器和保存状态

 如果您对训练进度感到满意,则可以在使用Ctrl + C⌘+ C(Mac)或使用以下命令保存状态时停止Docker容器:

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

 <container-name>是在先前的docker run命令中指定的容器的名称。如果你没有指定,你可以通过运行docker container ls找到随机生成的标识符。

posted on 2018-04-28 13:15  豆耳朵  阅读(528)  评论(0编辑  收藏  举报

导航