什么是 Google Colab?


  • Colaboratory是一个 Google 研究项目,旨在帮助传播机器学习培训和研究成果。
  • 是一个Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。
  • Colaboratory笔记本存储在 Google 云端硬盘中,并且可以共享。Colaboratory 可免费使用。
  • 利用Colaboratory ,可以方便的使用Keras,TensorFlow,PyTorch,OpenCV等框架进行深度学习应用的开发。

总而言之,GPU是深度学习开发的重要硬件需要,而 Google Colab相当于给我们提供了一个功能强大,使用方便,最重要是可以免费的GPU资源一段时间!如果自己的电脑配置不是很好,可以免费使用一下这个上面的硬件资源,在训练完毕后将权重文件与训练日志下载下来,本篇博客记录一下使用方式,供以后复习使用。

Colab中支持的硬件资源(有时间限额,目前普通用户只能用T4)

colabgpu超过限额_colabgpu超过限额


云端训练,本地预测!(可以看出硬件很给力60000张图片的数据集只用两小时就训练了200轮)

colabgpu超过限额_数据_02


colabgpu超过限额_云端深度学习工具_03


本地查看损失!

colabgpu超过限额_数据_04

注意点1:挂载硬盘到虚拟机(并上传自己的数据集)

登录上Colab之后,每个人都会被分配15G大小的硬盘(类似于百度网盘给你的空间),这里要记住,真个Colab只有这15G空间真正属于你,其余文件夹的内容不属于你。

colabgpu超过限额_数据集_05


这里选择的是GPU资源,以下是临时分配的一台虚拟机。

colabgpu超过限额_数据集_06


点击上方小图标可以把你的硬盘挂载到这台虚拟机(再次重申,只有你硬盘15G的空间属于你,一旦卸载或者退出,虚拟机会被回收,数据也会丢失)。只要15G硬盘中的数据可以保留下来!

colabgpu超过限额_数据集_07


挂载完之后可以使用Python脚本创建、删除、修改文件,可以使用一些简单的命令操作系统。虚拟机内的操作就跟操作我们自己的电脑很像,大家可以在网上找一下具体的使用指令。

如:解压缩指令 解压/content/data.zip到content

!unzip "/content/data.zip" -d "/content/"

进行深度学习训练,肯定需要用到数据集,如果是含有几万张图片的数据集,直接上传比乌龟的速度还慢,我们可以先在自己的电脑将数据集打包,将压缩包上传到网盘中,然后解压训练。

压缩包放在content文件夹下解压会超级快,就像在自己的电脑中解压一样!如果是放在硬盘中解压那么速度会慢上不少(并且有网络延迟可能会丢失数据,亲测太痛了),除此之外如果解压到自己的硬盘中,在进行训练时也会因为网络延迟出现读不到数据的情况。

正确的做法是先将压缩包移到虚拟机内部,然后直接在虚拟机内部解压,训练时直接读取虚拟机内的数据。(速度与准确并存)

注意点2:训练模型时突然中断

Colab还是挺良心的,一周大概能免费用12小时左右,由于他们的硬件比较高级,在训练时速度嘎嘎快。

colabgpu超过限额_colabgpu超过限额_08


原因1:数据放在了硬盘中

如果将数据集放在自己的硬盘空间内,在训练模型时从硬盘路径下读取数据集,大概率你会碰到某一份数据丢失报错的情况,并不是因为我们的数据真的丢失了,有可能因为频繁读写硬盘、网络阻塞等原因。通俗点讲就是硬盘IO与虚拟机不匹配,我猜测训练时大概率数据流向如下图所示。

colabgpu超过限额_云端深度学习工具_09


知道原因之后改进起来就很简单了,我们直接将数据集备份一份,硬盘中放一份压缩包,在复制一份到虚拟机,然后直接在虚拟机中解压并读取其中数据。

原因2:训练时长达到限额
此时可能会遇到一个新问题,当我们并不知道大概需要训练多长时间时,有可能会因为免费使用时间达到限额而强制断开连接(今天就是被摆了一道,只差5轮就训练200轮结束,结果被强制断开连接,所有的数据都丢失了),这时就需要我们定时将较好的权重文件放进硬盘中。由于目前阶段比较忙,没有手动去实现,这里提供一下思路,在训练的过程中可以每10轮或者15轮加入一段移动文件的代码,将目前所得到损失最小,准确率最高的权重文件移动到硬盘(期间做好异常处理)。
移动文件的代码可以使用下面一个库:

import shutil
shutil.copy2("/content/pth/resnet18_10.pth","/content/drive/MyDrive/Colab Notebooks/resnet/resnet_model/")

有了这个整体的流程,使用Colab训练自己的模型应该没有什么问题了。赶紧BP T4 GPU哈哈哈。训练过程中唯一的不足就是test_loss,越训练越高,以后再慢慢研究吧。

colabgpu超过限额_colabgpu超过限额_10