iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
AI & Data

ML/DL實作-「營養抗老」專題製作系列 第 20

Day 20_模型部署與 API 整合

  • 分享至 

  • xImage
  •  

🎯 目標

把 Day18 產生的 ONNX 模型(recommender_E001.onnx、recommender_E002.onnx)部署到 Spring Boot 環境中

讓 API /api/recommendations/ai 自動讀取最新模型

確保從 ETL → 訓練 → 匯出 → API 查詢是一條完整可運行鏈路

提供 更新/重新載入模型的機制(無須重啟服務)

🏗️ 技術設計
1. 模型存放位置

預設路徑:~/mywork/mySpringbootmall/models/

recommender_E001.onnx

recommender_E002.onnx

Spring Boot application.properties 新增:
2. Spring Boot ModelService

新增 ModelService.java:

啟動時讀取 model.dir 下的所有 .onnx

用 ONNX Runtime 建立 OrtSession

存入一個 ConcurrentHashMap<String, OrtSession>

key = effectId (E001, E002)

提供 reloadModels() 方法

重新掃描資料夾 → 更新快取

不必重啟 Spring Boot

3. API 增強

/api/recommendations/ai?effectId=E001

使用對應 OrtSession 推論

/api/admin/reload-models(POST)

呼叫 ModelService.reloadModels()

回應:成功載入的模型列表

4. Flyte 與 Spring Boot 銜接

在 Day18 pipeline 結尾新增一個 task:

把 recommender_E001.onnx 複製到 Spring Boot 的 models/ 資料夾

用 requests.post("http://localhost:8080/api/admin/reload-models") 通知服務刷新

這樣每次 pipeline 成功,API 都能用新模型
🧪 測試計畫

先清空 models/ 資料夾,確認 /api/recommendations/ai 回傳錯誤(模型不存在)

跑 wf_etl_train_pipeline → 產生 recommender_E001.onnx

檢查 Spring Boot logs,確定有 reload 模型

測試 API:
改用新資料再訓練一次 → 模型覆蓋 → API reload → 結果應不同

✅ 驗收標準

models/ 目錄存在最新 ONNX 模型

/api/recommendations/ai 能根據模型輸出排序結果

/api/admin/reload-models 能手動更新模型

Flyte pipeline 執行完,API 自動用上新模型

📦 今日交付

src/main/java/com/grace/mySpringbootmall/service/ModelService.java

src/main/java/com/grace/mySpringbootmall/controller/AdminController.java

application.properties 增加 model.dir

Flyte task t_deploy_model():複製 onnx 並呼叫 reload API

上一篇
Day 19_Flyte Pipeline 串接 — ETL → 訓練 → 匯出
下一篇
Day 21_自動化排程與 CI/CD
系列文
ML/DL實作-「營養抗老」專題製作21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言