使用ChainerRL和Azure Notebooks,在Minecraft中进行深度强化学习实践

这篇文章是在@keisuke-umezawa先生的以下文章基础上撰写的。
https://qiita.com/keisuke-umezawa/items/fcf5d00474e244217a5e

我的世界

大家好,大家都熟悉Minecraft。我之前不知道,原来Minecraft也被简称为“マイクラ”呢。作为官方的宣传视频,也有类似以下的内容。

请用中文重新表达以下内容(仅需一种翻译):

https://t.co/gITUej4Tmb— Keisuke Umezawa (Chainer Evangelist) (@kmechann) 2018年12月12日

此外,在Minecraft Japan Wiki上也有如下所述。

Minecraft是个由Notch(本名:Markus Persson)于2009年5月10日开始开发的沙盒建造游戏。这个世界充满了复古像素风格的方块,玩家可以自由地创造建筑和其他东西。你可以探索未开发的土地,探险洞穴,与怪物战斗,培养植物,得到新的方块并进行布置,创造出各种各样的东西。你的创造力决定了你可以建造从小房子到像素画、地下基地以及巨大城堡的一切。

在多人模式中,你可以与其他玩家合作建造巨大建筑物,也可以进行玩家对战(PvP)。

正如这个描述中所提到的,有几个关键词是与当前强化学习相适应的。

    建物やその他のものを自由に作ることできる
    色々なゲームができる
    マルチプレイできる

我认为正是因为Minecraft具有这些特性,才激发了在Minecraft中进行强化学习的动机。

马洛项目

在这个实践中,我们将使用Minecraft作为一个模拟环境来进行深度强化学习。目前,有一个深度强化学习比赛使用了基于Minecraft的环境,叫做MARLO。这次我们将使用名为marLo的OpenAI’s Gym兼容的Minecraft环境来参加这个比赛。由于兼容OpenAI’s Gym接口,因此可以轻松地使用强化学习框架,如ChainerRL(虽然并不完全,比如不能使用用于保存视频的wrapper)。

在marLo中,提供了以下环境,例如,您可以使用深度强化学习创建一个能够在熔岩上行走的AI。本次将以MarLo-FindTheGoal-v0进行说明,然后请大家挑战新的任务。

实践内容

此教程是根据”https://qiita.com/keisuke-umezawa/items/fcf5d00474e244217a5e”创建的。

要求

截至至2018年12月14日,需要以下内容:

    Python 3.5+ environment with

    Chainer v5.0.0
    CuPy v5.0.0
    ChainerRL v0.4.0
    marlo v0.0.1.dev23

在Azure中进行环境设置

※ 若要使用GPU,请具备Azure的按需计费订阅。如果只使用CPU,也可在Azure免费试用版上构建。
※ 还有关于在其他环境下构建的文章可供参考。

使用Azure Cloud Shell创建虚拟机

1. 访问 https://portal.azure.com/#home

    Microsoft のアカウントを持っていない場合は作成してください
    今までにAzureを使ったことが無い方は、こちらから無料アカウントをサインアップしてください。

请确认右上方,并确保已进入要使用的目录。

image.png

如果您是个人账户创建的话,在默认目录下没有问题。

请点击以下,启动Cloud Shell。

image.png

请点击Bash(如果您以前使用过Cloud Shell,则可以跳过此步骤)。

image.png

如果尚未完成Azure注册,则会显示如下画面。请点击“创建Azure订阅”,进行免费试用版注册。

image.png

此外,如果没有存储空间,将显示如下内容。如果您拥有免费试用版订阅,请选择免费试用版并点击创建存储空间。

image.png

5. 打开Cloudshell的控制台。请点击□按钮,将控制台界面放大。

image.png

6. 创建资源组(如果已经存在则跳过)

如果您已经创建了资源组并打算使用它,那么您可以跳过本部分。

可以创建资源组来整理本次使用的资源(如VM和网络)。
按以下方式创建名为“malmo”的资源组(如果要使用其他名称,请将“malmo”替换为您自己设置的名称)。

az group create -g malmo -l eastus

当成功时,将显示如下内容。

image.png

7. 生成密码

请按照以下方式输入,生成密码。

echo user name: ${USER}
VM_PW=`openssl rand -base64 12`
echo VM password: ${VM_PW}

请将用户名和密码记录在某个地方。

创建虚拟机

请使用Cloud Shell以以下方法在CPU实例上创建。
一旦启动实例,将会产生费用。如果不再需要,请停止它。
通常每月大约是4000日元左右(参考:价格)。

顺便提一下,Cloud Shell的存储以及虚拟机的存储即使在未启动时也会产生少许费用。

az vm create --location eastus --resource-group malmo --name ${USER}-vm \
 --admin-username ${USER} --admin-password ${VM_PW} \
 --authentication-type password \
 --public-ip-address-dns-name ${USER}  \
 --image microsoft-ads:linux-data-science-vm-ubuntu:linuxdsvmubuntu:latest \
 --size Standard_B2s

※ 不需要的是启动了CPU实例的人。

※ 不需要启动CPU实例的人。

※ 对于启动了CPU实例的人不是必要的。

※ 对于已经启动了CPU实例的人没有必要。

请在 Cloud Shell 上执行以下命令以创建 GPU 实例。

请注意,使用GPU实例的Standard_NC6型号,如果持续运行一个月将会耗费超过7万日元(参考价)。此外,免费试用版无法使用。

az vm create --location eastus --resource-group malmo --name ${USER}-vm \
 --admin-username ${USER} --admin-password ${VM_PW} \
 --authentication-type password \
 --public-ip-address-dns-name ${USER}  \
 --image microsoft-ads:linux-data-science-vm-ubuntu:linuxdsvmubuntu:latest \
 --size Standard_NC6

成功时会显示如下内容。请将以下的publicIpAddress记录下来。

image.png

如果使用上述的IP地址和最初创建的密码,即可通过SSH进行连接。
为了简化后续的操作,在本实践中我们将使用Azure笔记本(详见下文)。

如果在这里出现错误,可能性如下。

    VMの名前(–name ${USER}-VM)及び、DNS name (–public-ip-address-dns-name ${USER})が既に使われている(同じリソースグループ内で、ユーザー名が重複している)

    –name ${USER}-VMと–public-ip-address-dns-name ${USER}の部分を、–name ${USER}-VM2及び、–public-ip-address-dns-name ${USER}2 等として、重複を回避してください。

    Standard_NC6 が使えないサブスクリプションを使っている(無料試用版では使えません)

打开端口

请在Cloud Shell中运行以下命令,以便连接到Azure Notebooks并连接到名为noVNC的Web服务器以显示屏幕。这将打开三个端口:8000、8001和6080。

az vm open-port --resource-group malmo --name ${USER}-VM --port 8000 --priority 1010
az vm open-port --resource-group malmo --name ${USER}-VM --port 8001 --priority 1020
az vm open-port --resource-group malmo --name ${USER}-VM --port 6080 --priority 1030

连接Azure Notebooks

1. 克隆笔记本

请打开以下页面,并点击Clone按钮。

image.png

2. 直接计算的设置

为了连接之前创建的虚拟机,我们需要进行直接计算的设置。

请点击左上角的▽,然后点击“直接计算”,以显示设置界面。

image.png

请在这里输入刚刚记下的IP地址、用户名和密码。
请输入一个任意的名称,并点击验证。(端口无法更改。)

image.png

在这种情况下,可能会发生以下错误。在这种情况下,请点击几次验证按钮。

image.png

请按下“运行”按钮后,如果一切顺利,将显示如下内容。

image.png

3. 打开笔记本电脑

请点击marlo.ipynb,它将以如下方式显示。

image.png

然后,会显示如下的屏幕。

image.png

笔记本的执行

上面打开的界面是一个名为Jupyter Notebook的系统。
每一个方格被称为“单元格”,可以通过SHIFT + ENTER进行执行。
我们尝试执行最上面的单元格。

左边的 [ ] 部分会变成 [*]。这表示正在执行中。
当变为 [1] 时,输出将会显示,这表示执行已完成。

请从现在开始,阅读有关Notebook的说明。

请不要忘记在完成作业后停止或删除虚拟机。

停止、重启、删除虚拟机。

请务必在不需要时停止虚拟机。之后可以在同一台虚拟机上重新启动。
如果不停止,会产生费用。
停止、删除等操作有两种方法:使用Cloud Shell或使用门户网站。

使用云端 Shell

虚拟机的停止

请在不需要时务必停止虚拟机。稍后可以在同一虚拟机上重新启动。
如果不停止,将产生费用。

azure vm deallocate --resource-group malmo --name ${USER}-vm

暂停的虚拟机恢复运行

以以下方式,可以重新启动虚拟机。请注意,IP地址会发生更改。

azure vm start --resource-group malmo --name ${USER}-vm

可以按照以下方式检查IP

az vm list-ip-addresses --output table --name ${USER}-vm

删除虚拟机

用门户更方便进行删除操作。请参考以下内容。

通过门户网站停止或启动。

image.png

请点击下面链接,显示虚拟机列表。

image.png

请从列表中点击自己的虚拟机。如果有很多虚拟机,请在“按名称筛选”中输入自己的虚拟机名称。

image.png

从这里,您可以选择停止或开始。

image.png

删除虚拟机

创建虚拟机后,会创建多个资源,如磁盘等。请点击“所有资源”。

image.png

请点击 “按名称筛选”,输入自己虚拟机的名称,以显示与自己虚拟机相关的资源。

image.png

请在名字旁边的□处打勾,并按下“全选”和“删除”进行操作。

image.png

请确认后,输入“是”进行删除。

请注意不要删除与关系无关的资源!

bannerAds