iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
AI & Data

然後模型就死在 Jupyter Notebook 了 (ಥ﹏ಥ)系列 第 29

[Day 29] Final Project (5/5) — 部署 App 到 Google App Engine

前情提要

昨天我們成功將模型部署到 Google AI Platform 上,並且也處理了授權的問題,最後讓 App 成功的運作了,今天我們要完成最後一個步驟 — 部署 app 到 App Engine,也就是完成工作流程中剩下的部分:
True workflow
最後我們就能像下圖一樣透過網址來存取 App 進行預測了:
app

將 App 部署到 App Engine

今天的內容會進展得比較快,要好好跟上哦:

  1. 首先在終端機執行 make gcloud-deploy,然後等個幾分鐘。

然後 App 就部署成功了,可以到 GCP 的主控台,應該可以看到資源的部分出現了 App Engine:
console

哈哈,到底發生了什麼事,其實當我們執行 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 實際上會完成以下幾件事:

  • 把 App 放進以 ironbird/Dockerfile 定義的 Docker 容器 (container) 中。

    可以把 Docker 容器想像成一個生態瓶,裡面包含了支援 App 生存的生態系,而帶著這個容器就能讓我們的 App 在任何能使用的 Docker 的地方跑起來。

  • 等 Docker 容器建立完成後,再把它變成 Docker 映像檔 (image)。

    把它想成容器的快照版本,也就是拿到哪都不會改變。

  • 把 Docker 映像檔上傳到 Google Container Registry (GCR)
  • 等 Docker 映像檔放進 GCR 後,它就能被部署到以 ironbird/app.yaml 定義的 App Engine 實例 (instance) 中,而 app.yaml 其實只有兩行:
    runtime: custom # 想要執行我們自訂的 Docker 容器
    env: flex # 想要 App Engine 有彈性一點,並安裝我們需要的函式庫 (requirement.txt)
    

如果今天的步驟都順利完成的話,我們就能在以下網址使用 App 了:

http://<YOUR_PROJECT_NAME>.ue.r.appspot.com/

解密 Ironbird

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.pyapp.py 會使用的幫手函式。(避免 App 變得太大)

上一篇
[Day 28] Final Project (4/5) — 部署模型到 Google AI Platform
下一篇
[Day 30] 完賽心得 — 大家可以回家啦
系列文
然後模型就死在 Jupyter Notebook 了 (ಥ﹏ಥ)30

尚未有邦友留言

立即登入留言