iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0

Day 17 講完 Container 之後,我開始遇到另一個問題。

Container 可以把 Application 打包起來,那 Model 要放哪裡?

一開始其實很簡單。

例如 ECU-2200 上面有一個:

/models
    person.onnx

AI Application 啟動之後去讀這個 Model,就可以跑了。

如果今天只有一台設備,我根本不需要什麼 Model Registry。

但如果今天變成 50 台、100 台設備,問題就來了。

有些設備跑:

Person Model v1.0

有些跑:

Person Model v2.0

甚至不同的 Model 可能還對應不同的:

  • Hardware
  • Runtime
  • Model Format
  • Input / Output
  • Pre-processing
  • Post-processing

這時候我開始覺得,Model 不能只是一個檔案。


那 Model Registry 到底要記什麼?

我先從最基本的開始。

1. Model 是哪一個?

例如:

Model Name: Person Detection
Version: 2.1
Task: Object Detection

這個其實就是最基本的版本管理。

因為之後一定會遇到:

v1.0
v1.1
v2.0
v2.1

不能只看檔名猜版本。


2. 這個 Model 到底是什麼格式?

例如:

Format: ONNX
Input: 640 × 640
Data Type: INT8
Output: Bounding Box / Class / Score

另外還要記:

Pre-processing
Post-processing

因為 Model 下載下來,不代表 Application 就知道怎麼用。


3. 它可以跑在哪裡?

這個對 Edge AI 特別重要。

例如:

Hardware: QCS6490
Runtime: QNN
Accelerator: HTP
Precision: INT8

因為不是看到一個 ONNX,就可以直接說:

「這個可以跑。」

可能 Model 本身沒有問題,但:

  • Operator 不支援
  • Runtime 不相容
  • Hardware 不支援
  • Conversion 有問題
  • Input / Output 對不起來

都有可能。


所以我後來覺得,Registry 裡面應該有一個 Compatibility

例如:

QCS6490
QNN
INT8

→ Validated

或者:

QCS6490
QNN

→ Not Validated

甚至:

QCS6490
QNN

→ Incompatible

我覺得這三個狀態要分清楚。

沒測過,不代表不能跑。

這在第三方 Model 特別重要。


那到底要怎麼知道能不能跑?

這就進到 Validation。

我會想像 EdgeHub 裡面有一個:

Validate Model

按下去之後,不是 Cloud 自己跑。

而是:

EdgeHub
   ↓
建立 Validation Job
   ↓
Validation Device
   ↓
QCS6490
   ↓
QNN / HTP
   ↓
跑 Model
   ↓
回傳結果

先確認 Model 能不能 Load。

再確認 inference 有沒有正常。

最後才看:

FPS
Latency
CPU
HTP
Memory

這樣才比較有意義。


我覺得這時候 Model Registry 才開始有價值

因為它不是單純:

「把 Model 放在雲端。」

而是讓我們知道:

這個 Model 是誰、哪個版本、可以跑在哪裡、測過沒有、測出來多少,以及現在被哪些設備使用。

例如:

Person Detection v2.1

QCS6490
QNN
INT8

Validation: PASS
FPS: 28.5

Used by:
ECU-001
ECU-002
ECU-003

這就比:

person_v2.1.onnx

有用很多。


那 Harbor 呢?

這時候我又想到:

這些東西為什麼不能全部丟 Harbor?

因為 Harbor 本來就是我們存 Container Image 的地方。

例如:

Harbor

frontend:v1.0
backend:v1.2
ai-runtime:v2.0

而 Model Registry 管:

Person Detection:v2.1
Pose:v1.0
Helmet:v3.2

所以我現在會把它分成兩個東西:

Harbor
→ 管 Container Image

Model Registry
→ 管 AI Model

兩個都在管 Artifact,但管的是不同東西。


最後我會把整個架構想成這樣

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

所以到這裡,我的想法其實很簡單:

Container 解決 Application 怎麼打包,Model Registry 解決 Model 怎麼管理。

而真正讓這兩個東西串起來的,還是 Cloud 的 Deployment。

同時我又想到一個很實際的問題:

既然 Harbor 也能存東西,那 Model Registry 跟 Harbor 到底差在哪?


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

尚未有邦友留言

立即登入留言