在 Google 云搭建深度学习平台

大家都知道,Google有一个很方便的 Colab ,而且到目前为止,还是免费的,并且 GPU 和 TPU 也是免费的。那为什么还要自己搞呢?因为 Colab 每个 session 只能用12小时,之后环境和数据不会保留,并且也不能进一步自定义配置和性能。Google 云给新注册的用户提供了$300 USD的赠金,非常适合学生党和个人的小项目。下面就开始体验吧。

创建用户

如果还没有 Google Cloud 用户,前往 Google Cloud 注册一个。这里需要一张 Visa / Mastercard 信用卡,没有的话我也帮不了你..然后$300 USD额度就到手了。

申请 GPU 额度

一开始的用户是没有 GPU 额度的,就算创建了带 GPU 的实例,也不能启动。请参照申请提升配额的步骤提交申请,把 GPU 的 0 改为更大的数值。在此之前,平台应该会让你把用户升级为付费账号,也就是说,如果送的额度用完了,就会从你的信用卡扣钱(注意要省着用了)。申请提升配额的页面中写可能要一两天来处理申请,但是我提交之后一小时内就批了。

创建实例

在云控制台,选择 Compute Engine,打开VM实例,点击“创建实例”,选择合适的区域(有的区域会没有GPU),“机器类型”点“自定义”,选 CPU 的数量和内存的大小,下面的 GPU 按实际需要选择。硬件配置以后都可以改的(需要先停止实例),现在没定下来没关系。

页面往下拖一点,“启动磁盘”一定要改,点击“更改”,选择想要的镜像(省下大量环境搭建的时间),还可以改一下磁盘的大小,不然太小不够用。我这里选了一个 tensorflow 的镜像,我用的时候是没有自带 anaconda 的,而 pytorch 的镜像就有。

下面的“防火墙”部分,为了方便起见,勾选“允许HTTP+HTTPS流量”。如果未来要添加防火墙规则,可在“VPC网络-防火墙规则”中手动添加。
没什么问题就可以创建了。

SSH Key

为了连接到实例,而且我也不想安装额外的软件,我选择使用 SSH 连接而不使用 gcloud 命令行。在 Compute Engine 中找到元数据,再选择 SSH 密钥选项卡,添加自己的 SSH 公钥,就可以 SSH 登录实例了。如果不行, 就重启一下实例。

Jupyter Notebook

之后的使用过程中,很可能会用到 Jupyter Notebook,而这个镜像已经自带了,并且开机自启。可以执行 ps 等命令查看是否已经启动了 Jupyter Notebook。发现已经以 jupyter 用户启动了 jupyter-lab,对应的命令行为:

/usr/bin/python3 /usr/local/bin/jupyter-lab --config=/home/jupyter/.jupyter/jupyter_notebook_config.py

使用 sudo 权限修改 /home/jupyter/.jupyter/jupyter_notebook_config.py,具体各参数可参考官方文档,我把它改成了这样:

c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
# 记得手动添加防火墙规则,允许访问对应端口
c.NotebookApp.port = 8000

# 密码,下文解释
c.NotebookApp.password = 'sha1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# disable_check_xsrf 默认为 False,但是为什么会导致不能在 jupyter lab 中下载文件?
c.NotebookApp.disable_check_xsrf = True
c.NotebookApp.allow_origin = '*'
c.NotebookApp.allow_remote_access = True

# 下面是 https 证书,如果没有就不写,就使用 http 连接;写了就使用 https 连接
c.NotebookApp.certfile = '/xxxx/path/cert.cer'
c.NotebookApp.keyfile = '/xxxx/path/key.key'

根据文档的介绍,可以在 python 中执行

In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'

生成密码,然后把密码的 hash 字符串复制到 jupyter_notebook_config.py 中。

最后,重启实例。在浏览器中访问 http[s]://[实例的外部IP]:8000/ 就可以使用了:

相关参考

  1. https://github.com/cs231n/gcloud
  2. https://blog.csdn.net/d123456ddq/article/details/80239171

发表评论