基于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 算法筆記
前言
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 硬盤上,具體步驟如下所示:
你也可以升級你的 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.ioGCS 桶的區域信息本來是可以通過下述命令獲取的,但是我這邊提示 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实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swagger 使用指南
- 下一篇: 前端国际化辅助工具——自动替换中文并翻译