前幾天把 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 符不符合?
例如 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」
但不一定要永遠指定:
「我只能使用這一個 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,我就要開始處理一個很實際的問題: