iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
生成式 AI

《AI 新手到職場應用:深度學習 30 天實戰》系列 第 27

模型部署入門:用 Flask打造小型 API

  • 分享至 

  • xImage
  •  

到目前為止,我們學了很多深度學習與 NLP 的理論與實作,
甚至做過情感分析、文字生成、圖片分類等應用。
但如果模型只停留在 Jupyter Notebook 裡,那就還只是研究成果,
無法真正被一般使用者或其他系統利用。

模型部署 (Model Deployment) 就是要把我們的模型
包裝成「服務」,讓別人能透過網路呼叫,
像呼叫 Google 翻譯 API 一樣方便。

今天,我們就來介紹 FlaskFastAPI
並看看如何使用 Flask 把深度學習模型變成一個小型 API。


什麼是 API?

API 全名是 Application Programming Interface(應用程式介面)。
可以把它想像成一個「溝通的橋樑」,讓不同的程式之間可以交換資料。

比如你在手機上打開天氣 App,輸入地點後就能看到天氣資訊。
但其實手機 App 本身沒有資料庫,它是透過「API」向後端伺服器發送請求,
伺服器回傳當地的天氣數據,App 再把它顯示出來。

在機器學習領域,我們可以把模型做成 API,讓外部的使用者或系統只要發送一段文字,
就能得到情感分析、翻譯或分類的結果。

我們也可以說,API 就是一個「服務」的接口,讓使用者不需要知道內部程式的細節,
只要透過統一的規則(例如 HTTP 請求)就能存取功能。

參考資料:
https://www.dottedsign.com/zh-tw/blog/product/api


什麼是模型部署?

模型部署,簡單來說,就是把訓練好的模型放到「線上服務」中,
讓其他人或系統能直接使用。

稍微舉個例子:
像之前我們訓練了一個垃圾郵件分類器,就可以做成一個 API,
郵件伺服器只要丟一段文字,就能回傳「這是不是垃圾郵件」。


為什麼要用 Flask / FastAPI?

在 Python 的世界裡,如果我們想要把一個機器學習模型或深度學習模型包裝成一個服務,
最常見的做法就是透過 「Flask」 或 「FastAPI」。

這兩個工具就像是我們把模型變成一間「小型餐廳」的必備裝修材料。
想像一下,如果我們有一個模型能判斷文字的情感,那麼別人要使用時,
總不能要求大家都在電腦裡安裝 Python、下載模型、再去寫推論程式。
對大多數使用者來說,他們只想要一個簡單的方式,輸入文字,然後得到答案。

這就是 Flask 和 FastAPI 的價值:
它們幫助我們建立一個 API,讓外部的人用最直覺的方式來呼叫模型

Flask 的特色在於「簡單」與「靈活」。
它的設計理念很乾淨,不會強迫你一定要遵守某些複雜規則。
這意味著,如果你只是想快速測試,
讓模型可以接收一段文字並回傳結果,Flask 幾乎只要幾行程式碼就能做到。

FastAPI 則是可以說是「後起之秀」,它的出現解決了 Flask 在某些進階需求上的不足。
比方說,如果我們的模型需要處理大量請求,或者我們希望 API 在效能上更快一些,
那麼 FastAPI 就是很好的選擇。
它的設計充分利用了 Python 的 型別提示(type hints),
這讓 API 不僅可以自動檢查輸入格式,還能自動產生文件。

你可以依照專案的規模與需求來選擇使用誰,
但無論哪一個,它們的核心目的都是一樣的:
-「把模型變成一個能被廣泛使用的服務


Flask 實作:打造簡單的計算 API

現在,我們就要一步步在 Google Colab 上實際操作,
這個版本不需要連外設定,
只要「三步驟」,就能在 Colab 上體驗模型部署流程。

接著我們就直接進行程式碼撰寫:

第一步:安裝套件

!pip install flask

我們的第一步就是安裝要使用的套件,那這段命令做了一件事,就是:

-安裝 Flask(建立 Web API 的核心框架)


第二步:建立 Flask 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)

當你執行這段程式碼後,你應該會看到以下畫面:

https://ithelp.ithome.com.tw/upload/images/20251009/20169196cV0RC5ALrG.png

你可能看到紅字會想:「難道我錯了嗎?版主是不是在亂教!!!」
但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 裡測試 API(模擬呼叫)

而因為 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())

接著我們看到結果:
https://ithelp.ithome.com.tw/upload/images/20251009/201691968s1R9BJL1e.png

可以看到我們設定 x = 5 ,它給我們的輸出為「25」,
也是我們要的正確答案,代表我們的API有正常運作啦!!!


以上就是今天的 Flask打造小型 API 實作啦!
希望各位都有學到東西,那就明天再見啦!


上一篇
實戰 — 用深度學習做垃圾郵件分類(2/2)
系列文
《AI 新手到職場應用:深度學習 30 天實戰》27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言