昨天我們成功將模型部署到 Google AI Platform 上,並且也處理了授權的問題,最後讓 App 成功的運作了,今天我們要完成最後一個步驟 — 部署 app 到 App Engine,也就是完成工作流程中剩下的部分:
最後我們就能像下圖一樣透過網址來存取 App 進行預測了:
今天的內容會進展得比較快,要好好跟上哦:
make gcloud-deploy
,然後等個幾分鐘。然後 App 就部署成功了,可以到 GCP 的主控台,應該可以看到資源的部分出現了 App Engine:
哈哈,到底發生了什麼事,其實當我們執行 make gcloud-deploy
會觸發 Makefile (ironbird/Makefile) 裡的 gcloud-deploy
指令,而它實際上會執行:
gcloud app deploy app.yaml
因為前面我們已經安裝好了 Google Cloud SDK,所以我們可以使用 gcloud
的功能,而上面的指令的意思是請 Google Cloud 把該做的事情做一做,讓我們本機端的 App (ironbird/app.py
) 可以在 App Engine 上執行。
而 gcloud app deploy
實際上會完成以下幾件事:
可以把 Docker 容器想像成一個生態瓶,裡面包含了支援 App 生存的生態系,而帶著這個容器就能讓我們的 App 在任何能使用的 Docker 的地方跑起來。
把它想成容器的快照版本,也就是拿到哪都不會改變。
app.yaml
其實只有兩行:
runtime: custom # 想要執行我們自訂的 Docker 容器
env: flex # 想要 App Engine 有彈性一點,並安裝我們需要的函式庫 (requirement.txt)
如果今天的步驟都順利完成的話,我們就能在以下網址使用 App 了:
http://<YOUR_PROJECT_NAME>.ue.r.appspot.com/
在 ironbird 資料夾 中有數個檔案,這裡將它們的功用整理如下:
.dockerignore
:在創造 Docker 容器時要忽略的檔案與資料夾 (跟 .gitignore
在 commit 時的功用類似)。Dockerfile
:一連串關於我們的 Docker 容器該怎麼建立的指示。Makefile
:讓我們可以使用像是 make gcloud-deploy
等簡單的指令來執行更複雜的指令 (請參考 What is a Makefile and how does it work?)。SessionState.py
:讓我們的 Streamlit app 保持狀態 (不要按個鈕就刪掉一切) 的 Python 腳本 (請參考 Streamlit 論壇)。app.py
:我們使用 Streamlit 建立的 Ironbird App。app.yaml
:一連串關於當我們部署 App 時該建立哪種 App Engine 實例的指示。requirement.txt
:所有執行 app.py
所需的函式庫。utils.py
:app.py
會使用的幫手函式。(避免 App 變得太大)