窮學生學習神經網絡一定體會過“等待”的痛苦。。。
循環一次epoch急死人,但是有幾十個上百個循環等著你!
你盯著屏幕看著進度條像蝸牛一樣推進,真是恨鐵不成鋼,心想等日后發達了一定要買一臺好電腦...
只能先干干其他的事兒,但是心里又不放心,總是會來看,結果還是沒訓練完,算了,正事兒是干不了了,刷刷手機吧~... ...(半小時過去)
終于訓練完啦!看看結果:
woc...@#$&&**&苦逼地重新訓練一次....o(╥﹏╥)o
前幾天看網上說Google推出了免費的GPU專門給機器學習的窮孩子們用!頓時讓我激動了起來,馬上去試用了一下。(哦,自備梯子...)
參考教程:
Google Colab Free GPU Tutorial
薅資本主義羊毛,用Google免費GPU
但是因為自己的項目跟教程中的不太一樣,有一些細節沒有說清楚,查了很多資料終于解決,決定這里把我自己的使用過程記錄下來:
Google Colaboratory
直接Google一下:
點擊進去看看:
發現是Colaboratory的簡介,里面附有一些簡單的代碼告訴你怎么使用這個玩意兒。你會發現它跟Jupyternotebook很像,因為它就是在jupyter notebook基礎上開發的:
所以很好理解,Google給你準備了一個云端的jupyter notebook,你把你的代碼搬過來,在云端運行你的代碼,耗費的不是你自己電腦的計算力,而是Google Colaboratory的計算力,而Google Colaboratory配備了Tesla K80 GPU!這可是貴族用的玩意兒呀,哎呀撿著大便宜了!
但是這個GPU不是默認開啟的,需要你設置一下notebook,很簡單:
點擊筆記本上的“修改(edit)-->筆記本設置(notebook setting)”:
就出現了下面的窗口,在“硬件加速器”中選擇“GPU”即可:
吼吼,就好了!
上面介紹的是Colaboratory的簡單使用和怎么開啟GPU,下面介紹怎么把本地的項目放到云端運行:
Google drive+Colaboratory 運行你的項目
Google Colaboratory是基于Google云端硬盤(drive)的,你的所有代碼文件都會保存在Google Drive中,所有我們首先需要Google drive。
先說說我自己的是什么項目吧:
我在本地的notebook中有這樣的一個做“神經網絡風格遷移(neural style transfer)”的項目,目錄如下:
.ipynb就是我的jupyter notebook文件,
imagenet-vgg-verydeep-19是我下載的VGG神經網絡模型,
nst_utils.py里面有一些功能函數,也需要在.ipynb中調用。
什么是neural style transfer呢?就是做這個:
這個神經網絡跑起來可是相當費時的,我自己的電腦,生成一個400×300大小的圖片,跑200個epoch需要30分鐘!所以雖然這個項目很激動人心,但是等一次結果真的很急人!
好了,現在我們開始把這個本地項目轉移到Google drive上,并通過Colaboratory來運行!:
1.把文件夾上傳到Google drive
圖中的NST文件夾就是我上傳的。目錄結構跟我本地的一樣:
文件不能直接打開,但是Google drive里面有Colaboratory插件,可以打開.ipybn文件:
右鍵選擇打開方式:
我的這個文件里面,需要import我的NST文件夾中的nst_utils.py文件,因為里面寫了很多重要函數,但運行一下程序,肯定會報錯,說找不到nst_utils.py文件。
為啥呢?因為Colaboratory并沒有關聯你的Google drive!所以,接著設置:
2.安裝必要的庫,授權,連接你的Google drive
這個Colaboratory很牛逼的一點就是,它不光是一個notebook,還可以當命令行用!
我們在所有代碼前面,加一個單元格,粘貼如下命令:
!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}
運行!你應該看到類似下面這種結果:
點擊結果里面的驗證鏈接,會跳到一個網頁,顯示一長串驗證碼,
將驗證碼復制粘貼到上面的框框中,回車!
好了,然后再在一個新單元格中輸入下面命令:
!mkdir -p drive
!google-drive-ocamlfuse drive
再運行!就設置好了!
這樣,Google drive就和Google Colaboratory連接好了,基本就可以像操作本地文件一樣來操作云端的代碼了。
3.如何導入Google drive中的文件
現在如果直接寫:
from nst_utils import *
還是會報錯,說找不到!這個地方折磨了我好久,不知道怎么回事兒。
后來發現,Colaboratory好像是單獨創建了一個虛擬機,在虛擬機中只有我運行的ipybn文件,而沒有NST文件夾中的其他文件。
我們在前一步的設置,只是讓Colaboratory和drive連接了,也就是Colaboratory可以調用drive中的文件了,但是應該通過類似絕對路徑的方式導入,所以正確的方法應該是寫:
from drive.NST.nst_utils import *
drive就是我們的根目錄,通過“ . ”來進入下一層目錄,這樣就可以導入我們的drive文件了!
同樣的,后面我們需要導入NST文件夾中的imagenet-vgg-verydeep-19.mat文件,也就是我們的神經網絡模型,這樣寫是錯誤的:
model = load_vgg_model("imagenet-vgg-verydeep-19.mat")
正確的寫法是:
model = load_vgg_model("drive/NST/imagenet-vgg-verydeep-19.mat")
同樣的,只要是要導入drive中的文件,都按照類似的絕對路徑的方法來導入就可以了。
4.看看這個GPU效果如何
具體代碼就不展示了,只給大家看看模型運行的結果:
運行了200個epoch,共耗時46秒!
而我在本地運行,花了30分鐘左右~
可見這個速度提升地多塊!Google大法好啊~
下面附上每20次迭代的結果:
最開始的圖片是這兩張:
最后生成的圖片是:
好了,關于Colaboratory的使用就先介紹到這里,主要我目前只知道這么多。。。日后有新的經驗會繼續更新!
8月1號更新:
這幾天在使用中發現,掛載google drive的那兩段命令,在每一次新建一個notebook時都需要運行一次,所以大家可以把那兩段命令放在一個方便查看的地方,隨時復制粘貼。
而且,一個項目可能到了第二天就不能連接drive了,這個時候需要再運行一下命令。反正我的項目都是第二天早上起來就需要重新連接drive了。
所以還是稍微有些麻煩。。。
另外,第一次運行命令的時候,跳出來一個鏈接,點擊然后輸入驗證碼之后,可能它又會跳出來一個一模一樣的鏈接,同時整個版面像被清空了一樣,這個時候,只要再次點擊鏈接,再次輸入驗證碼然后回車,看到“Access token retrieved correctly.” 就說明可以了。
然后別忘了另起一行,運行:
!mkdir -p drive
!google-drive-ocamlfuse drive
然后就可以連接drive了。
歡迎關注我的“深度學習”專欄:
DeepLearning.ai學習筆記
和我一起一步步學習深度學習吧!