最近想玩一玩深度学习,需要训练一些 yolo 之类的网络进行对象检测,苦于我的本子没有独显又没有实验室的机器给用,想起之前看到的 google 提供免费 GPU 用来学习的消息,就尝试一下。
利用Jupyter Notebook测试Google Drive的GPU
首先登录 Google Drive:https://drive.google.com。访问 google 需要一些不可描述的操作,此处不描述。
在左侧选择 新建-更多-Colaboratory,如果没有就选择“关联更多应用”并搜索添加 Colaboratory。
关联更多应用:
新建-更多-Colaboratory:
然后会新弹出一个标签页。
点击这里,可以对笔记本重命名
启动GPU
点击 修改-笔记本设置,在弹出框内 硬件加速器选择GPU并保存,即可启用 GPU。
在方格内可以写 python 语句,也可以写以!开头的 linux 命令:
tf.test.gpu_device_name() 的输出为 ‘/device:GPU:0’ 即已使用 GPU 加速。可以看到 google 提供的显卡是 Telsa K80,挺不错。
*注意,由于 cd 命令应当被实现为 shell 内建命令,而此处并不是 shell,输入的命令大概是 fork 子进程执行的形式,因此在这里使用 cd 命令无法改变当前 pwd。如何切换工作目录后文会讲到。
执行一个Google Drive里的项目
一个 py 脚本文件只能做一些微不足道的小事,而更多的时候我们需要运行一整个项目得到想要的结果。这就需要把 google drive 里的文件挂载到 notebook 的服务器中供我们访问。
挂载 Google Drive
首先把整个项目工程上传到 Google Drive 中,然后在该项目文件夹下(执行的主函数文件同一目录)新建一个 run.ipynb。新建方法与之前一样,在项目文件夹中 右键-更多-Colaboratory。
然后,在新建的笔记本中挂载 Google Drive:
from google.colab import drive
drive.mount('/content/drive/')
执行以上语句后,会出现一个链接。点击链接,获取并键入 authorization code,回车,等待圈圈转完就能在左侧刷新,看到挂载的Drive
挂载 Drive 网上还有另一种方法,语句很多很复杂,但这个好像没啥区别。。
对于这个服务器而言,整体目录结构是这样的:
顶级目录为 content,我们进入笔记本后无论笔记本在哪,当前工作目录都是 /content。/content下默认有 sample_data 目录,其中包括运行示例程序的一些必要数据文件。我们的 Google Drive 作为一个 My Drive 文件夹挂载在 /content/drive 文件夹下。我的项目是“我的云端硬盘”里的一个tiny-yolo文件夹,因此我的项目的路径应该为 /content/drive/My Drive/tiny-yolo。这里大家试一试就明白了,比我说啥都快。
切换工作目录
我的工程目录结构大致为
tiny-yolo
|- data
|- model
|- util
train_yolo.py
run.ipynb
cd 命令在这里不可用,因此需要用 python 语句切换工作目录:
import os
os.chdir('/content/drive/My Drive/tiny-yolo')
os.getcwd()
具体路径名取决于你的工程文件夹名字和主函数所处的位置。
运行项目
输入语句并执行
!python3 train_yolo.py
然后它就会执行了。
注意事项
- 为了保证资源的合理分配,google 会按照一定机制将服务器回收:它会一定时间后自动回收已连接但闲置的服务器,和有运行代码但未连接的服务器。所以想挂机跑代码,要保证与服务器保持连接(不掉线),否则一早起来可能就会发现它被悄悄的回收了。稍微掉线个几分钟就连回去是没什么问题的。
- 在回收服务器后,写到 My Drive 以外其他文件夹下的文件都将被删除,下次再连接就是一台崭新的服务器了。
- 挂载 Drive 后再向 Google Drive上传文件,同步到 notebook 那边会有一定的延迟,大概等个几秒钟到半分钟不等,多刷新几下就会出现了。删除文件也是。然而在删除 a.py 后,如果没等 notebook 那边反应过来就重新再传一个 a.py,notebook 那边很可能就出现一个被重命名的文件 a(1).py。。难道是我姿势不对??
- 有一次我上传近 3000 张图片作为训练集到 Drive,上传成功,但是 notebook 没读全,!ls “/content/drive/My Drive/tiny-yolo/data” | wc -l 看一眼花式少文件,我也不知道为啥。。总是迷之过会 (hen) 儿 (jiu) 就好了。。搞得我也是很醉。
总的来说,这玩意儿还是很好用的,比我的笔记本训练的快多了,可以说是我们缺乏资源的学生党从浅度学习转向深度学习的一大利器。