Day17 - Google Colab

斜槓學習 – 零基礎成為 AI 解夢大師秘笈

本文作者:Eric

作者 Github : https://github.com/Ratherman

系列文章簡介

自由團隊將從0到1 手把手教各位讀者學會(1)Python基礎語法、(2)Python Web 網頁開發框架 – Django 、(3)Python網頁爬蟲 – 周易解夢網、(4)Tensorflow AI語言模型基礎與訓練 – LSTM、(5)實際部屬AI解夢模型到Web框架上。

學習資源

AI . FREE Team 讀者專屬福利 → Python Basics 免費學習資源

學習目標

1. 簡介 Google Colab Notebook

Google Colab Notebook 是一個很像是 Jupyter Notebook 的工具,不過它是 Run 在雲端環境上面的,相信現在的每個人都有一個 Google Account,每個 Account 都會有對應的雲端硬碟(Google Drive),我們能夠在 Google Drive 上面建立並開啟 Google Colab Notebook 的,開啟 Notebook 之後我們就可以將 python 程式碼以及對應的筆記內容寫在上面了,會像是下圖這樣:
https://ithelp.ithome.com.tw/upload/images/20201002/20130712TM9aQpqAuY.png

2. 開啟 Google Colab

今日目標有提到,今天的所有內容大家都可以直接使用這個 Google Colab Notebook 連結,這是我們幫大家寫好做為示範使用的 Notebook。不過如果要自己真的建立一個 Google Colab Notebook,那要如何建立呢?

(1) 登入 Google Account 並開啟 Google Drive

(2) 在空白區域點選滑鼠右鍵,將會跳出如下圖選項

右鍵 > More > Google Colaboratory

https://ithelp.ithome.com.tw/upload/images/20201002/20130712hANlNondUp.png

(3) 進到 Notebook 介面當中,開始編輯。

https://ithelp.ithome.com.tw/upload/images/20201002/20130712BjKr3F9FTH.png
在這邊大家如果點擊左方的 folder icon 會看到一開始 Google 就送給我們的 sample_data,我們可以在不連動到自己 Google Drive 檔案的情況下就可以有一些資料可以操作,不過我們待會會需要 clone 之前提過的 Django Chatterbot 專案,所以勢必要連結到 Google Account 的,我們繼續往下走!

Note:以下內容會從頭一個cell一個cell和大家一起走過,在上方提到的 Google Colab Notebook 連結是完整版,大家可以在開發過程中參考喔。

3. 將 Google Drive 連結到 Google Colab Notebook

  • 首先點擊右上角 Connect > Connect to hosted runtime 藉以使用 Google 的機器

  • 然後將下方的程式碼寫入 Cell

from google.colab import drive
drive.mount("/content/drive")
  • 在這邊選擇要連結的 Google Account

  • 然後將一長串類似於 token 的亂碼複製並貼在 textbot 內

  • 完成後將會發現左方資料夾內容和 Google Drive 的內容同步了(如果沒有的話,點選上方 Refresh Folder Icon)

4. 切換路徑並下載 Django Chatterbot 專案

在 Google Colab Notebook 當中同樣也具備 Command Line/ Terminal 的功能,我們可以在上面利用 shell command 建立資料夾、切換路徑等等,所以在分別執行以下 cells 之後,我們將可以建立資料夾,然後將專案放入目標位置。

Note: 若要在 Google Colab 當中執行 shell command,需要在前方加入 驚嘆號(!)或是百分比符號(%),這樣 Notebook 才知道這個 cell 不是 python code。

  • %cd 是用來切換路徑的,下方的教學只有這個 command 會用到 %;另外 !cd 不會切換路徑,只能用來判斷該路徑是否存在,本教學不會使用到此 command。

  • 其他常見的 shell command 有: ! python test.py,! mkdir New_Folder,! ls, ...

建立資料夾

%cd "./drive/My Drive"
!mkdir django_chatterbot # 只有第一次執行此 cell 會需要此行,第二次之後就可以把這一行註解掉了
%cd django_chatterbot

首先,我們先將自己的路徑切入 My Drive/ 目錄底下,然後建立一個 django_chatterbot/ 目錄,然後再切入。這個時候因為我們已經連動了 Google Drive 和 Google Colab Notebook,所以大家可以在 Google Drive/My Drive(我的雲端硬碟)當中看到有多一個名為django_chatterbot的資料夾。
https://ithelp.ithome.com.tw/upload/images/20201002/20130712jwO5eb1qno.png

clone 專案

# 只有第一次執行此 cell 會需要此行,第二次之後就可以把這一行註解掉了
!git clone https://github.com/gunthercox/ChatterBot.git

切入路徑至我們昨天操作的 app 裡面 (i.e. example_app)

%cd "./ChatterBot/examples/django_app"
!ls

這邊利用 !ls 會列出目前路徑底下所有的檔案和目錄。在這裡會看到一個 requirements.txt 的檔案,這個檔案是用來告訴新的開發者們應該要 install 什麼特定版本的特定套件,我們下面就要利用它來安裝套件。

調整 requirements.txt 內容

原本的 requirements.txt 其第二行(關於 chatterbot 套件的版本描述)是被註解掉的,不過我們會等等會需要將 chatterbot 這個套件一起安奘,所以這邊要記得把註解拿掉,變成以下這樣。

django>=2.2,<2.3
chatterbot>=0.8,<1.1

然後記得存檔: ctrl + s

Note: 開啟 requirements.txt 需要依序點選左側的目錄,其詳細的路徑是: drive/ My Drive/ django_chatterbot/ ChatterBot/ examples/ django_app/ requirements.txt ,如同下圖顯示
https://ithelp.ithome.com.tw/upload/images/20201002/20130712BEyl0meyoc.png

安裝套件

!pip3 install -r requirements.txt

調整 settings.py

之前有發現 settings.py 裡面的 MIDDLEWARE_CLASSES 需要置換成 MIDDLEWARE,然後要將其中的一行設定註解掉。

MIDDLEWARE  = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 記得註解
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

記得做 Django Migrate,待會兒 run server 才會順利

! python manage.py migrate

我們在這邊是已經和 manage.py 存在於同一個路徑底下了,所以可以直接這樣用。

5. Run Server

! python manage.py runserver

在這邊可以看到 cell 成功的執行了,但是它跳出來的連結(i.e. http://127.0.0.1:8000/ )並不是我們可以 access 的到的連結,因為我們是遠端使用 Google的機器,所以真的要透過連結看到服務,也得從那台機器才能做到,所以我們會需要想辦法將這個服務 expose 在 Public IP 上!

6. 讓服務 Run 在 Public IP 上

下面的程式碼有參考了 Stack Overflow 上面的這篇文章(Is there a general way to run Web Applications on Google Colab?),大家有興趣可以點進去了解喔!

### 安裝 Ngrok
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip

### Run ngrok to tunnel Django app port 8050 to the outside world. 

### This command runs in the background.
get_ipython().system_raw('./ngrok http 8050 &')

### Get the public URL where you can access the Django app. Copy this URL.
! curl -s http://localhost:4040/api/tunnels | python3 -c \
    "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

# 在這邊,將會得到類似於 https://c1fed6636b67.ngrok.io 這樣子的網址,這就是我們要用的 Public IP
# 請大家將其中的 c1fed6636b67.ngrok.io 加入到 ChatterBot/examples/django_app/example_app/settings.py 內的 ALLOWED_HOSTS 裡面。
# 接著就可以進到 https://c1fed6636b67.ngrok.io 使用 chatbot 服務了!
# 利用 manage.py 將服務 run 在 port = 8050,因為上面的方法就是將 8050這個 port expose 在網路世界當中。
! python manage.py runserver 8050
  • 我們在這邊是使用到昨天也有用到 Ngrok: 先是透過 !wget 下載壓縮檔之後,再利用 !unzip 解壓縮。

  • 接著使用 ngrok http 8050 將 8050 port 打開,我們將會把 service run 在 8050 port (並非之前預設的 8000 port)

  • 使用 ! curl ... 取得對應的 Public IP。

  • 取得 url 之後要到 settings.py 調整 ALLOWED_HOSTS 的設定,見上方說明。

  • 最後利用 python manage.py runserver 8050 讓服務 run 在 8050 port。

7. 使用服務

大家點進被 assign 到的連結之後,都有看到 Django Chatterbot 好好的運作了嗎? 有的話,就可以開始和它聊天囉!

邁向 AI 解夢大師 - 第十七天

我們在今天在雲端上面跑 Django Chatterbot APP,從第一天開始,到今天的內容,都算是在為未來的解夢服務鋪路,從明天開始進入 AI 處理的範疇,我們將會進入資料面的處理,同時會介紹爬蟲的應用。

參考連結

想更深入認識 AI . FREE Team?

自由團隊 官方網站:https://aifreeblog.herokuapp.com/
自由團隊 Github:https://github.com/AI-FREE-Team/
自由團隊 粉絲專頁:https://www.facebook.com/AI.Free.Team/
自由團隊 IG:https://www.instagram.com/aifreeteam/
自由團隊 Youtube:https://www.youtube.com/channel/UCjw6Kuw3kwM_il39NTBJVTg/

文章同步發布於:第十二屆 IT 挑戰賽部落格

(繼續閱讀下一篇教學...)