到目前為止,我們學了很多深度學習與 NLP 的理論與實作,
甚至做過情感分析、文字生成、圖片分類等應用。
但如果模型只停留在 Jupyter Notebook 裡,那就還只是研究成果,
無法真正被一般使用者或其他系統利用。
模型部署 (Model Deployment) 就是要把我們的模型
包裝成「服務」,讓別人能透過網路呼叫,
像呼叫 Google 翻譯 API 一樣方便。
今天,我們就來介紹 Flask 和 FastAPI,
並看看如何使用 Flask 把深度學習模型變成一個小型 API。
API 全名是 Application Programming Interface(應用程式介面)。
可以把它想像成一個「溝通的橋樑」,讓不同的程式之間可以交換資料。
比如你在手機上打開天氣 App,輸入地點後就能看到天氣資訊。
但其實手機 App 本身沒有資料庫,它是透過「API」向後端伺服器發送請求,
伺服器回傳當地的天氣數據,App 再把它顯示出來。
在機器學習領域,我們可以把模型做成 API,讓外部的使用者或系統只要發送一段文字,
就能得到情感分析、翻譯或分類的結果。
我們也可以說,API 就是一個「服務」的接口,讓使用者不需要知道內部程式的細節,
只要透過統一的規則(例如 HTTP 請求)就能存取功能。
參考資料:
https://www.dottedsign.com/zh-tw/blog/product/api
模型部署,簡單來說,就是把訓練好的模型放到「線上服務」中,
讓其他人或系統能直接使用。
稍微舉個例子:
像之前我們訓練了一個垃圾郵件分類器,就可以做成一個 API,
郵件伺服器只要丟一段文字,就能回傳「這是不是垃圾郵件」。
在 Python 的世界裡,如果我們想要把一個機器學習模型或深度學習模型包裝成一個服務,
最常見的做法就是透過 「Flask」 或 「FastAPI」。
這兩個工具就像是我們把模型變成一間「小型餐廳」的必備裝修材料。
想像一下,如果我們有一個模型能判斷文字的情感,那麼別人要使用時,
總不能要求大家都在電腦裡安裝 Python、下載模型、再去寫推論程式。
對大多數使用者來說,他們只想要一個簡單的方式,輸入文字,然後得到答案。
這就是 Flask 和 FastAPI 的價值:
它們幫助我們建立一個 API,讓外部的人用最直覺的方式來呼叫模型。
Flask 的特色在於「簡單」與「靈活」。
它的設計理念很乾淨,不會強迫你一定要遵守某些複雜規則。
這意味著,如果你只是想快速測試,
讓模型可以接收一段文字並回傳結果,Flask 幾乎只要幾行程式碼就能做到。
FastAPI 則是可以說是「後起之秀」,它的出現解決了 Flask 在某些進階需求上的不足。
比方說,如果我們的模型需要處理大量請求,或者我們希望 API 在效能上更快一些,
那麼 FastAPI 就是很好的選擇。
它的設計充分利用了 Python 的 型別提示(type hints),
這讓 API 不僅可以自動檢查輸入格式,還能自動產生文件。
你可以依照專案的規模與需求來選擇使用誰,
但無論哪一個,它們的核心目的都是一樣的:
-「把模型變成一個能被廣泛使用的服務」
現在,我們就要一步步在 Google Colab 上實際操作,
這個版本不需要連外設定,
只要「三步驟」,就能在 Colab 上體驗模型部署流程。
接著我們就直接進行程式碼撰寫:
!pip install flask
我們的第一步就是安裝要使用的套件,那這段命令做了一件事,就是:
-安裝 Flask(建立 Web API 的核心框架)
以下是一個簡單的範例,我們假設模型的功能是「輸入一個數字,輸出它的平方」。
接著來看看它的程式碼:
from flask import Flask, request, jsonify
# 建立 Flask 應用程式
app = Flask(__name__)
# 模擬一個簡單模型(平方運算)
def simple_model(x):
return x ** 2
# 建立 API 路由
@app.route("/predict", methods=["POST"])
def predict():
data = request.get_json() # 接收 JSON 格式資料
x = data.get("x", 0)
y = simple_model(x)
return jsonify({"input": x, "output": y})
# 在本地啟動 Flask(Colab 會顯示伺服器運行狀況)
app.run(port=5000)
當你執行這段程式碼後,你應該會看到以下畫面:
你可能看到紅字會想:「難道我錯了嗎?版主是不是在亂教!!!」
但nonono~,這個其實不是個錯誤,
這三行是 Flask 的警告提示,其實它的意思是:
目前運行的是「開發測試用伺服器」,
不建議用在真實線上環境(因為安全性與效能不足)。
在學習階段或在 Colab、Jupyter Notebook 中執行時,這其實是完全沒問題的,
這只是提醒說:如果要正式上線,要改用更穩定的伺服器(像 Gunicorn、uWSGI 等)。
除此之外,代碼:「Running on http://127.0.0.1:5000」
是本段最重要的代碼,
它告訴你 Flask 伺服器現在正在本機運行(port 5000)。
127.0.0.1 是「本機位址」(localhost),
意思是——伺服器只接受你自己這台電腦(或 Colab 內部)的連線。
如果你在自己電腦上運行 Flask,
就可以開啟瀏覽器輸入 http://127.0.0.1:5000 看到結果,
但因為 Colab 是在雲端的虛擬環境,
所以這個網址對外是封閉的(無法從外部瀏覽器直接開啟)。
而因為 Colab 不能直接訪問 127.0.0.1,
因此我們改用 Flask 提供的 test_client() 方法來在同一程式中測試:
# 用 Flask 內建測試客戶端模擬呼叫 API
with app.test_client() as client:
response = client.post("/predict", json={"x": 5})
print(response.get_json())
接著我們看到結果:
可以看到我們設定 x = 5 ,它給我們的輸出為「25」,
也是我們要的正確答案,代表我們的API有正常運作啦!!!
以上就是今天的 Flask打造小型 API 實作啦!
希望各位都有學到東西,那就明天再見啦!