您是否曾经想要一个易于配置的交互环境来运行您的机器学习代码,免费访问图GPU?Google Colab 正是我们要找的。在云上运Jupyter notebooks是一种方便易用的方式,但是免费版本对GPU的使用也做了一定的限制,但不影响我们基本的代码开发使用GPU。

通过本博客,可以了解到以下技能:

  • Google Colab 使用免费GPU加速训练
  • 使用Google Colab 的扩展包将数据保存到Google Drive, 为pandas ,DataFrame等提供交互式显示。
  • 使用Google Colab 进行训练时,保存模型的进度

概述

本博客分为五个部分;它们是:

  • 什么是Google Colab?
  • Google Colab快速入门指南
  • 探索Colab开发环境
  • 好用的谷歌Colab扩展包介绍
  • 案例:在Google Drive上保存模型进度

什么是Google Colab?

引用自“Welcome to Colab”Notebok:

Colab notebooks 允许您将可执行代码和富文本与图像、HTML、LaTeX等一起组合在一个文档中。当您创建自己的Colab notebooks时,它们将存储在您的Google Drive 帐户中。您可以轻松地与同事或朋友分享您的Colab notebooks ,允许他们对您的笔记本发表评论,甚至编辑它们。

我们可以像Jupyter notebooks一样使用Google Colab。它们真的很方便,因为Google Colab托管它们,所以我们不用自己的任何计算机资源来运行这个笔记本。我们还可以共享这些笔记本,这样其他人就可以轻松地运行我们的代码,所有这些都在一个标准环境中,因为它不依赖于我们自己的本地机器。但是,在初始化期间,我们可能需要在环境中安装一些库。

谷歌Colab快速入门指南

要创建您的Google Colab文件并开始使用Google Colab,您可以访问 Google Drive并创建一个谷歌驱动器帐户(如果您没有的话)。现在,点击Google Drive页面左上角的"New"按钮,然后点击More ▷ Google Colaboratory


然后,就可以进入新建的Google Colab文件页面:
从这里,可以使用右上角的Share 按钮与他人共享您的谷歌Colab文件或开始编码!

Colab上的快捷键和Jupyter notebooks上的快捷键是相似的。这里介绍一些常用的:

  • 运行单元格:Ctrl + Enter
  • 运行cell并在下面添加新cell: Alt + Enter
  • 运行cell并转到下面的cell:按Shift + Enter
  • 行缩进两个空格:Ctrl +]
  • 将行反缩进两个空格:Ctrl + [

但也有一个额外的非常有用的,让你只运行一个单元格中特定选择的代码部分:

  • 运行单元格选定的部分:按Ctrl + Shift + Enter

就像Jupyter notebook一样,你也可以用Markdown单元格书写文本。但是Colab还有一个额外的功能,可以根据你的markdown 内容自动生成一个目录,你还可以根据标记单元格中的标题隐藏部分代码。

如果你在自己的电脑上运行Jupyter,你别无选择,只能使用电脑的CPU。但是在Colab中,除了cpu之外,还可以将运行时更改为包括gpu和tpu,因为它是在谷歌的云上执行的。你可以通过Runtime ▷ Change runtime type:

然后,您可以从不同的硬件加速器中选择来装备您的环境。

与你自己的计算机不同,Google Colab不为你提供输入命令来管理你的Python环境的终端。要安装Python库和其他程序,比如可以使用!pip install numpy(但是我们稍后会看到,Colab已经预装了很多我们需要的库,比如numpy)。

在我们已经知道了如何设置Colab环境并开始运行一些代码,让我们对环境进行一些探索吧!

使用你的 Colab 开发环境

因为我们可以运行一些shell命令!使用wget命令可能是获取数据的最简单方法。例如,运行这个将把一个CSV文件带到Colab环境中:

! wget https://raw.githubusercontent.com/jbrownlee/Datasets/master/shampoo.csv

要查看虚拟机中Colab文件的当前工作目录,请单击屏幕左侧的file图标。默认情况下,Colab提供了一个名为sample_data的目录,其中包含几个文件:

这是我们的Colab notebook的当前工作目录。你可以在Python中通过在notebook中使用如下代码来读取这些文件:

file = open("sample_data/mnist_test.csv")

稍后,我们将看到如何使用Colab扩展将我们的Google Drive挂载到这个目录,以便存储和访问Google Drive帐户上的文件。
通过使用!运行shell命令,我们还可以查看Colab环境的硬件配置。看看CPU,我们可以使用:

!cat /proc/cpuinfo

这里给出了我的环境的输出

processor    : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 63
model name  : Intel(R) Xeon(R) CPU @ 2.30GHz
stepping    : 0
microcode   : 0x1
cpu MHz : 2299.998
cache size  : 46080 KB
…processor  : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 63
model name  : Intel(R) Xeon(R) CPU @ 2.30GHz
stepping    : 0
microcode   : 0x1
cpu MHz : 2299.998
cache size  : 46080 KB
…

我们还可以检查运行时连接的GPU信息:

!nvidia-smi

这给出了输出,如果你有一个:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.32.03    Driver Version: 460.32.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000000:00:04.0 Off |                    0 |
| N/A   57C    P8    31W / 149W |      0MiB / 11441MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+                                                                         +-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

这些只是一些shell命令的示例,我们可以使用它们来探索Colab环境。还有许多其他工具,例如!pip list,用于查看Colab环境可以访问的库,标准的!ls用于查看工作目录中的文件,等等。

有用Colab扩展包

Colab还提供了许多真正有用的扩展。其中一个扩展允许我们将谷歌Drive挂载到工作目录。我们可以这样做:

import os
from google.colab import driveMOUNTPOINT = "/content/gdrive"
DATADIR = os.path.join(MOUNTPOINT, "MyDrive")
drive.mount(MOUNTPOINT)

然后,Colab将请求访问您的Google Drive文件的权限,您可以在选择想要访问的谷歌帐户后进行此操作。在赋予它所需的权限之后,我们可以看到谷歌Google Drive挂载在左侧的Files选项卡中。

然后,要将文件写入到我们的Google Drive,可以执行以下操作:

# writes directly to google drive
with open(f"{DATADIR}/test.txt", "w") as outfile:outfile.write("Hello World!")

这段代码编写了Hello World!转移到您的Google Drive的顶层的test.txt文件。类似地,我们也可以通过以下方式读取Google Drive中的文件:

...
with open(f"{DATADIR}/test.txt", "r") as infile:file_data = infile.read()print(file_data)

输出

Hello World

此外,Google Colab附带了一些扩展,以便使创建的笔记本又更好体验。如果我们经常使用pandas DataFrame,那么有一个用于显示交互表的扩展。为了使用这个函数,我们可以使用一些魔法的函数:

%load_ext google.colab.data_table

这启用了DataFrames的交互式显示,然后当我们运行:

from sklearn.datasets import fetch_openml
X = fetch_openml("diabetes", version=1, as_frame=True, return_X_y=False)["frame"]
X


要在以后禁用这个功能,我们可以运行:

%unload_ext google.colab.data_table

当我们再次显示相同的DataFrame X时,我们得到了标准的Pandas DataFrame接口:

案例:在Google Drive上保存模型进度

Google Colab可能是为我们的机器学习项目提供强大的GPU资源的最简单的方法。但是在Colab的免费版本中,谷歌限制了我们在每个会话中使用Colab笔记本的时间。我们的内核可能会无缘无故地终止。我们可以重新开始我们的Notebook,继续我们的工作,但我们可能会失去记忆中的一切。这是一个问题,如果我们需要训练我们的模型很长时间。我们的Colab实例可能在训练完成之前终止。

使用Google Colab扩展来挂载我们的Google Drive和Keras ModelCheckpoint回调,我们可以在Google Drive上保存我们的模型进度。这对于解决Colab超时特别有用。它对付费的Pro和Pro+用户更宽松,但我们的模型训练总是有可能在中途终止。如果我们不想失去部分训练的模型,它是有价值的。

在此演示中,我们将在MNIST数据集上使用LeNet-5模型。

import tensorflow as tf
from tensorflow import keras
from keras.layers import Input, Dense, Conv2D, Flatten, MaxPool2D
from keras.models import Modelclass LeNet5(tf.keras.Model):def __init__(self):super(LeNet5, self).__init__()#creating layers in initializerself.conv1 = Conv2D(filters=6, kernel_size=(5,5), padding="same", activation="relu")self.max_pool2x2 = MaxPool2D(pool_size=(2,2))self.conv2 = Conv2D(filters=16, kernel_size=(5,5), padding="same", activation="relu")self.flatten = Flatten()self.fc1 = Dense(units=120, activation="relu")self.fc2 = Dense(units=84, activation="relu")self.fc3=Dense(units=10, activation="softmax")def call(self, input_tensor):conv1 = self.conv1(input_tensor)maxpool1 = self.max_pool2x2(conv1)conv2 = self.conv2(maxpool1)maxpool2 = self.max_pool2x2(conv2)flatten = self.flatten(maxpool2)fc1 = self.fc1(flatten)fc2 = self.fc2(fc1)fc3 = self.fc3(fc2)return fc3

然后,为了在Google Drive上训练期间保存模型进度,首先,我们需要将Google Drive挂载到Colab环境中。

import os
from google.colab import drive
MOUNTPOINT = "/content/gdrive"
DATADIR = os.path.join(MOUNTPOINT, "MyDrive")
drive.mount(MOUNTPOINT)

之后,我们声明Callback以将检查点模型保存到Google Drive。

import tensorflow as tfcheckpoint_path = DATADIR + "/checkpoints/cp-epoch-{epoch}.ckpt"
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,save_weights_only=True,verbose=1)

接下来,我们开始利用checkpoint callbacks训练MNIST数据集,当我们的Colab会话超时:以确保我们可以恢复在最后一个epoch

import tensorflow as tf
from tensorflow import keras
from keras.layers import Input, Dense, Conv2D, Flatten, MaxPool2D
from keras.models import Modelmnist_digits = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist_digits.load_data()input_layer = Input(shape=(28,28,1))
model = LeNet5()(input_layer)
model = Model(inputs=input_layer, outputs=model)
model.compile(optimizer="adam", loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics="acc")
model.fit(x=train_images, y=train_labels, batch_size=256, validation_data = [test_images, test_labels], epochs=5, callbacks=[cp_callback])

这将训练我们的模型并给出输出:

Epoch 1/5
235/235 [==============================] - ETA: 0s - loss: 0.9580 - acc: 0.8367
Epoch 1: saving model to /content/gdrive/MyDrive/checkpoints/cp-epoch-1.ckpt
235/235 [==============================] - 11s 7ms/step - loss: 0.9580 - acc: 0.8367 - val_loss: 0.1672 - val_acc: 0.9492
Epoch 2/5
229/235 [============================>.] - ETA: 0s - loss: 0.1303 - acc: 0.9605
Epoch 2: saving model to /content/gdrive/MyDrive/checkpoints/cp-epoch-2.ckpt
235/235 [==============================] - 1s 5ms/step - loss: 0.1298 - acc: 0.9607 - val_loss: 0.0951 - val_acc: 0.9707
Epoch 3/5
234/235 [============================>.] - ETA: 0s - loss: 0.0810 - acc: 0.9746
Epoch 3: saving model to /content/gdrive/MyDrive/checkpoints/cp-epoch-3.ckpt
235/235 [==============================] - 1s 6ms/step - loss: 0.0811 - acc: 0.9746 - val_loss: 0.0800 - val_acc: 0.9749
Epoch 4/5
230/235 [============================>.] - ETA: 0s - loss: 0.0582 - acc: 0.9818
Epoch 4: saving model to /content/gdrive/MyDrive/checkpoints/cp-epoch-4.ckpt
235/235 [==============================] - 1s 6ms/step - loss: 0.0580 - acc: 0.9819 - val_loss: 0.0653 - val_acc: 0.9806
Epoch 5/5
222/235 [===========================>..] - ETA: 0s - loss: 0.0446 - acc: 0.9858
Epoch 5: saving model to /content/gdrive/MyDrive/checkpoints/cp-epoch-5.ckpt
235/235 [==============================] - 1s 6ms/step - loss: 0.0445 - acc: 0.9859 - val_loss: 0.0583 - val_acc: 0.9825

从输出中,我们可以看到checkpoints已经被保存。看看我的Google Drive文件夹,我们也可以看到存储在那里的checkpoints。

Colab实例位于谷歌的云环境中。它运行的机器有一些存储空间,所以我们可以安装一个包或下载一些文件到它。但是,我们不应该将checkpoint保存在那里,因为我们不能保证在会话终止后能取回它。因此,在上面的示例中,我们将Google Drive装入实例,并将checkpoints保存在Google Drive中。这就是我们如何确保checkpoints文件是可访问的。

在这里,我们将模型训练和保存的完整代码附加到Google Drive:

import os
from google.colab import drive
import tensorflow as tf
from tensorflow import keras
from keras.layers import Input, Dense, Conv2D, Flatten, MaxPool2D
from keras.models import ModelMOUNTPOINT = "/content/gdrive"
DATADIR = os.path.join(MOUNTPOINT, "MyDrive")
drive.mount(MOUNTPOINT)class LeNet5(tf.keras.Model):def __init__(self):super(LeNet5, self).__init__()self.conv1 = Conv2D(filters=6, kernel_size=(5,5), padding="same", activation="relu")self.max_pool2x2 = MaxPool2D(pool_size=(2,2))self.conv2 = Conv2D(filters=16, kernel_size=(5,5), padding="same", activation="relu")self.flatten = Flatten()self.fc1 = Dense(units=120, activation="relu")self.fc2 = Dense(units=84, activation="relu")self.fc3=Dense(units=10, activation="softmax")def call(self, input_tensor):conv1 = self.conv1(input_tensor)maxpool1 = self.max_pool2x2(conv1)conv2 = self.conv2(maxpool1)maxpool2 = self.max_pool2x2(conv2)flatten = self.flatten(maxpool2)fc1 = self.fc1(flatten)fc2 = self.fc2(fc1)fc3 = self.fc3(fc2)return fc3mnist_digits = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist_digits.load_data()# saving checkpoints
checkpoint_path = DATADIR + "/checkpoints/cp-epoch-{epoch}.ckpt"
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,save_weights_only=True,verbose=1)
input_layer = Input(shape=(28,28,1))
model = LeNet5()(input_layer)
model = Model(inputs=input_layer, outputs=model)
model.compile(optimizer="adam", loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics="acc")model.fit(x=train_images, y=train_labels, batch_size=256, validation_data = [test_images, test_labels], epochs=5, callbacks=[cp_callback])

如果模型训练中途停止,我们可以通过重新编译模型并加载权重来继续,然后我们可以继续我们的训练:

checkpoint_path = DATADIR + "/checkpoints/cp-epoch-{epoch}.ckpt"
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,save_weights_only=True,verbose=1)input_layer = Input(shape=(28,28,1))
model = LeNet5()(input_layer)
model = Model(inputs=input_layer, outputs=model)
model.compile(optimizer="adam", loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics="acc")# to resume from epoch 5 checkpoints
model.load_weights(DATADIR + "/checkpoints/cp-epoch-5.ckpt")# continue training
model.fit(x=train_images, y=train_labels, batch_size=256, validation_data = [test_images, test_labels], epochs=5, callbacks=[cp_callback])

总结

在本博客中,了解了什么Google Colab,如何利用Google Colab获得免费使用GPU,如何在Google Colab中使用 Google Drive账号,以及在Google Colab Notebook中如何保存模型和存储模型的训练checkpoints到Google Drive。

参考

“欢迎来到Colab”笔记本:https://colab.research.google.com/
jupiter Notebook文档:https://docs.jupyter.org/en/latest/

使用Google colab进行机器学习项目开发相关推荐

  1. 《机器学习项目开发实战》送书活动结果公布

    截止到8月8日24:00,本次送书活动 共收到70位同学参与回复,本次很多同学在看到活动的书<机器学习项目开发实践>,自行就到各大网络商店上购买了书,据反馈这个书很不错,小二昨天也收到一本 ...

  2. Java语言开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发ShopRec ...

  3. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

  4. 使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户、物品的协同过滤推荐算法实现 大数据、人工智能、机器学习项目开发

    使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户.物品的协同过滤推荐算法实现 大数据.人工智能.机器学习项目开发Fo ...

  5. Java开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 京东商城爬虫 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 京东商城爬虫 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发Sh ...

  6. Java语言开发在线美食推荐网 美食推荐系统 基于用户、物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis框架 人工智能、大数据、机器学习项目开发

    Java语言开发在线美食推荐网 美食推荐系统 基于用户.物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis框架 人工智能.大数据.机器学习项目开发FoodRecomm ...

  7. 应用kaggle进行机器学习项目开发

    你可能听说过Kaggle数据科学竞赛,但你知道Kaggle还有许多其他功能,可以帮助你完成机器学习项目吗?对于为机器学习项目寻找数据集的人,Kaggle允许你访问别人的公共数据集,并共享你自己的数据集 ...

  8. 【送书活动】机器学习项目开发实战

    出版时间  2016-08-01 定价:59元 作者: Mathias Brandewinder是Microsoft F# 最有价值专家(MVP),住在加州旧金山,在那里他为Clear Lines C ...

  9. 机器学习项目开发实战,应用

    1.图像分类----分类 1.1模型---构建一个数字识别系统 数据集组织,图像由像素点组成 读取数据, 从CSV文件读取数据放入一组观测值中, 计算图像之间的距离,取得两个像素数组,并返回描述它们的 ...

最新文章

  1. JS合并数组的几种方法及优劣比较
  2. 9.优先队列,priority_queue
  3. 南怀瑾《处事箴言》摘录
  4. 机器学习(三十四)——策略梯度
  5. loj#10050-The XOR Largest Pair【Trie(字典树)】
  6. c语言scanf附加格式*,C语言的scanf语句格式
  7. java中DatagramSocket连续发送多个数据报包时产生丢包现象解决方案
  8. 帆软报表-通过代码来创建一个模板文件
  9. Web程序员如何入门以太坊开发
  10. 算法面试中:时间复杂度和空间复杂度是什么?
  11. 无法更新到Win8.1的原因与解决办法
  12. 三星GT-P1000完美刷机教程,附ROM刷机包下载
  13. 泰坦尼克号 第三章 模型搭建和评估
  14. std::vector介绍
  15. Jordan CP3 11 Performance Reviews
  16. [Python笔记_2]循环、字符串、列表、函数、异常处理
  17. Python Selenium爬虫实现歌曲免费下载
  18. 黑苹果0005——我的config文件(笔记本 intel HD630)
  19. 数学基础从高一开始1、集合的概念
  20. 谷歌使用AndroidX代替Android支持库

热门文章

  1. Mac系统下快捷切换到Win系统的方法
  2. 知识图谱实战系列(笔记)
  3. 2020信息系统项目管理师备战21--单代号网络图(前导图)
  4. Qt 实现窗口大小变化时动画过渡
  5. 腾讯CSIG测开一面
  6. 长沙云图丨用VR全景购物是怎样的体验呢?
  7. 快速了解Depop注册新方法,轻松一分钟入驻
  8. 12_linux笔记-shell脚本命令
  9. 计算机科技文化节宣传标语,科技节标语
  10. solidity 交换变量的两种方法