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找到随机生成的标识符。