工欲善其事必先利器-寫給AI實踐者的實驗環境指南:Google Colab+Cloudriser

由公眾號「凱恩博原創,轉載請註明出處

本文面向使用Jupyter Notebook作為Python環境的實踐AI項目的朋友們。 如果你已經是AI大拿,對環境配置非常熟悉,請略過正文,直接轉發分享給周圍的初學者們吧。


在上一篇《分享你的Jupyter Notebook,在AI時代脫穎而出》中我介紹了如何分享Notebook為你進入AI行業並取得成功助一臂之力。 那對於初學者們,除了自己花費大量時間搭建Jupyter Notebook、安裝各種框架工具包之外,是否有更簡單的辦法,甚至在Jupyter里用GPU/TPU加速訓練?

凱恩博:分享你的Jupyter Notebook,在AI時代脫穎而出?

zhuanlan.zhihu.com圖標

這裡向你介紹Google的一款產品——Google Colab(也叫做Colaboratory)可以很好的解決這個問題。 完全在瀏覽器在線使用,提供GPU/TPU,關鍵是免費的Jupter環境。 此外,還介紹和與其搭配使用的Clouderizer,讓Google Colab使用更便捷。

Google Colab

官方地址colab.research.google.com(Google的產品,需要翻牆,我想這點對搞技術的朋友應該不是事!)

Google Colab可以理解為 Jupyter + Google Cloud + Google Drive的組合。

Colab是基於Goolge Cloud和Google Drive兩個產品的Jupyter環境,且說Google這兩個產品單獨拿出來,在各自領域都是實力雄厚的top產品。看看這幾款產品融合在一起後是如何工作的。

Colab是一個Jupyter環境

除了樣子和傳統的Jupyter長得有點不同外,其他功能差不多。 可以在上面輕鬆地運行Keras、Tensorflow、Pytorch等框架。 基本的Linux命令都支持,對於語言不限於Python。

基於Google Drive的存儲

基於Google Drive的好處是,如果你在本地安裝了Google Drive的同步盤,可以很方便的管理(包括分享)項目和數據集,然後配合Colab做訓練或聯繫。下面看看具體的功能。

可以直接在Google Drive中創建ipynb文件

也可以像傳普通文件一樣,從本地上傳到Google Drive中的ipynb文件直接打開運行

在已運行的ipynb環境中載入Google Drive里的數據

當做訓練時,需要訓練集,但從Google Drive里打開的ipynb不能直接載入Drive里的數據,有兩個辦法:

  1. 打開一個ipynb,然後在「Files」的tab下,上傳數據集,但不推薦,因為麻煩,而且慢!

2. 直接在ipynb里載入(mount) 你的Google Drive:

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

然後點開Google Drive鏈接的授權,填入Token即可。注意掛在後的Drive在/content/drive目錄下。

看看效果,是可以列出文件的:

!ls /content/drive/

直接上圖看效果:

超級方便的共享功能

  • 因為是基於Google Drive的,所以共享一個Jupyter notebook,可以直接分享鏈接。收到鏈接的朋友打開鏈接後直接運行,還可以一鍵存到自己的Google Drive。

例如,這裡推薦一個關於Google Cola載入外部數據的ipynb:

  • colab.research.google.com

兩個使用Google Colab TPU的ipynb:

  • colab.research.google.com
  • colab.research.google.com

還有一個如何使用深度學習以另一個圖像的風格組合圖像(Neural Style Transfer)的ipynb:

  • colab.research.google.com

打開直接運行,就是這麼簡單!

性能評測:CPU、內存和GPU

先上總結:

System: Linux a8e930d01458 4.14.79+ #1 SMP Wed Dec 19 21:19:13 PST 2018 x86_64 x86_64 x86_64 GNU/Linux

GPU: 1xTesla K80 , 2496 CUDA 核心, 12GB(11.439GB Usable) GDDR5 VRAM
* 一個官方TensorFlow的例子是CPU跑的速度8.8GPU跑需要2秒
* 節省77%的時間當然還有人試了試Colab的TPU據測評比這個K80 快了3倍左右

CPU: 1x核心(雙線程) Xeon Processors @2.2Ghz (No Turbo Boost) , 56MB L3 Cache

RAM: ~12.5 GB

Disk: ~319 GB

每12小時左右分配的虛擬機上的磁碟RAMVRAMCPU緩存等數據將被刪除

再看具體實驗截圖:

但是你發現沒有,上面沒有提到很大型的數據的安裝,比如幾十上百G的數據。

例如參加一個Kaggle競賽,需要下載它提供的訓練集。

再比如,Google Colab過一段時間沒操作的話會經常斷開連接,如和解決中斷的問題?甚至對於可能需要運行超過12小時以上的任務了?

這個時候怎麼辦,可以考慮用Clouderizer。

Clouderizer是啥

Clouderizer內置項目模板,包括Tensorflow,Keras,Anaconda,Python,Torch等深度學習的工具。只需點擊幾下,就可以一次性選擇機器類型,設置環境,上傳深度學習模型,下載數據集和啟動培訓,全部自動化。

一句話,就是讓深度學習工具用起來更簡單,尤其是可以搭配Google Colab使用,超級方便!

  • 生成的項目配置文件可以在本地,雲端或兩者上運行項目
  • 他們的口號是:忘記DevOps,專註於機器學習。

我非常認同他們的觀點,尤其是初學者,需要專註於學習演算法的模型和演算法本身。

看個例子來了解一下它是怎麼工作的:

實例 - 用Clouderizer實現Colab和Google Drive雙向同步和載入Kaggle數據集

  1. 綁定Google Drive

下一步授權即可。

創建一個實例

  1. 填入名字

2. 填入導入的Git

3. [可選] 導入Kaggle的數據集

如果已經綁定了Kaggle的賬戶,可以在這一步填入需要導數的Kaggle數據集 (具體導入Kaggle API Token的辦法是在Kaggle網站 -> My Account -> API -> Creae New API Token,然後回到Clouderizer,在Settings-> Cloud Settings -> Kaggle Credentials直接導入剛剛下載的Token文件即可)

上面Kaggle數據集的ID可以從Kaggle的competition頁獲取

4. [可選]安裝依賴的APT或者PIP包,還有其腳本都可以在這裡填,我這裡就不填了

5. 項目到此創建完畢

6. 返回Clouderiser主面板,就看到剛剛創建的項目,直接點擊Start,在彈出的雲平台環境里選Google Colab即可。當然也可以選Kaggle、AWS等等,然後「Launch Colab Notebook」。

7. 會自動打開Google Colab的頁面,執行裡面的命令。注意需要等到出現下下圖紅框的文字後才算準備好。

8. 此時可以返回Clouderiser了,刷新項目列表,看到剛剛創建的項目已經在運行了。

可以點擊右邊的Jupter來啟動或者SSh方式啟動。如果是Jupter的方式可以看到一個熟悉的Jupter環境了。

其中文件目錄結構分為code、data、out

發現Kaggle的數據已經準備好

回到Google Drive,發現裡面有一個clouderizer的目錄,再裡面有剛剛創建的GoogleDriveAndKaggleDemo這個項目的所有數據:

到此就OK了。開始你的AI實踐之旅吧!

Clouderizer開始收費了,但有免費的試用期,而且不貴5刀每月每人,仍然值得推薦。

最後,為了客觀公正,寫一點一些負面的評論吧

當然沒有東西是完美的,何況免費的東西。雖然我們不能要求太苛刻,但為了客觀,摘錄一些網上的負面評價:

  1. GPU 是K80型號,這款GPU在2014年末推出,屬於2012發布的開普勒Kepler架構,是幾代以前的架構。(作者評論:雖然如此,比僅僅CPU運行,仍然快很多)
  2. Colab只能提供一個用戶一個GPU,並且但個任務最多連續運行12小時,然後會被重置(作者評論:12小時對於初學研究或學習的項目足夠了吧,如果真的是很大的訓練任務,最好還是要在自己的機器或虛擬機上跑吧)
  3. Colab相對於單獨的伺服器或虛擬機來說靈活性較低(作者評論:那樣的成本可以想一想很高的哦)

由公眾號「凱恩博原創,轉載請註明出處


最後的最後,附上Google Colab 官方Q&A

什麼是Google Colab? Google Colab是機器學習教育和研究的研究工具。這是一個Jupyter筆記本環境,無需設置,直接使用。

支持哪些瀏覽器? 推薦配合Chrome和Firefox使用。

可以免費使用嗎? 是。Google Colab是一個可以免費使用的研究項目。

Jupyter和Google Colab有什麼區別? Jupyter是Google Colab所依據的開源項目。Google Colab允許您與其他人一起使用和共享Jupyter筆記本電腦,而無需在瀏覽器以外的任何計算機上下載,安裝或運行任何東西。

我的筆記本存放在哪裡,我可以分享嗎? 所有Google Colab筆記本都存儲在Google Drive中。可以像使用Google Docs或Sheets一樣共享Google Colab筆記本。只需點擊任何Google Colab筆記本電腦右上角的「分享」按鈕,或按照這些Google雲端硬碟文件共享說明操作即可。

如果我分享我的筆記本,會分享什麼? 如果您選擇共享筆記本,則將共享筆記本的全部內容(文本,代碼和輸出)。保存此筆記本時,可以通過選擇「 編輯」>「筆記本設置」>「忽略代碼單元格輸出」來省略保存或共享的代碼單元輸出。您正在使用的虛擬機,包括您已設置的任何自定義文件和庫,將不會被共享。因此,包含安裝和載入筆記本所需的任何自定義庫或文件的單元格是個好主意。

我可以將現有的Jupyter / IPython筆記本導入Google Colab嗎? 是。從文件菜單中選擇「上傳筆記本」。

那麼Python3呢?(或R,Scala,…) Google Colab支持Python 2.7和Python 3.6。知道用戶有興趣支持其他Jupyter內核(例如R或Scala)。我們想支持這些,但還沒有任何ETA。

我的代碼在哪裡執行?如果我關閉瀏覽器窗口,我的執行狀態會發生什麼? 代碼在專用於您帳戶的虛擬機中執行。閑置一段時間後,虛擬機會被回收,並且系統會強制執行最長生命周期。

如何獲取數據? 您可以按照這些說明或從Google Colab的文件菜單中下載您從Google雲端硬碟創建的任何Google Colab筆記本。所有Google Colab筆記本都以開源Jupyter筆記本格式(.ipynb)存儲。

我如何使用GPU,為什麼它們有時不可用? Google Colab旨在用於互動式使用。可以停止長時間運行的後台計算,特別是在GPU上。請不要使用Google Colab挖礦(比如比特幣)。可能導致服務不可用。鼓勵希望連續或長時間運行計算的用戶使用本地運行時。

如何重置我的代碼運行的虛擬機,為什麼這有時不可用? 「運行時」(Runtime)菜單中的「重置所有運行時」(Reset all runtimes)條目將返回分配給您原始狀態的所有託管虛擬機。這在虛擬機變得不健康的情況下會有所幫助,例如由於意外覆蓋系統文件或安裝不兼容的軟體。實驗室限制了這樣做的頻率,以防止不必要的資源消耗。如果嘗試失敗,請稍後再試。

為什麼drive.mount()有時會失敗說「超時」,為什麼drive.mount()掛載文件夾中的I / O操作有時會失敗? 當文件夾中的文件或子文件夾數量變得過大時,Google雲端硬碟操作可能會超時。如果數千個項目直接包含在頂級「我的雲端硬碟」文件夾中,則安裝驅動器可能會超時。重複嘗試最終可能成功,因為失敗嘗試在超時之前在本地緩存部分狀態。如果遇到此問題,請嘗試將「我的雲端硬碟」中直接包含的文件和文件夾移動到子文件夾中。成功後從其他文件夾中讀取時可能會出現類似問題drive.mount()。訪問包含許多項目的任何文件夾中的項目都可能導致錯誤,如OSError: [Errno 5] Input/output error(python 3)或IOError: [Errno 5] Input/output error(python 2)。同樣,您可以通過將直接包含的項目移動到子文件夾中來解決此問題。


推薦閱讀:

TAG:jupyter | 人工智慧 | 深度學習(DeepLearning) |