
正文
基于Colab Pro & Google Drive的Kaggle实战
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
原文:https://hippocampus-garden.com/kaggle_colab/
原文标题:How to Kaggle with Colab Pro & Google Drive
译文作者:kbsc13
联系方式:
Github:https://github.com/ccc013/AI_algorithm_notes
知乎专栏:机器学习与计算机视觉,AI 论文笔记
微信公众号:AI 算法笔记

前言
Colab Pro(目前仅在美国、加拿大、日本、巴西、德国、法国、印度、英国和泰国可用)提供了随时可用和加速但是维护起来既昂贵又繁琐的云计算资源。和其免费版不同,Colab Pro 允许用户使用 TPUs 和高端的 GPUs,比如 V100 和 P100 等等,可以访问高内存的实例,并且保持 notebooks 运行的时间最长可以达到 24 小时,费用是每个月 10 美元。
Colab Pro可以满足 Kaggle 竞赛中大部分比赛的资源要求。但是这里存在一个问题,每个会话只能保持 24 小时。每次都需要准备数据集,根据准备的方式,这需要一些时间。在下面的表格中,从初始化加载和磁盘读写的时间来对比 5 种准备 Kaggle 数据集的方法:

不幸的是,根据上述表格并没有看到两个方式都很快速的方法。考虑到我们更想要的是在数据集上通过多次迭代的训练模型,快速的磁盘读写的速度是更加重要。在目前的状况下,我会选择第三个方法:首先通过 Kaggle API 下载数据集,并以 zip 压缩包形式保存在 Google 硬盘上,当开始会话的时候,解压缩并存放到实例的磁盘上。这个操作过程将在下一节中一步步的解释。
Kaggle on Colab Pro下载数据集到 Google 硬盘上
首先,需要通过 Kaggle API 下载数据集,并以 zip 压缩包形式保存在 Google 硬盘上,具体步骤如下所示:
登录到 https://www.kaggle.com/<YourKaggleID>/account,然后下载kaggle.json

在Google 硬盘上创建一个名字为 kaggle的文件夹,然后上传kaggle.json开始一个 Colab 的会话 通过点击右上角的图标来挂载 Google 硬盘,如下图所示

从 Google 硬盘里复制 kaggle.json到当前会话,并修改文件的权限,命令如下所示:
! mkdir -p ~/.kaggle
! cp ./drive/MyDrive/kaggle/kaggle.json ~/.kaggle/
! chmod 600 ~/.kaggle/kaggle.json
(可选)升级 Kaggle API。这个包是预安装在 Colab 的实例上的,不过在 2021 年 5 月份,Kaggle notebooks 的版本是更新了,两个版本是有些不一样的。
! pip install -U kaggle
通过 Kaggle API 下载数据集到 Google 硬盘上,这可能会花点时间完成并且在 Google 硬盘界面上显示出来也需要几分钟。
! mkdir -p ./drive/MyDrive/kaggle/<CompetitionID>
! kaggle competitions download -c <CompetitionID> -p ./drive/MyDrive/kaggle/<CompetitionID>
你也可以升级你的 Google 硬盘计划来获取更多的存储空间。
解压缩文件到实例上
解压缩文件到当前会话中,命令如下所示,这一步也需要花费一些时间:
! mkdir -p <CompetitionID>
! unzip -q ./drive/MyDrive/kaggle/<CompetitionID>.zip -d <CompetitionID>
# You can specify the portion of dataset for saving time and disk space
! unzip -q ./drive/MyDrive/kaggle/<CompetitionID>.zip train/* -d <CompetitionID>
这就可以开始训练模型了。完成训练后,可以将权重文件导出到Kaggle数据集,并通过Kaggle API提交预测,对于完整的教程,可以参考 https://github.com/Kaggle/kaggle-api。
速度比较
从Google 硬盘压缩需要很长的时间,这种方法是真的比直接通过 Kaggle API 或者 gsutil 下载要更快吗?为了回答这个问题,我准备了房价预测竞赛(https://www.kaggle.com/c/house-prices-advanced-regression-techniques/)的数据集,大约是 935KB,并测试这 3 种方法的解压缩时间,结果如下所示:

上述结果可能会受到实例所在区域而有些影响,但是大部分情况下,从 Google 硬盘上解压缩还是最快的方法。
注意磁盘大小
Colab Pro 目前提供一个 150GB 大小的磁盘,所以压缩文件不能超过 75GB。
是否可以挂载外部存储器呢?挂载谷歌云存储桶(Mounting Google Cloud Storage Buckets)
Colab 可以挂载 Google 云存储磁盘,并在不用下载的情况下访问 Kaggle 的数据集。其操作有几个步骤,首先,通过下述代码授权你的账户:
from google.colab import auth
auth.authenticate_user()
接着,安装 gcsfuse :
! echo "deb http://packages.cloud.google.com/apt gcsfuse-bionic main" > /etc/apt/sources.list.d/gcsfuse.list
! curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
! apt update
! apt install gcsfuse
然后,打开一个你喜欢的竞赛项目的 Kaggle 的 notebook,然后运行下面的代码获取 GCS (Google Cloud Storage)的路径:
from kaggle_datasets import KaggleDatasets
print(KaggleDatasets().get_gcs_path())
比如房价预测竞赛House Prices - Advanced Regression Techniques,其得到的结果如下:
gs://kds-ecc57ad1aae587b0e86e3b9422baab9785fc1220431f0b88e5327ea5
现在就可以通过 gcsfuse 来挂载 GCS:
! mkdir -p <CompetitionID>
! gcsfuse --implicit-dirs --limit-bytes-per-sec -1 --limit-ops-per-sec -1 <GCSPath without gs://> <CompetitionID>
通过上述命令进行挂载,1s 内即可完成。但当你开始尝试在数据集上进行迭代操作的时候,你会发现磁盘访问速度是非常的慢。访问速度是依赖于 Colab 实例和 GCS 桶 所在的区域,但一般来说,应该避免这种挂载操作。
可以通过以下方式获取Colab实例的区域信息:
! curl ipinfo.io
GCS 桶的区域信息本来是可以通过下述命令获取的,但是我这边提示 AccessDeniedException 异常错误,并且无法解决。
! gsutil ls -Lb gs://kds-ecc57ad1aae587b0e86e3b9422baab9785fc1220431f0b88e5327ea5
挂载 Google D磁盘
这种方法的磁盘访问速度太慢了!
总结
使用 Colab Pro 是能够用到更好的显卡,比如 TPU,或者 P100,V100 这个级别的 GPU,当然这是一个付费版本,每个月需要花费 10 美元,而且每次会话运行时间最长只有 24 小时,所以如果训练模型时间太久,就需要多次运行会话,这就导致需要重新加载数据集和读取上次训练保存的权重文件。
因此为了最大化利用 Colab Pro 的时间,当然就希望减少加载数据集的时间,本文作者基于这个思路,对比了 5 种方法,最后是根据实际情况,即主要是训练模型,对磁盘读取速度要求更高,所以选择了在 Google 磁盘上解压缩文件到 Kaggle 实例上的方法,并给出了操作流程,然后还研究了是否可以通过挂载外部存储器,但磁盘访问速度太慢,并不建议这种操作。
另外,Colab Pro 提供的磁盘空间仅有 150GB,对于压缩文件大小是不能超过 75GB,因此,这种方法对于大数据集,参数量很大的网络模型都是不太合适的,但对于数据量不大,不用太大的网络模型的比赛,还是可以用 Colab Pro 来训练模型。
基于Colab Pro & Google Drive的Kaggle实战的更多相关文章- 机器学习(一):记一次k一近邻算法的学习与Kaggle实战
本篇博客是基于以Kaggle中手写数字识别实战为目标,以KNN算法学习为驱动导向来进行讲解. 写这篇博客的原因 什么是KNN kaggle实战 优缺点及其优化方法 总结 参考文献 写这篇博客的原因 写 ...
- 教你用 google-drive-ocamlfuse 在 Linux 上挂载 Google Drive
如果你在找一个方便的方式在 Linux 机器上挂载你的 Google Drive 文件夹, Jack Wallen 将教你怎么使用 google-drive-ocamlfuse 来挂载 Google ...
- 使用网盘(Dropbox/Google Drive)同步Git仓库
还在使用老掉牙的U盘搬运代码(文件)的方式,从一台机器上复制后,粘贴到另一台机器上?太Out了.使用Github 倒是一个非常不错的替代方法.但无论是基于什么理由都有可能不想把代码公开(毕竟Githu ...
- 在线打开,浏览PDF文件的各种方式及各种pdf插件------(MS OneDrive/google drive &; google doc/ github ?raw=true)
在线打开,浏览PDF文件的各种方式: 1 Google drive&doc (国内不好使,you know GFW=Great Firewall) 1. google drive: 直接分 ...
- 网盘的选择,百度网盘、google drive 还是 Dropbox
我是国内用户,需要越过Chinawall 我使用的是一枝红杏,用着还行 如果要买,结账时输入'laod80' 一枝红杏官网:官网地址 Dropbox: 稳定,速度快 Dropbox官网:链接 操作十分 ...
- 【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效
最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...
- A replacement solution to using Google Drive in Ubuntu
Grive2 Get dependencies You need to get the dependency libraries along with their development (-dev ...
- Kaggle实战之一回归问题
0. 前言 1.任务描述 2.数据概览 3. 数据准备 4. 模型训练 5. kaggle实战 0. 前言 "尽管新技术新算法层出不穷,但是掌握好基础算法就能解决手头 90% 的机器学习问题 ...
- Kaggle实战之二分类问题
0. 前言 1. MNIST 数据集 2. 二分类器 3. 效果评测 4. 多分类器与误差分析 5. Kaggle 实战 0. 前言 "尽管新技术新算法层出不穷,但是掌握好基础算法就能解决手 ...
随机推荐- Javascript 多浏览器兼容性问题及解决方案
一.document.formName.item(”itemName”) 问题 问题说明:IE下,可以使用 document.formName.item(”itemName”) 或 document. ...
- libpcap和WinPcap
能从物理上访问网络上的流量后,你需要用软件把它记录下来.这里,我们探究记录.解析和分析被捕获的数据包中最常用的软件库:libpcap和WinPcap.也将介绍包括tcpdump.Wireshark等基 ...
- 固定表头/锁定前几列的代码参考[JS篇]
引语:做有难度的事情,才是成长最快的时候.前段时间,接了一个公司的稍微大点的项目,急着赶进度,本人又没有独立带过队,因此,把自己给搞懵逼了.总是没有多余的时间来做自己想做的事,而且,经常把工作带入生活 ...
- NUnitForms 测试GUI应用程序的优秀工具
著名的NUnit是单元测试的优秀工具,但是要在一个测试方法中启动GUI程序,比如Windows Form界面,这比较难做到.NUnitForms就是为解决这个问题产生的,它是NUnit的一个扩展程序, ...
- unity3d游戏开发——新手引导
GUI实现,如下: 按“G”键开始新手引导 代码如下: using UnityEngine; using System.Collections; public class OkButton : GUI ...
- poj 1458 Common Subsequence(区间dp)
题目链接:http://poj.org/problem?id=1458 思路分析:经典的最长公共子序列问题(longest-common-subsequence proble),使用动态规划解题. 1 ...
- Http Pipeline详细分析(下)
Http Pipeline详细分析(下) 文章内容 接上面的章节,我们这篇要讲解的是Pipeline是执行的各种事件,我们知道,在自定义的HttpModule的Init方法里,我们可以添加自己的事件, ...
- css伪类的说明以及使用(css事件)
CSS伪类的使用(css事件) 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7670959.html 之前有开发开发App的时候,有同事问我那个列表的条目按下 ...
- Python数据分析学习-re正则表达式模块
正则表达式 为高级的文本模式匹配.抽取.与/或文本形式的搜索和替换功能提供了基础.简单地说,正则表达式(简称为 regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,于 ...
- 【学亮IT手记】利用字节流复制图片
本篇博客是基于以Kaggle中手写数字识别实战为目标,以KNN算法学习为驱动导向来进行讲解. 写这篇博客的原因 什么是KNN kaggle实战 优缺点及其优化方法 总结 参考文献 写这篇博客的原因 写 ...
如果你在找一个方便的方式在 Linux 机器上挂载你的 Google Drive 文件夹, Jack Wallen 将教你怎么使用 google-drive-ocamlfuse 来挂载 Google ...
还在使用老掉牙的U盘搬运代码(文件)的方式,从一台机器上复制后,粘贴到另一台机器上?太Out了.使用Github 倒是一个非常不错的替代方法.但无论是基于什么理由都有可能不想把代码公开(毕竟Githu ...
在线打开,浏览PDF文件的各种方式: 1 Google drive&doc (国内不好使,you know GFW=Great Firewall) 1. google drive: 直接分 ...
我是国内用户,需要越过Chinawall 我使用的是一枝红杏,用着还行 如果要买,结账时输入'laod80' 一枝红杏官网:官网地址 Dropbox: 稳定,速度快 Dropbox官网:链接 操作十分 ...
最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...
Grive2 Get dependencies You need to get the dependency libraries along with their development (-dev ...
0. 前言 1.任务描述 2.数据概览 3. 数据准备 4. 模型训练 5. kaggle实战 0. 前言 "尽管新技术新算法层出不穷,但是掌握好基础算法就能解决手头 90% 的机器学习问题 ...
0. 前言 1. MNIST 数据集 2. 二分类器 3. 效果评测 4. 多分类器与误差分析 5. Kaggle 实战 0. 前言 "尽管新技术新算法层出不穷,但是掌握好基础算法就能解决手 ...
- Javascript 多浏览器兼容性问题及解决方案
一.document.formName.item(”itemName”) 问题 问题说明:IE下,可以使用 document.formName.item(”itemName”) 或 document. ...
- libpcap和WinPcap
能从物理上访问网络上的流量后,你需要用软件把它记录下来.这里,我们探究记录.解析和分析被捕获的数据包中最常用的软件库:libpcap和WinPcap.也将介绍包括tcpdump.Wireshark等基 ...
- 固定表头/锁定前几列的代码参考[JS篇]
引语:做有难度的事情,才是成长最快的时候.前段时间,接了一个公司的稍微大点的项目,急着赶进度,本人又没有独立带过队,因此,把自己给搞懵逼了.总是没有多余的时间来做自己想做的事,而且,经常把工作带入生活 ...
- NUnitForms 测试GUI应用程序的优秀工具
著名的NUnit是单元测试的优秀工具,但是要在一个测试方法中启动GUI程序,比如Windows Form界面,这比较难做到.NUnitForms就是为解决这个问题产生的,它是NUnit的一个扩展程序, ...
- unity3d游戏开发——新手引导
GUI实现,如下: 按“G”键开始新手引导 代码如下: using UnityEngine; using System.Collections; public class OkButton : GUI ...
- poj 1458 Common Subsequence(区间dp)
题目链接:http://poj.org/problem?id=1458 思路分析:经典的最长公共子序列问题(longest-common-subsequence proble),使用动态规划解题. 1 ...
- Http Pipeline详细分析(下)
Http Pipeline详细分析(下) 文章内容 接上面的章节,我们这篇要讲解的是Pipeline是执行的各种事件,我们知道,在自定义的HttpModule的Init方法里,我们可以添加自己的事件, ...
- css伪类的说明以及使用(css事件)
CSS伪类的使用(css事件) 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7670959.html 之前有开发开发App的时候,有同事问我那个列表的条目按下 ...
- Python数据分析学习-re正则表达式模块
正则表达式 为高级的文本模式匹配.抽取.与/或文本形式的搜索和替换功能提供了基础.简单地说,正则表达式(简称为 regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,于 ...
- 【学亮IT手记】利用字节流复制图片







