免費全文 部署與推理優化 進階

模型服務的健康檢查:光看行程還活著不夠

模型服務可以「行程還在但已經不能用」。健康檢查必須做真實推論。

部署與推理優化教程封面

傳統健康檢查看 TCP 通不通、HTTP 有沒有 200。模型服務有幾種故障是這樣看不出來的:顯示記憶體碎片化導致每個請求都失敗、模型權重載入不完整、KV 快取耗盡後所有請求排隊。

三層檢查

  1. 存活(liveness):行程還在、能回應 HTTP。失敗就重啟。
  2. 就緒(readiness):模型已載入完成。載入中不應該接流量。
  3. 功能(deep check):實際跑一次極短推論,確認能產生輸出。
# 功能檢查:固定輸入、固定輸出、限時 2 秒
@app.get('/healthz/deep')
def deep():
    t0 = time.time()
    try:
        out = llm.generate('回答 OK 兩個字', max_tokens=5, timeout=2)
    except Exception as e:
        return {'ok': False, 'error': str(e)}, 503
    return {'ok': 'OK' in out, 'latency_ms': int((time.time()-t0)*1000)}

別讓檢查本身變成負擔

  • 功能檢查頻率要低(例如 30 秒一次),並且用最短的輸入輸出。
  • 結果做短期快取,避免多個探針同時打。
  • 檢查請求要能被排除在計費與統計之外。

啟動時間要納入設計

大模型載入可能要好幾分鐘。就緒探針的初始延遲要設得夠長,否則編排系統會在載入完成前就判定失敗並不斷重啟,形成永遠起不來的迴圈。

把「模型版本、量化方式、最大長度」放進健康檢查的回應。排查線上問題時,能立刻確認跑的是哪一份權重。
下一步

這個主題還有更深入的實戰教程

VIP 專區收錄 50 篇進階內容:架構設計、生產環境取捨、成本與合規。 每週五新增 3 篇。

看訂閱方案 → 先逛逛 VIP 專區