iT邦幫忙

2026 iThome 鐵人賽

DAY 20
0
AI Engineering

30 天打造 Edge AI Product:一個 PM 從 0 到 1 的 AI Engineering 實戰系列 第 20 篇

Model 到底要不要跟 Application 綁在一起?

  • 分享至 

  • xImage
  •  

前幾天把 Model Registry 想清楚之後,我又卡在一個問題。

Model 跟 Application 到底要不要綁在一起?

一開始我的直覺其實是:

當然綁在一起啊。

因為我們的 AI Application 就是要跑 Model。

例如:

AI Application
└── Person Detection Model

Application 裡面直接放一個 Model,最簡單,也最好理解。


如果全部包在一起,其實很好做

例如:

edge-ai-app:v1.0
│
├── Application
├── Runtime
└── person.onnx

今天要更新 Model,就重新 Build 一個 Image:

Person Model v1.0
        ↓
Person Model v1.1
        ↓
Build
        ↓
edge-ai-app:v1.1

然後丟到 Harbor。

這個方式其實沒有錯。

如果是 PoC,我可能就直接這樣做。

因為東西少,流程也簡單。


但是開始想產品化,就會有點麻煩

假設今天 Application 沒有改。

只是 Model 想換掉。

例如:

Application:v1.0

Model:
v1.0 → v1.1

如果兩個一定要綁在一起,那就變成:

Model v1.1
   ↓
重新 Build Application
   ↓
重新產生 Container Image
   ↓
Push Harbor
   ↓
重新 Deploy

我就會開始想:

為什麼只是換一個 Model,要把整個 Application 重做一次?

尤其未來如果客戶自己會訓練 Model,Model 更新可能比 Application 還頻繁。

這時候把兩個東西完全綁死,就不太方便。


所以我開始想把它們拆開

變成:

Application
edge-ai-app:v1.0

        +

Model
person-detection:v1.1

Application 放 Harbor。

Model 放 Model Registry。

真正 Deploy 的時候才把兩個組合起來。

例如:

Cloud
   │
   ├── Application
   │      ↓
   │    Harbor
   │
   └── Model
          ↓
      Model Registry

最後:

Application + Model
        ↓
     ECU-2200

這樣 Model 可以自己換版本。


但也不能完全不管兩邊的關係

這是我後來覺得比較容易被忽略的地方。

雖然 Application 跟 Model 分開,但不是代表:

「任何 Model 都可以塞進任何 Application。」

例如我們的 Application 可能預期:

Input:
640 × 640

Output:
Bounding Box
Class
Confidence

結果客戶拿一個完全不同的 Model:

Input:
1280 × 720

Output:
Segmentation Mask

硬塞進去當然不會正常。

所以 Cloud 在 Deployment 前,還是要檢查:

Application
     ↓
需要什麼 Model?
     ↓
Model Registry
     ↓
這個 Model 符不符合?

我會把這件事情叫做 Compatibility

例如 Application 定義:

Application
Unmanned Area Detection v1.0

Required:
Object Detection
Input: 640x640
Output: Bounding Box
Runtime: QNN

Model Registry 裡面:

Person Detection v2.1
Object Detection
640x640
Bounding Box
QNN
QCS6490

那就可以:

✓ Compatible

但如果是:

Pose Estimation v1.0

可能就是:

✕ Not Compatible

至少不要等到 Model 已經下載到 ECU,Application 啟動之後才發現不能跑。


那 Application 到底要不要指定一個 Model?

我覺得這裡也不用做得太死。

Application 可以定義:

「我需要什麼類型的 Model」

但不一定要永遠指定:

「我只能使用這一個 Model。」

例如:

Application
Person Detection

Supported Model:
- Person Detection v1.0
- Person Detection v1.1
- Person Detection v2.0

這樣未來 Model 更新時,Application 不一定要跟著更新。


最後我比較喜歡這種架構

                 Cloud
                    │
          ┌─────────┴─────────┐
          │                   │
     Application             Model
          │                   │
       Harbor           Model Registry
          │                   │
          └─────────┬─────────┘
                    │
             Compatibility
                    │
                    ↓
               Deployment
                    │
                    ↓
                ECU-2200

Application 有自己的版本。

Model 也有自己的版本。

兩個分開管理,但在 Deployment 的時候確認能不能搭配。


這時候我才發現一件事

其實我一開始一直在想:

「Model 到底要放在哪裡?」

後來慢慢變成:

「Model 要怎麼跟 Application 配在一起?」

再往下想才會發現:

「那如果客戶自己有 Model 呢?」

這就變成下一個問題了。

因為如果未來我們真的要做 Edge AI Platform,不能只有我們自己準備 Model。

客戶應該也要能把自己的 Model 放進來。

所以 Day 21,我就要開始處理一個很實際的問題:

客戶自己的 Model,要怎麼上傳、驗證,最後真的跑到 QCS6490?


上一篇
這時候我在心裡想->Model Registry 跟 Harbor 到底差在哪?
系列文
30 天打造 Edge AI Product:一個 PM 從 0 到 1 的 AI Engineering 實戰 共 20 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言