如何免費雲端執行Python深度學習框架?

王樹義發表於2018-06-28

想執行TuriCreate,卻沒有蘋果電腦,也沒有Linux使用經驗,怎麼辦?用上這款雲端應用,讓你免安裝Python執行環境。一分錢不用花,以高效能GPU,輕鬆玩兒轉深度學習。

如何免費雲端執行Python深度學習框架?

痛點

如何用Python和深度神經網路識別影像?》一文釋出後,收到了很多讀者的留言。大家對從前印象中高不可攀的深度神經網路圖片識別來了興趣,都打算親自動手,試用一下簡單易用的TuriCreate框架。

有的讀者嘗試之後,很開心。

如何免費雲端執行Python深度學習框架?

有的讀者卻遇到了問題:

如何免費雲端執行Python深度學習框架?

我在《如何用Python和深度神經網路尋找近似圖片?》一文中,對這個疑問做了回應——TuriCreate目前支援的作業系統有限,只包括如下選項:

如何免費雲端執行Python深度學習框架?

如果你用的作業系統是Windows 7及以下版本,目前TuriCreate還不支援。

解決辦法有兩種:

第一種,升級到Windows 10,並且使用WSL。

第二種,採用虛擬機器安裝好Linux。

這兩種解決方法好不好?

不好。

它們都是沒有辦法的辦法。

因為都需要使用者接觸到Linux這個新系統。

對於IT專業人士來說,Linux確實是個好東西。

首先,它免費。因此可以把軟硬體的綜合使用成本降到最低;

其次,它靈活。從系統核心到各種應用,你都可以隨心所欲定製。不像Windows或者macOS,管你用不用西班牙語和文字語音朗讀功能,統統預設一股腦給你裝上;

第三,它結實。Linux雖然免費,但是從創生出來就是以UNIX作為參考物件,完全可以勝任執行在一年都不關機一回的大型伺服器上。

但是,Linux這些優點,放到我專欄的主要閱讀群體——“文科生”——那裡,就不一定是什麼好事兒了。

因為Linux的學習曲線,很陡峭。

如何免費雲端執行Python深度學習框架?

所以,如果你固執地堅持在自己的電腦上執行TuriCreate,又不願意學Linux,那可能就得去買臺Macbook了。

但是,誰說執行程式碼一定要在自己的機器上呢?

雲端

你可以把TuriCreate安裝在雲端——只要雲端的主機是Linux就好。

你可能怒了,覺得我是在戲耍你——我要是會用Linux,就直接本地安裝了!本地的Linux我都不會用,還讓我遠端使用Linux?!你什麼意思嘛?

彆著急,聽我把話說完。

雲端的Linux主機,大多是隻給你提供個作業系統,你可以在上面自由安裝軟體,執行命令。

這樣的雲端系統,往往需要你具備相當程度的IT專業知識,才能輕鬆駕馭。

更要命的是,這種租用來的雲主機,要麼功能很弱,要麼很貴。

那種幾十塊錢一個月的主機,往往只有一個CPU核心。跑深度學習專案?只怕你還沒獲得結果,別人的論文都發出來了。

有沒有高效能主機?當然有。

例如亞馬遜的AWS,就提供了p2.xlarge這樣的配置供你選擇。有了它,執行深度學習任務遊刃有餘。

如何免費雲端執行Python深度學習框架?

但是它很貴

有人計算過,如果你需要長期使用深度學習功能,還是本地組裝一臺高效能電腦比較划算。

另外,雖然亞馬遜已經幫你做了很多準備工作。你從開始折騰這臺雲主機到真正熟練掌握使用,還是要花些功夫。

從網上找一篇靠譜的教程後,經過自己的反覆實踐,不斷求助,最終你會掌握以下技能:

  • 硬體配置含義;
  • 雲平臺信用卡支付方式;
  • 控制皮膚使用;
  • 計費原理;
  • 競價規則;
  • 例項使用限制;
  • 定製例項型別選擇;
  • 安全規則設定;
  • 公鑰私鑰的使用;
  • 加密通訊ssh連線;
  • 檔案許可權設定;
  • 其他……

瞭解瞭如何最省錢地執行高配置AWS虛擬主機,知道該在何時啟動和關閉例項。一個月下來,你看著賬單上的金額如此之少,會特別有成就感吧。

問題是,你最初是想要幹什麼來著?

你好像只是打算把手頭的照片,利用TuriCreate上的卷積神經網路快速做個分類模型出來吧?

所以,這種折騰不是正道。

在某些時刻,做出正確的選擇比盲目付出努力重要得多。

你應該選擇一個雲平臺,它得具有如下特色:

你不必會Linux,也不用從頭裝一堆基礎軟體。開啟就能用,需要哪個額外的功能,一條指令就搞定。提供高效能GPU用來執行深度學習程式碼……最好還免費。

你是不是覺得我在做夢?猶豫著要不要趕緊喊我醒過來?

這不是做夢,真的有這樣的好事兒。

發現

本文推薦給你的雲執行環境,是由Google提供的Colaboratory,下文簡稱Colab。

如何免費雲端執行Python深度學習框架?

其實這個工具已經存在了好幾年了。

最初版本由Google和Jupyter團隊合作開發。只是最近才迭代到漸入佳境的狀態。經過這篇Medium文章的推廣,吸引了很多研究者和學習者的關注。

如何免費雲端執行Python深度學習框架?

官方的介紹是:

Colaboratory 是一款研究工具,用於進行機器學習培訓和研究。它是一個 Jupyter 筆記本環境,不需要進行任何設定就可以使用。

請用Google Chrome瀏覽器開啟這個連結,你可以看到這份“Colaboratory簡介”。

如何免費雲端執行Python深度學習框架?

雖然外觀不同,但是它實際上就是一份Jupyter Notebook筆記本。

我們嘗試執行一下其中的語句。

注意這個筆記本里面的語句,其實是Python 2格式。但是預設筆記本的執行環境,是Python 3。

所以,如果你直接執行第一句(依然是用Shift+Enter),會報錯。

解決辦法非常簡單,開啟上方工具欄中的“程式碼執行程式”標籤頁。

如何免費雲端執行Python深度學習框架?

選擇最下方的“更改執行時型別”。

如何免費雲端執行Python深度學習框架?

將預設的Python 3改成Python 2之後,點選右下角的儲存按鈕。

然後我們重新執行第一個程式碼區塊的語句。這次就能正常輸出了。

如何免費雲端執行Python深度學習框架?

語句區塊2就更有意思了。它直接呼叫Google自家的深度學習框架——tensorflow軟體包。

如何免費雲端執行Python深度學習框架?

我曾經專門為tensorflow的安裝寫過教程。但是在這裡,你根本就沒有安裝tensorflow,它卻實實在在為你工作了。

不僅是tensorflow,許多常用的資料分析工具包,例如numpy, matplotlib都預設安裝好了。

對於這些基礎工具,你一概不需要安裝、配置、管理,只要拿過來使用就行。

我們執行最後一個程式碼單元。

如何免費雲端執行Python深度學習框架?

看,圖片輸出都毫無問題。

程式設計環境領域的即插即用啊!太棒了!

可是興奮過後,你可能覺得不過如此——這些軟體包,我本地機器都正確安裝了。執行起來,再怎麼說也是本地更方便一些啊。

沒錯。

但是安裝TuriCreate時,你的Windows作業系統不支援,對不對?

下面我為你展示如何用Colab執行TuriCreate,進行深度學習。

資料

我把需要分類的影像資料以及ipynb檔案都放到了這個github專案中。請點選這個連結下載壓縮包。

下載後解壓到本地硬碟。

如何免費雲端執行Python深度學習框架?

可以看到,其中包含一個ipynb檔案和一個image目錄。

image目錄內容,就是你之前在《如何用Python和深度神經網路尋找近似圖片?》一文中已經見過的哆啦a夢和瓦力的圖片。

如何免費雲端執行Python深度學習框架?

這是藍胖子的圖片:

如何免費雲端執行Python深度學習框架?

這是瓦力的圖片:

如何免費雲端執行Python深度學習框架?

請用Google Chrome瀏覽器(目前Colab尚不支援其他瀏覽器)開啟這個連結,開啟你的Google Drive。

當然,如果你還沒有Google賬號,需要註冊一個,然後登入使用。

如何免費雲端執行Python深度學習框架?

下面,把你剛剛解壓的那個資料夾拖拽到Google Drive的頁面上,系統自動幫你上傳。

如何免費雲端執行Python深度學習框架?

上傳完成後,在Google Drive裡開啟這個資料夾。

如何免費雲端執行Python深度學習框架?

demo_python_image_classification.ipynb檔案上單擊滑鼠右鍵。選擇開啟方式為Colaboratory。

如何免費雲端執行Python深度學習框架?

Colab開啟後的ipynb檔案如下圖所示。

如何免費雲端執行Python深度學習框架?

我們首先需要確定執行環境。點選選單欄裡面的“修改”,選擇其中的“筆記本設定”。

如何免費雲端執行Python深度學習框架?

確認執行時型別為Python 2,硬體加速器為GPU。如果不是這樣的設定,請修改。然後點選儲存。

如何免費雲端執行Python深度學習框架?

資料有了,環境也已配置好。下面我們正式開始執行程式碼了。

程式碼

我們嘗試讀入TuriCreate軟體包。

import turicreate as tc
複製程式碼

結果會有如下報錯。

如何免費雲端執行Python深度學習框架?

遇到這個報錯很正常。

因為我們還沒有安裝TuriCreate。

不是說不需要安裝深度學習框架嗎?

那得看是誰家的深度學習框架了。

Colab預設安裝Tensorflow,因為它是Google自家開發的深度學習框架。

而TuriCreate是蘋果的產品,所以需要我們們手動安裝。

手動安裝很麻煩嗎?

才不會。

新開一個程式碼單元,然後輸入以下一行語句:

!pip install turicreate
複製程式碼

你就可以看到Colab幫你辛勤地安裝TuriCreate以及全部依賴包了,根本不用自己操心。瞬間就安裝好了。

如何免費雲端執行Python深度學習框架?

我們重新呼叫TuriCreate。

import turicreate as tc
複製程式碼

這次成功執行,再沒有出現報錯。

下面我們需要做一件事情,就是讓Colab可以從我們的資料資料夾裡面讀取內容。

可是預設狀態下,Colab根本就不知道我們的資料資料夾在哪裡——即便我們本來就是從Google Drive的演示資料夾下面開啟這個ipynb檔案的。

我們首先要讓Colab找到Google Drive的根目錄。

這原本是一個相對複雜的問題。但是好在我們有現成的程式碼,可以拿來使用。

請執行下面這個單元格的程式碼。看不懂不要擔心。因為你不需要調整其中的任何語句。

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
複製程式碼

執行剛開始,你會看到下面的執行狀態。

如何免費雲端執行Python深度學習框架?

過了一小會兒,你會發現程式停了下來。給你一個連結,讓你點選。並且囑咐你把獲得的結果填入下面的文字框。

如何免費雲端執行Python深度學習框架?

點選連結,你會看到下圖。

如何免費雲端執行Python深度學習框架?

點選你自己的Google賬號。

然後會提示你Google Cloud SDK的許可權請求。

如何免費雲端執行Python深度學習框架?

點選允許後,你就獲得了一長串字元了。複製它們。

如何免費雲端執行Python深度學習框架?

回到Colab頁面上,把這一長串字元貼上進去,回車。

如何免費雲端執行Python深度學習框架?

你可能認為執行完畢。不對,還需要第二步驗證。

又出來了一個連結。

如何免費雲端執行Python深度學習框架?

點選之後,還是讓你選擇賬號。

如何免費雲端執行Python深度學習框架?

然後Google Cloud SDK又提出了許可權要求。注意和上次的請求許可權數量不一樣

如何免費雲端執行Python深度學習框架?

你需要再複製另外的一串新字元。

如何免費雲端執行Python深度學習框架?

貼上回去,回車。這次終於執行完畢。

如何免費雲端執行Python深度學習框架?

好了,現在Colab已經接管了你的Google Drive了。我們給Google Drive雲端硬碟的根目錄起個名字,叫做drive。

!mkdir -p drive
!google-drive-ocamlfuse drive
複製程式碼

然後,我們告訴Colab,請把我們當前的工作目錄設定為Google Drive下的demo-python-image-classification-Google-colab-master資料夾。

import os
os.chdir("drive/demo-python-image-classification-Google-colab-master/")
複製程式碼

好了,準備工作完畢,我們繼續。

我們需要告訴TuriCreate,影像資料資料夾在哪裡。

img_folder = 'image'
複製程式碼

然後,我們讀入全部影像檔案到資料框data。

data = tc.image_analysis.load_images(img_folder, with_path=True)
複製程式碼

這裡,你會發現讀入速度比較慢。這確實是個問題,是否是因為TuriCreate的SFrame資料框在Colab上有些水土不服?目前我還不能確定。

好在我們們樣例中的檔案總數不多,還能接受。

如何免費雲端執行Python深度學習框架?

終於讀取完畢了。

我們看看data中包含哪些資料吧。

data
複製程式碼

跟Jupyter Notebook本地執行結果一致,都是檔案路徑,以及圖片的尺寸資訊。

如何免費雲端執行Python深度學習框架?

下面,我們還是給圖片打標記。

來自哆啦a夢資料夾的,標記為doraemon;否則標記為walle。

data['label'] = data['path'].apply(lambda path: 'doraemon' if 'doraemon' in path else 'walle')
複製程式碼

再看看data資料框內容。

data
複製程式碼

可見,標記已經成功打好。

如何免費雲端執行Python深度學習框架?

我們嘗試用explore()函式瀏覽data資料框,檢視圖片。

data.explore()
複製程式碼

但是很不幸,TuriCreate提示我們,該功能暫時只支援macOS.

如何免費雲端執行Python深度學習框架?

別忘了,我們現在使用的,是Linux作業系統,所以無法正常使用explore()函式。不過這只是暫時的,將來說不定哪天就支援了。

幸好,這個功能跟我們的影像分類任務關係不大。我們繼續。

把資料分成訓練集與測試集,我們使用統一的隨機種子取值,以保證我們們獲得的結果可重複驗證。

train_data, test_data = data.random_split(0.8, seed=2)
複製程式碼

下面我們正式建立並且訓練模型。

model = tc.image_classifier.create(train_data, target='label')
複製程式碼

執行的時候,你會發現,原本需要很長時間進行的預訓練模型引數下載,居然瞬間就能完成。

這是怎麼回事兒?作為思考題,留給你自行探索解答。給你一個小提示:雲端儲存。

如何免費雲端執行Python深度學習框架?

TuriCreate自動幫我們處理了影像尺寸歸一化,並且進行了多輪迭代,尋找合適的超引數設定結果。

好了,我們嘗試用訓練集生成的模型,在測試集上面預測一番。

predictions = model.predict(test_data)
複製程式碼

預測結果如何?我們用evaluate()函式來做個檢驗。

metrics = model.evaluate(test_data)
print(metrics['accuracy'])
複製程式碼

結果如下:

0.935483870968
複製程式碼

我們看看預測的結果:

predictions
複製程式碼
dtype: str
Rows: 31
['doraemon', 'walle', 'walle', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle']
複製程式碼

再看看實際的標記:

test_data['label']
複製程式碼
dtype: str
Rows: 31
['walle', 'walle', 'walle', 'walle', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle', 'walle', 'doraemon', 'doraemon', 'doraemon', 'walle', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'doraemon', 'walle']
複製程式碼

兩相比對,我們希望找出那些錯誤預測的圖片儲存位置:

test_data[test_data['label'] != predictions]['path']
複製程式碼

如何免費雲端執行Python深度學習框架?

下面我們需要直觀瀏覽一下預測錯誤的影像。

讀入Jupyter的Image模組,用於展示影像。

from IPython.display import Image
複製程式碼

我們先來展示第一幅影像:

Image(test_data[test_data['label'] != predictions]['path'][0])
複製程式碼

結果如下:

如何免費雲端執行Python深度學習框架?

還是老樣子,50層的深度神經網路模型,已經無法讓人直觀理解。所以我們無法確切查明究竟是哪個判定環節上出了問題。

然而直觀猜測,我們發現在整個照片裡,方方正正的瓦力根本就不佔主要位置。反倒是圓頭圓腦的機器人成了主角。這樣一來,給圖片形成了比較嚴重的噪聲。

我們再來看看另一幅圖:

Image(test_data[test_data['label'] != predictions]['path'][1])
複製程式碼

結果是這樣的:

如何免費雲端執行Python深度學習框架?

這幅圖裡面,同樣存在大量的干擾資訊,而且就連哆啦a夢也做了海盜cosplay。

好了,到這裡,我們的程式碼遷移到Colab工作順利完成。

如你所見,我們不需要在本地安裝任何軟體包。只用了一個瀏覽器和一個從github下載的資料夾,就完成了TuriCreate深度學習的(幾乎)全部功能。

比起虛擬機器安裝Linux,或者自己設定雲端Linux主機,是不是輕鬆多了呢?

小結

通過閱讀本文,希望你已經掌握了以下知識點:

  • 某些深度學習框架,例如TuriCreate,會有平臺依賴;
  • 除了本地安裝開發環境外,雲端平臺也是一種選擇;
  • 選擇雲端平臺時,特別要注意設定的簡便性與價效比;
  • 如何將資料和程式碼通過Google Drive遷移到Colab中;
  • 如何在Colab中安裝缺失的軟體包;
  • 如何讓Colab找到資料檔案路徑。

另外,請你在為需求選擇工具的時候,記住哈佛大學營銷學教授萊維特(Theodore Levitt)的那句經典名言:

人們其實不想買一個1/4英寸的鑽頭。他們只想要一個1/4英寸的洞。

這句話不僅對學習者和開發者有用。

對於產品的提供者,意義只怕更為重大。

討論

你之前正確安裝了TuriCreate了嗎?用的什麼作業系統?你嘗試過在雲端執行Python程式碼嗎?有沒有比Colab更好的雲端程式碼執行環境?歡迎留言,把你的經驗和思考分享給大家,我們一起交流討論。

喜歡請點贊。還可以微信關注和置頂我的公眾號“玉樹芝蘭”(nkwangshuyi)

如果你對資料科學感興趣,不妨閱讀我的系列教程索引貼《如何高效入門資料科學?》,裡面還有更多的有趣問題及解法。

相關文章