-
简介
想进行深度学习的实验,但是没有计算资源?那当然先选择租个 GPU 主机耍耍啦~
下文将介绍本地登录远程主机,运行深度学习实验的完整过程。此次实验旨在快速完成整个过程,只涉及几个简单的命令,同时以形象的实验结果来感受深度学习的魅力。
本次实验环境为 Mac + 美团云
-
完成主机搭建
在美团云中选择 GPU 云主机,目前的类型为 Telsa M60 ,记得勾选预装深度学习框架!之后的登录方式选择 密码登录 ,其他无需改动。
搭建完成之后在美团云的控制台中显示的情况如下:
-
本地登录
打开 Terminal ,使用 ssh 命令实现远程登录,格式如下:
$ ssh <remote user>@<remote machine>
在这次操作中,根据云主机的用户名和 IP 地址,命令如下:
$ ssh root@43.241.212.70
在第一次登录的时候会有提示:Are you sure you want to continue connecting (yes/no)?这个时候选择 yes 就好,之后会要求你输入密码,那么输入自动生成的密码就可以了,这次操作中就是 79p5CbZ5Zux9,直接复制粘贴过去。登录成功后就可以在本地对远程的主机进行操作啦。
-
开发环境分析
由于之前选择了预先安装深度学习框架,环境搭建的任务这种烦人的任务已经解决啦!
输入 # python
可以看到该环境下 Python 是 2.7 版本的。
pip install pandas
会报错,根据提示修改命令就可以安装了。
-
传输文件到云主机
GPU 主机比较贵,运行不运行都要收费,所以我的选择就是先在本地把代码调试一遍,再上传到主机运行。打好压缩包之后,在本地使用 scp 命令传输:
$ scp <local file> <remote user>@<remote machine>:<remote path>
在本次操作中,我的文件放在本地的桌面上,准备传到云主机的 home 文件夹里,命令如下:
$ scp ~/Desktop/carvana.zip root@43.241.212.70:/home
需要注意的是,在 IP 地址之后有一个冒号 ' : ' 落了会报错。
之后终端里就会显示传输进度,成功后再到主机的 home 文件里就会看到传输过来的压缩包了。
同时也可以在本地使用该命令将云主机的文件传到本地:
$ scp <remote user>@<remote machine>:<remote path> <local file>
-
深度学习实验
上面传输的文件 carvana.zip 来源于Kaggle 上的一个竞赛:Carvana Image Masking Challenge 这个竞赛要求参赛者使用算法将图片中汽车的背景去除,介绍的图片如下:
分类的任务玩多了,觉得这个很有意思,于是我选择了这个来实验,还有个 motivation : 人物背景去除 可以了解一下。
我这次的实验代码和思路主要参考的是 Keras starter 的解决方案,我试着在现在这个环境下装 opencv ,但是碰到了很多 bug,懒惰的我选择了Keras 的 ImageDataGenerator ,这个 Keras 的包十分方便,设置简单的几个参数就可以进行 Data Augmentation 以及图像的 resize,同时自动将目录下的图片文件分类,生成迭代器以便给模型喂数据。
下面是我做的一个简单的实验的结果,使用了比较小的模型,仅仅只跑了十多次 epoch(就这个实验的测试来说···大约 230s 左右 GPU 可以跑一轮,CPU上我过了一个多小时第一轮都还没跑完···):
对于我这种新手来说呢,结果挺出乎我意料的,感觉还不错,但是明显还有很大的改进空间!这个实验效果很直观,一下就展示了深度学习的魅力,比分类任务要激动人心得多,有了这样的 motivation,才有动力继续努力下去!具体的代码地址:实验代码
-
改进登录环节
之前的介绍的命令足够让我们能够完成实验的整个过程,但是实际的操作的体验并不好,每一次登录都需要输入 IP 地址和密码,特别这个密码特别长,下面是简化这些繁琐过程的操作。
-
添加 DNS 解析
只需要在 hosts 文件里添加对应的 IP 地址和名称就可以根据名称解析出 IP 地址。
$ vim /private/etc/hosts
添加如下 remote 的信息:
之后我就可以用
$ ssh root@remote
进行登录了,下面是省去密码输入步骤的操作。
-
ssh 免密码登录
首先在本地生成 ssh 密钥 $ ssh-keygen
,这个命令会在 ~/.ssh/ 下生成密钥,之后再执行以下命令:
$ ssh <remote user>@<remote machine> 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
之后再次登录就不需要输入密码了。