iT邦幫忙

2026 iThome 鐵人賽

DAY 24
0
AI Engineering

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

從 Model Upload 到 Deployment:客戶自有 Model 如何被驗證?

  • 分享至 

  • xImage
  •  

我開始思考一件事情:

我們怎麼知道一個 Model,真的可以交給客戶使用?

這時候又出現另一個很現實的問題。

如果今天客戶跟我說:

「我們公司已經有自己的 AI Model,可以直接放到 Cloud 裡面嗎?」

我的第一個反應可能是:

可以啊,Upload 上去不就好了?

但仔細想想,好像沒有這麼簡單。


客戶說「我有一個 Model」,到底代表什麼?

假設客戶丟給我們一個:

customer_person_detection.onnx

看起來很簡單。

我們是不是只要:

Upload
   ↓
Save
   ↓
Deploy

就好了?

其實風險很高。

因為我們根本不知道這個 Model:

  • 是哪個版本?
  • Input 是什麼?
  • Output 是什麼?
  • 是 Detection、Classification 還是 Pose?
  • Input size 是 640×640 還是 1280×720?
  • 有沒有使用特殊 Operator?
  • QCS6490 能不能跑?
  • QNN 能不能轉?
  • HTP 能不能執行?
  • 需要什麼 preprocessing?
  • Output 又需要什麼 post-processing?
  • 實際 FPS 有多少?
  • 長時間跑會不會 crash?

所以我後來覺得:

Upload 跟 Deploy,中間一定要多一道流程。


1. Upload 不代表可以 Deploy

這是我在設計 Model Registry 時,覺得很重要的一個觀念。

使用者把 Model 上傳進來,只代表:

「我有一個 Model。」

不代表:

「這個 Model 可以在這台 Edge Device 上正常運作。」

所以流程應該變成:

Customer Model
      ↓
    Upload
      ↓
 Model Registry
      ↓
 Compatibility Check
      ↓
    Validation
      ↓
    Approval
      ↓
    Deploy

這樣 Model Registry 才不是單純的「檔案倉庫」。

它其實是 Model 從「被上傳」到「可以被部署」之間的管理機制。


2. 第一關:Compatibility Check

Model 上傳之後,第一件事情不是直接跑。

而是先問:

這個 Model 到底是不是我們的平台能處理的?

例如我們現在主要跑在 Qualcomm QCS6490。

那至少要確認:

Model Format

例如:

ONNX
QNN
TFLite

Model Structure

例如:

Input
 └─ 640 × 640 × 3

Output
 └─ Detection Boxes
 └─ Class
 └─ Score

Operator

有沒有使用 QNN / QCS6490 不支援的 Operator?

如果有:

Model
 ↓
QNN Conversion
 ↓
Unsupported Operator
 ↓
FAIL

那就不應該讓它進入 Deployment。


3. 但這裡有一個 PM 很容易踩到的坑

一開始很容易想:

「那就叫客戶把所有資訊填完整。」

例如 Upload Model 的時候,要求客戶填:

Model Name
Version
Framework
Input Size
Input Format
Output Format
Quantization
QNN Backend
HTP Version
Pre-processing
Post-processing
...

看起來很完整。

但實際上我覺得這不是一個好的 Product Design。

因為客戶可能根本不知道:

「HTP Version 是什麼?」

更不應該要求客戶理解 Qualcomm SDK 裡面的所有細節。

所以我會把它分成兩種資訊。

Platform 可以自動解析的

例如:

  • Model Format
  • Input / Output
  • Tensor Shape
  • Operator
  • Model Size
  • 部分 Runtime Information

就讓 Platform 自己解析。

Platform 無法自動判斷的

例如:

  • Pre-processing
  • Post-processing
  • Model 使用情境
  • Class Definition

才讓使用者補充。

這樣比較符合產品設計的原則:

不要把 Platform 的複雜度,直接丟給使用者。


4. Compatibility Pass,也不代表可以上線

這是 Day 23 我覺得最重要的地方。

假設:

Model Format       ✓
QNN Conversion     ✓
Operator           ✓
QCS6490            ✓
HTP                ✓

是不是就可以 Deploy?

還是不行。

因為「可以跑」跟「可以交付」是兩件事情。

例如:

客戶要求:

1080p Video
至少 20 FPS

結果我們測出來:

Model Conversion    ✓
QCS6490             ✓
Inference           ✓
FPS                 8

技術上它可以跑。

但是產品上:

不能交付。


5. 所以我把 Validation 再拆成幾層

我會比較傾向把 Model Validation 分成:

① Compatibility

能不能跑?

Format
Operator
Runtime
Hardware
Accelerator

② Performance

跑得夠不夠快?

例如:

Target:20 FPS
Actual:31 FPS

PASS

或者:

Target:20 FPS
Actual:8 FPS

FAIL

③ Stability

不是只跑 30 秒。

而是要確認:

1 hour
4 hours
8 hours
24 hours

是否會:

  • Crash
  • Memory leak
  • CPU 持續升高
  • NPU 異常
  • Container restart

因為 Demo 跑得動,跟產品穩定運作,是完全不同的事情。


④ Use Case Validation

這個其實又是另一個容易被忽略的問題。

假設 Model 的 FPS 很漂亮:

31 FPS

但客戶真正要的是:

「偵測人員有沒有進入禁區。」

結果實際測試:

Person Detection
      ↓
Geofence
      ↓
Event

發現誤報很多。

那這個 Model 即使效能很好,

還是不能算是一個合格的 Product Model。

所以最後應該驗證的是:

Model 能不能解決 Use Case,而不只是能不能跑。


6. 所以 Model Registry 裡面到底要存什麼?

做到這裡,我才發現:

如果 Model Registry 只是:

Model Name
Model File
Version

其實是不夠的。

比較完整的概念會是:

Model
│
├── Model Version
│
├── Original Model
│
├── Model Artifact
│   └── QCS6490 / QNN / HTP
│
├── Input / Output
│
├── Runtime
│
├── Pre/Post Processing
│
├── Validation Result
│
├── Performance
│
├── Stability
│
└── Approval Status

也就是:

Model Registry 管的不是一個 .onnx 檔案,而是一個 Model 可以被部署的完整資訊。


7. 最後才是 Approval

當所有 Validation 都完成之後,才進入:

Validation
      ↓
PASS
      ↓
Approval
      ↓
Available for Deployment

例如:

Customer Person Detection

Version: v1.2

Format: ONNX
Target: QCS6490
Runtime: QNN
Backend: HTP

Compatibility: PASS
Performance: 31 FPS
Stability: PASS
Use Case: PASS

Status:
Approved

這時候 Cloud 才可以讓這個 Model 出現在:

Available Models

裡面。

客戶看到的不是:

「這是一個 ONNX File。」

而是:

「這是一個已經驗證,可以部署到我的 Edge Device 的 Model。」


8. 這時候我又想到下一個問題

假設今天客戶的 Model:

Person Detection v1.2

已經通過所有驗證。

結果客戶過了一個月跟我說:

「我們 Model 更新了,現在是 v1.3,幫我換掉。」

我可能又會直覺想:

「那就把舊的檔案換掉啊。」

但等等。

Model 換掉,Application 還一定跑得起來嗎?

如果:

v1.2
Output = 3 tensors

變成:

v1.3
Output = 6 tensors

那原本的 Detection、Post-processing、Event Rule,甚至 Application Logic 都可能受到影響。

所以我開始發現:

Model Version,其實不只是 Model 自己的事情。

它可能會影響整個 Application。


上一篇
要怎麼知道這個 Model 可以交付給客戶?
下一篇
Model 換了,Application 還能跑嗎?
系列文
30 天打造 Edge AI Product:一個 PM 從 0 到 1 的 AI Engineering 實戰 共 27 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言