以往在撰寫Python程式碼時,我都是使用Jupyter-notebook做為開發環境,互動式介面這個特色真的很吸引人,能夠區塊式的執行程式碼,並可以搭配Markdown語法將程式碼編輯成類似筆記的形式。
但開始接觸深度學習後,開始遇上效能的問題了,比方說使用CNN訓練CIFAR-10在我的電腦上一個epoch需要將近兩分鐘,整個訓練下來花上了不少時間……,於是我最近開始改用Google的Colab做為開發環境,Colab一大特色就是提供了GPU(Nvidia Tesla K80 GPU)讓使用者可以在訓練的時候使用他們的GPU進行加速!!光是這點就值得我來使用Colab了,實測後使用相同的code訓練CIFAR-10一個epoch只需要9秒
colab介紹
colab網址: https://colab.research.google.com
使用時必須登入Google帳號,之後撰寫的檔案會存在你的雲端硬碟裡面。介面很像Jupyter-notebook,所以使用過Jupyter的人可以很快速上手,並且檔案最後也可以轉成(.ipython),非常方便。不過第一次使用時覺得較困擾的是快捷鍵的部分則不太一樣,比方說:
- Ctrl + M + M: 將該區塊變成Markdown模式
- Ctrl + M + D: 刪除該區塊
- Ctrl + M + A: 在上方新增一區塊
- Ctrl + M + B: 在下方新增一區塊
以上是我自己常用的幾個快捷鍵,執行則沒有差異,Ctrl + Enter是執行該區塊的程式碼,Shift + Enter也是執行該區塊的程式碼,並將目前框框跳到下一區塊。
詳細的使用教學我就不贅述了,畢竟網路上有很多介紹的比我清楚的人xD
TensorBoard簡介
Tensorboard是一個能夠視覺化呈現訓練過程中的一些相關數據(Accuracy、Loss、Gradient…)的套件,當使用Tensorflow或Keras在進行模型訓練的時候,可以透過這個套件去查看訓練中的一些數值變化,也可以查看tensorflow diagram。
一般在自己裝置上進行模型訓練的,只要在command下開啟tensorboard並指定訓練時的Logdir,就可以進入localhost:6060去查看tensorboard了。不過使用Colab的話則有一個問題:
Colab是Google提供我們一個虛擬環境讓我們執行程式碼的地方,如果再Colab上架設tensorboard,會因為我們不是localhost而無法進入該service,此時不是在自己裝置上執行的我們要怎麼使用tensorboard呢?
在Colab上使用Tensorboard
網路上找到一個英文版的解決方法,先附上參考來源: Quick guide to run TensorBoard in Google Colab,接下來我會用中文簡單介紹一下文章的內容,參照著該文章做,很快就可以在Colab上架設tensorboard。
首先,關鍵是我們要使用一個套件: Ngrok,這個套件可以把你原本在localhost上的service轉成一個網址,當外部有人連上這個網址的時候Ngrok就會把外部的請求轉送給你localhost上的某個port。架過網站的都知道,如果apache server架好了,但網路的IP不是public IP,外面的人怎麼連都還是連不進來,這時候如果用了Ngrok就會產生一個新的網址,外面的人只要連到這個網址就會被轉進來我們在localhost上某個port的服務。
Ngrok免費版的有限制,每天好像只能轉特定的數量,不過如果只是想使用Tensorboard來觀察模型訓練過程的很夠用了。
這個網站利用的也是同樣的原理,我們在google的virtual machine上架ngrok和
tensorboard,得到一組網址後,就可以從外部透過這個網址進入virtual machine上的tensorboard了!
以下是擷取自該網站的步驟,我把他翻成中文並用自己的理解重新介紹:
Step1. 在Colab下下載Ngrok,在前面加上!就可以使用linux下的command
1 | !wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip |
Step2.指定訓練過程的紀錄檔(logdir)要存放在virtual machine下的哪個位置,並開啟tensorboard service(port 6006)
1 | LOG_DIR = './log' |
Step3.開啟ngrok service,並綁定port 6006(tensorboard)
1 | get_ipython().system_raw('./ngrok http 6006 &') |
Step4.產生一組網址,這組接下來只要從外部連到這組網址,就會導向virtual machine的port 6006,也就是colab裝置內的tensorboard了!
1 | ! curl -s http://localhost:4040/api/tunnels | python3 -c \ |
最後,網址裡面也有附上colab的檔案,可以下載下來對照就知道怎麼做了。