Unity OTC参赛全纪录 | 2.GCP搭建

你好,我是郑洪智,你的技术探路者。

洪流学堂公众号回复OTC,关注比赛全纪录。

Unity官方推荐了GCP(Google Cloud Platform,谷歌云平台)来训练模型,新注册会有$300的免费额度。昨天搞的过程中遇到了点问题,就先跳过了,今天终于把所有的坑给填平了。

GCP的部署过程主要按照文档一步一步来:
https://github.com/Unity-Technologies/obstacle-tower-env/blob/master/examples/gcp_training.md

下面主要把主要的坑记录一下。

0. 注册GCP账号

注册自行注册,没什么好说的。如果已经有google账号了就可以直接用。

需要用到支持外币的信用卡。

不过我中间遇到一个问题,google让我验证身份。多了一步验证的环节,选地区里面没有中国大陆,选了香港,传了身份证和信用卡的图片,大概过了一个小时审核通过。

1. 打开市场

Unity OTC参赛全纪录 | 2.GCP搭建_第1张图片

2. 搜索Deep Learning VM

Unity OTC参赛全纪录 | 2.GCP搭建_第2张图片

点击启动:

Unity OTC参赛全纪录 | 2.GCP搭建_第3张图片

3. 配置VM

有两个需要注意的地方:

  1. GPU按照Unity文档的推荐,选择T4/P4就够用,关键是费用低。
  2. 下面要勾选上Install NVIDIA GPU driver automatically on first startup?

其他看图中保持默认即可。

Unity OTC参赛全纪录 | 2.GCP搭建_第4张图片

接下来我这就没那么顺利了,部署的时候报错,创建了几次都是:
“tensorflow”存在资源警告 tensorflow-1-vm: {"ResourceType":"compute.v1.instance","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"errors":[{"domain":"usageLimits","message":"Quota 'GPUS_ALL_REGIONS' exceeded. Limit: 0.0 globally.","reason":"quotaExceeded"}],"message":"Quota 'GPUS_ALL_REGIONS' exceeded. Limit: 0.0 globally.","statusMessage":"Forbidden","requestPath":"https://www.googleapis.com/compute/v1/projects/zhzytb5/zones/us-west1-b/instances","httpMethod":"POST"}}

看了GCP的很多文档,才发现免费试用版(free-tier)不支持使用GPU,可以在GCP console首页右上角点击upgrade进行升级。

文档如下:
https://cloud.google.com/free/docs/gcp-free-tier#how-to-upgrade

看完文档后发现我早就手贱升级过了:

  • 不升级之前,额度用超了也不会自动收费,但是有些资源不能使用
  • 升级之后,资源用超了会自动从信用卡扣费

然后才发现是配额的问题,我的账户上没有全局GPU配额,也就是说创建虚拟机不能有GPU。按文档来说升级完账户默认会有一个GPU配额,但是不知道为什么我的账户没有。

打开配额的页面,按如下图所示申请配额,申请完需要等待人工审核:

Unity OTC参赛全纪录 | 2.GCP搭建_第5张图片

接下来就是等待google的邮件通知。

大概过了一个多小时,收到邮件说配额已经给了,咱们接着搞。

还是按之前的老方法创建VM,这次没啥大问题了,有个警告,我们先忽略它,看看后面会不会有啥问题。

Unity OTC参赛全纪录 | 2.GCP搭建_第6张图片

4. SSH它!

点击下图中SSH,就可以通过web ssh连接到这台服务器。

Unity OTC参赛全纪录 | 2.GCP搭建_第7张图片

看见这个界面了,不容易:

Unity OTC参赛全纪录 | 2.GCP搭建_第8张图片

接下来继续按照Unity的文档进行操作:

5. 安装XServer

链接是:
https://github.com/Unity-Technologies/obstacle-tower-env/blob/master/examples/gcp_training.md#set-up-xserver

按照文档一路通畅,但好事不长久,执行下面两行代码时出错了:

sudo /usr/bin/X :0 &
export DISPLAY=:0

报错主要是:

Fatal server error:
(EE) no screens found(EE) 

如下图:


Unity OTC参赛全纪录 | 2.GCP搭建_第9张图片

查阅github issues,确实有一个同样的issue,但是没有答案。
https://github.com/Unity-Technologies/obstacle-tower-env/issues/51

只能回头重新梳理一下所有执行过的命令。果然!还是不好使!

开始查看所有的log,搜索aicroud和github issues都没有找到答案,只能根据报错google。报错最核心的一句是:NVIDIA(GPU-0): UseDisplayDevice "None" is not supported with GRID

果不其然,找到了类似的问题,经过试验后,这也正是答案:
链接:https://github.com/agisoft-llc/cloud-scripts/blob/master/fix_xorg_conf.py

解决办法:删除或者使用#注释掉/etc/X11/xorg.conf文件的ServerLayout 和 Screen 两个部分。

然后再执行命令就可以了,包括后续的测试命令,如下图所示:

Unity OTC参赛全纪录 | 2.GCP搭建_第10张图片

然后接着按文档来,一路顺利,又遇到一个报错:
ImportError: No module named 'atari_py'

这个一看报错是python少了一个包,按理说不应该啊,往上翻了翻文档,原来是我选择性忽略了中间一步。。。

sudo apt update && sudo apt install cmake zlib1g-dev
pip3 install absl-py atari-py gin-config gym opencv-python

如果你也遇到了问题,你需要首先回去看看是不是选择性忽略了哪一步。如果确定没有再去寻找其他答案。

经过我们坚持不懈地努力,终于跑起来了:

记住按下Ctrl + A, Ctrl +D可以从Screen里面出来,就可以退出terminal,并且程序还在后台运行。

6. 访问tensorboard

下面是如何访问tensorboard,为了一劳永逸,直接在GCP中修改了防火墙,添加了一条防火墙规则,是这个样子。

添加防火墙规则的时候注意那个目标标记deeplearning-vm,这个是咋来的呢?

Unity OTC参赛全纪录 | 2.GCP搭建_第11张图片
image.png

点开你的虚拟机就能看到:

image.png

添加过后,在terminal里面执行:

tensorboard --logdir=/tmp/dopamine

就可以通过虚拟机的公网ip访问tensorboard了。

记录的间隔有些久,我这个大概训练了2个小时才这样,好像是2个小时才记录一次数据。

Unity OTC参赛全纪录 | 2.GCP搭建_第12张图片

总结

今天将整个GCP环境搭建好了,不过网络的原因,在GCP上迭代太慢了,还是需要在本地把模型测试个7788,昨天说今天要看论文也还没有看完,要继续加油了。

洪流学堂公众号回复OTC,关注比赛全纪录。

你可能感兴趣的:(Unity OTC参赛全纪录 | 2.GCP搭建)