Colab是什么?

Colab = Colaboratory(即合作实验室),是谷歌提供的一个在线工作平台,用户可以直接通过浏览器执行python代码并与他人分享合作。Colab的主要功能当然不止于此,它还为我们提供免费的GPU。熟悉深度学习的同学们都知道:CPU计算力高但核数量少,善于处理线性序列,而GPU计算力低但核数量多,善于处理并行计算。在深度学习中使用GPU进行计算的速度要远快于CPU,因此有高算力的GPU是深度学习的重要保证。由于不是所有GPU都支持深度计算(大部分的Macbook自带的显卡都不支持),同时显卡配置的高低也决定了计算力的大小,因此Colab最大的优势在于我们可以“借用”谷歌免费提供的GPU来进行深度学习。Google Colab支持Pytorch,Tensorflow,Keras,Opencv等。
综上:Colab = "python版"Google doc + 免费GPU。

Colab相关的概念

Jupyter Notebook:在Colab中,python代码的执行是基于.ipynb文件,也就是Jupyter Notebook格式的python文件。这种笔记本文件与普通.py文件的区别是可以分块执行代码并立刻得到输出,同时也可以很方便地添加注释,这种互动式操作十分适合一些轻量的任务。
具体关于Jupyter Notebook的信息可以查看下面官网的链接:https://jupyter.org/
代码执行程序:代码执行程序就是Colab在云端的"服务器"。简单来说,我们先在笔记本写好需要运行的代码,连接到代码执行程序,然后Colab会在云端执行代码,最后把结果传回浏览器。
实例空间:连接到代码执行程序后,Colab需要为其分配实例空间(Instance),可以简单理解为运行笔记本而创建的"虚拟机",其中包含了执行ipynb文件时的默认配置、环境变量、自带的库等等。

使用前提

首先要可以上外网,其次要注册有谷歌的帐号。

1. Google Drive 创建Notebook文件夹

在Google Driver中创建文件夹用来存放Notebook,本部骤不是必须的,但是存放在一个固定的文件夹,方便操作,否则会分散到处都是。打开Google Drive,点击“新建”,先择“文件夹”即可:
Colab_Notebooks-1.webp

然后可以在该文件夹上点击右键,选择“打开方式” -》“+ 关联更多应用”,然后再弹出框中单击“Colaboratory”, 再点击“安装”:
Colab_Notebooks-3.webp
Colab_Notebooks-4.webp
Colab_Notebooks-5.webp
然后按照提示进行操作,安装完成后单击确定。
Colab_Notebooks-6.webp

新建一个Colab Notebook:

在空白处单击右键,选择"Google Colaboratory"。
Colab_Notebooks-7.webp

2. 配置Notebook

打开Colab notebook后需要做些配置,才可以充分使用Colab notebook.
笔记本界面:
Colab_Notebooks-24.webp
标题:笔记本的名称
代码块:分块执行的代码
文件浏览:Colab为笔记本分配的实例空间
代码执行程序:用于执行笔记本程序的服务器
代码段:常用的代码段,比如装载云端硬盘
命令面板:常用的命令,比如查找/替换
终端:文件浏览下的终端(非常卡,不建议使用)

2.1 重命名

Colab_Notebooks-8.webp
单击修改名称

2.2 设置GPU

单击顶部菜单“代码执行程序”——》“更改运行时类型”
Colab_Notebooks-9.webp
会弹出选项框,可以选GPU,TPU,或默认的使用CPU,
Colab_Notebooks-10.webp

2.3 Colab连接Google Drive

连接自己的Google Drive,从而可以使用Colab来训练自己的数据。首先是将数据上传到Google Drive.
添加如下代码连接Google Drive:

from google.colab import drive
drive.mount("/content/drive")

会弹出链接,点击,并按照提示进行授权完成,完成连接。
此时,可以查看自己的google云盘:

! ls "/content/drive/My Drive"

或点击左侧的文件图标:
Colab_Notebooks-11.webp
此外,还一种简单连接方式:
Colab_Notebooks-12.webp
到此,完成谷歌云盘与colab的连接。

2.4 数据的上传

在colab中可以使用命令进行数据下载和解压,如:

!wget ...
!unzip ...

也可以直接上传,点击进入要上传文件的目录,右击,会弹出上传选项:
Colab_Notebooks-13.webp

2.5 导入库

最新Colab默认是可以导入tensorflow和pytorch,默认的安装包可以通过如下命令查看:

!pip list

便会输出所有pip的包。如果没有可以通过命令安装:

!pip install xxx
!apt install xxx

以上这两命令都可以生效。

2.6 使用github或上传本地Notebook

可以从Github中导入笔记本。如果关联了Github账户,可以选择一个账户中的Project,如果其中有ipynb文件就可以在Colab中打开。注意:关联Github不是把Github中的项目文件夹加载到实例空间。更多使用方法参见Using Google Colab with GitHub。通过Colab使用github或本地Notebook,点击 文件->上传笔记本,然后在弹出的窗口中选择合适的选项:
Colab_Notebooks-14.webp

3. Notebook的保存和分享

所有在Google云端打开的文件都会自动保存。可以按需选择需要保存的位置:
Colab_Notebooks-15.webp
分享是:
Colab_Notebooks-16.webp

4. 管理会话Session

会话就是当前连接到代码执行程序的笔记本,通过点击“管理会话”即可查看当前的所有会话,点击“终止”即可断开代码执行程序。用户所能连接的会话数量是有限的,因此到达上限时再开启新会话需要主动断开之前的会话。
Colab_Notebooks-25.webp

5. Colab重要特性

在这一部分,我们进一步了解Colab平台的一些重要特性和使用Colab训练模型时的一些策略。

资源使用的限制

Google Colab为用户提供免费的GPU,因此资源使用必然会受到限制(即使是Colab Pro+用户也不例外),而这种限制无处不在。
有限的实例空间: 实例空间的内存和磁盘都是有限制的,如果模型训练的过程中超过了内存或磁盘的限制,那么程序运行就会中断并报错。实例空间内的文件保存不是永久的,当代码执行程序被断开时,实例空间内的所有资源都会被释放(我们在"/content"目录下上传的文件也会全部消失)。
Colab_Notebooks-26.webp
有限的连接时间: 笔记本连接到代码执行程序的时长是有限制的,这体现在三个方面:如果关闭浏览器,代码执行程序会在短时间内断开而不是在后台继续执行(这个“短时间”大概在几分钟左右,如果只是切换一下wifi之类是不会有影响的);如果空闲状态过长(无互动操作或正在执行的代码块),则会立即断开连接;如果连接时长到达上限(免费用户最长连接12小时),也会立刻断开连接。
Colab_Notebooks-27.webp
有限的GPU运行时: 无论是免费用户还是colab pro用户,每天所能使用的GPU运行时间都是有限的。到达时间上限后,代码执行程序将被立刻断开且用户将被限制在当天继续使用任何形式的GPU(无论是否为高RAM形式)。在这种情况下我们只能等待第二天重置。
Colab_Notebooks-28.webp
频繁的互动检测: 当一段时间没有检测到活动时,Colab就会进行互动检测,如果长时间不点击人机身份验证,代码执行程序就会断开。此外,如果频繁地执行“断开-连接”代码执行程序,也会出现人机身份验证。
Colab_Notebooks-29.webp
有限的会话数量: 每个用户所能开启的会话数量都是有限的,免费用户只能开启1个会话,Pro用户则可以开启多个会话。不同的用户可以在一个笔记本上可以进行多个会话,但只能有一个代码块开始执行。如果某个代码块已经开始执行,另一个用户连接到笔记本的会话会显示“忙碌状态”,需要等待代码块执行完后才能执行其他的代码块。注意:掉线重连、切换网络、刷新页面等操作也会使笔记本进入“忙碌状态”。
正常情况:
Colab_Notebooks-30.webp
忙碌状态
Colab_Notebooks-31.webp

如何合理使用资源?

  1. 将训练过后的模型日志和其他重要的文件保存到谷歌云盘,而不是本地的实例空间。
  2. 运行的代码必须支持“断点续传”能力,简单来说就是必须定义类似checkpoint功能的函数;假设我们一共需要训练40个epochs,在第30个epoch掉线了之后模型能够从第30个epoch开始训练而不是从头再来。
  3. 仅在模型训练时开启GPU模式,在构建模型或其他非必要情况下使用None模式。
  4. 在网络稳定的情况下开始训练,每隔一段时间查看一下训练的情况。
  5. 注册多个免费的谷歌账号交替使用

5. Colab使用技巧

有很多方法,能够提升我们的Colab使用效率。

5.1 Cell执行时间

通常,我们手动计算一段代码的开始时间和结束时间之间的差值来衡量所花费的时间。 Colab提供了内置功能来执行此操作。执行单元后,将鼠标悬停在单元运行图标上,您将获得执行时间的估计值。
Colab_Notebooks-17.webp

5.2 Colab快捷键

如果您熟悉Jupyter Notebook中的键盘快捷键,则它们不能直接在Colab中使用。但是我发现了一个可以在它们之间映射的思维模型。 只需在Jupyter中使用的任何键盘快捷键之前添加Ctrl +M。此经验法则适用于大多数常见用例。
Colab_Notebooks-18.webp
以下是此规则的一些显着例外,其快捷方式已完全更改或保持不变。
Colab_Notebooks-19.webp

5.3 查看函数帮助文档和源码

与IDE相似,您可以通过按Ctrl,然后单击一个类名来转到类定义。例如,在这里我们通过按Ctrl并单击Dense类名来查看Keras中Dense层的类定义。鼠标悬停上边则会弹出帮助文档。
Colab_Notebooks-20.webp

5.4 打开Github上的Notebook

Google Colab团队提供了正式的Chrome扩展程序,可直接在colab上在GitHub上打开笔记本。您可以从这里安装。安装后,单击Chrome插件的Colab图标直接将其打开。
另外,您也可以通过将[github.com]替换为[colab.research.google.com/github]来手动打开任何GitHub笔记本。例如:
https://github.com/fastai/course-v3/blob/master/nbs/dl1/00_notebook_tutorial.ipynb
转换成:
https://colab.research.google.com/github/fastai/course-v3/blob/master/nbs/dl1/00_notebook_tutorial.ipynb

5.5 Colab中运行Flask

使用flask-ngrok的库,您可以轻松在colab上运行的Flask Web应用。首先,您需要安装flask和flask-ngrok。

!pip install flask-ngrok flask==0.12.2

然后,只需要将flask应用程序对象传递给run_with_ngrok函数,它将在启动服务器时公开ngrok端点。

from flask import Flask
from flask_ngrok import run_with_ngrok

app = Flask(__name__)
run_with_ngrok(app)

@app.route('/')
def hello():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

你可以在该pyngrok软件包作者提供的内容进行体验。

5.6 集成tensorboard

像在jupyter notebook 中一样,可以在Colab中使用tensorboard。使用命令如下:

%load_ext tensorboard
%tensorboard --logdir logs

更多使用方法,参见https://colab.research.google.com/github/tensorflow/tensorboard/blob/master/docs/tensorboard_in_notebooks.ipynb。

5.7 查看硬件资源情况

在colab中我们需要了解CPU或GPU使用情况,才能更好利用这些资源。Colab针对其免费版和专业版提供不同规格。根据需求,如果要更多的资源,可以升级至专业版。
查看GPU:

!nvidia-smi

查看CPU

!cat /proc/cpuinfo

查看RAM:

!free -h
import psutil
ram_gb = psutil.virtual_memory().total / 1e9
print(ram_gb)

5.8 使用交互式Shell

Colab免费版中没有内置的交互式终端。但是您可以使用bash命令以交互方式使用shell命令。只需运行此命令,您将获得交互式输入:

!bash

然后在cell中输入任何shell命令。
Colab_Notebooks-21.webp
如果要退出,输入exit即可。

5.9 查看实时RAM和存储情况

Colab提供了RAM和磁盘使用情况的指示器。如果将鼠标悬停在指示器上,将弹出一个弹出窗口,其中包含当前使用情况和总容量。
Colab_Notebooks-22.webp

5.10 "open in colab"标志

您可以使用以下代码在您的README.md或jupyter笔记本中添加“在Colab中打开”图标。
在Markdown代码中,我们加载SVG图片,然后将其链接到colab笔记本。
Open In Colab

5.11 设置Conda环境

如果将miniconda用作python环境管理器,则可以通过在笔记本顶部运行此命令在colab上对其进行设置。

# Download Miniconda installation script
!wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

# Make it executable
!chmod +x Miniconda3-latest-Linux-x86_64.sh

# Start installation in silent mode
!bash ./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local

# Make conda packages available in current environment
import sys
sys.path.append('/usr/local/lib/python3.7/site-packages/')

执行以上命令后,就可以像普通方法一样来执行安装命令:

!conda install -y flask

5.12 发送桌面通知

对于长时间任务,如训练模型,可以训练模型完成时,弹出桌面提示。
工具->设置->网站,设置“执行完毕后显示桌面通知”。
Colab_Notebooks-23.webp
任务完成后,会以浏览器通知的方式进行通知。
本文参考内容:

  1. https://www.cnblogs.com/softcorns/p/16369045.html
  2. https://blog.csdn.net/u011119817/article/details/108519389
  3. https://towardsdatascience.com/getting-started-with-google-colab-f2fff97f594c
  4. https://amitness.com/2020/06/google-colaboratory-tips/
文章作者: Coin
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Coin's blog
Default Category Google Colab Programming Software development
喜欢就支持一下吧