[ML]Colab介紹&如何在Colab上使用Tensorboard

Posted by John on 2018-07-13
Words 1.2k and Reading Time 4 Minutes
Viewed Times

以往在撰寫Python程式碼時,我都是使用Jupyter-notebook做為開發環境,互動式介面這個特色真的很吸引人,能夠區塊式的執行程式碼,並可以搭配Markdown語法將程式碼編輯成類似筆記的形式。

但開始接觸深度學習後,開始遇上效能的問題了,比方說使用CNN訓練CIFAR-10在我的電腦上一個epoch需要將近兩分鐘,整個訓練下來花上了不少時間……,於是我最近開始改用Google的Colab做為開發環境,Colab一大特色就是提供了GPU(Nvidia Tesla K80 GPU)讓使用者可以在訓練的時候使用他們的GPU進行加速!!光是這點就值得我來使用Colab了,實測後使用相同的code訓練CIFAR-10一個epoch只需要9秒

unnamed-file


colab介紹

1_g_x1-5iyrn-smdvucceiwwcolab網址: 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。

21
31
41

一般在自己裝置上進行模型訓練的,只要在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來觀察模型訓練過程的很夠用了。

51這個網站利用的也是同樣的原理,我們在google的virtual machine上架ngrok和

tensorboard,得到一組網址後,就可以從外部透過這個網址進入virtual machine上的tensorboard了!

以下是擷取自該網站的步驟,我把他翻成中文並用自己的理解重新介紹:

Step1. 在Colab下下載Ngrok,在前面加上!就可以使用linux下的command

1
2
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip

Step2.指定訓練過程的紀錄檔(logdir)要存放在virtual machine下的哪個位置,並開啟tensorboard service(port 6006)

1
2
3
4
5
LOG_DIR = './log'
get_ipython().system_raw(
'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
.format(LOG_DIR)
)

Step3.開啟ngrok service,並綁定port 6006(tensorboard)

1
get_ipython().system_raw('./ngrok http 6006 &')

Step4.產生一組網址,這組接下來只要從外部連到這組網址,就會導向virtual machine的port 6006,也就是colab裝置內的tensorboard了!

1
2
! curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

最後,網址裡面也有附上colab的檔案,可以下載下來對照就知道怎麼做了。


>