[TOOLS] 8 分鐘閱讀OraCore 編輯部

Databricks AWS 自訂模型重點

Databricks 說明如何在 AWS 上打包、部署與擴展自訂模型,重點是 MLflow、CPU/GPU 選擇、冷啟動、重載規則與容量規劃。

分享 LinkedIn
Databricks AWS 自訂模型重點

Databricks 在 AWS 上的自訂模型,可以先用 MLflow 記錄,再用 Model Serving 以 CPU 或 GPU 方式提供 API

Databricks 在 2026 年 5 月 28 日更新了這份文件。內容很實用,也很直白。說白了,它在提醒你:模型不是訓練完就結束,打包、依賴、重載、擴縮容,才是上線後的麻煩事。

這份文件還丟了不少硬數字。像是 endpoint 建立約 10 分鐘,請求 timeout 是 597 秒,scale from zero 可能要 10 到 20 秒,甚至更久。這些數字很適合拿來做上線前的風險評估。

主題Databricks 說法實務意義
Endpoint 建立約 10 分鐘新版本打包與資源配置都要時間
Request timeout597 秒推論太久會直接失敗
Scale from zero10–20 秒,有時更久冷啟動會卡住低延遲服務
Scale-down 視窗每 5 分鐘流量掉了,資源會慢慢縮回去
Provisioned concurrencyQPS × 執行時間容量規劃要看真實流量

什麼叫做 custom model

訂閱 AI 趨勢週報

每週精選模型發布、工具應用與深度分析,直送信箱。不定期,不騷擾。

不會寄垃圾信,隨時可取消。

Databricks custom models 的語境裡,custom model 指的是你用 Python 寫的模型,或是包著自訂程式碼的模型。它可以是 scikit-learnXGBoostPyTorch,也可以是 HuggingFace Transformers。甚至你自己包的 Python 邏輯,也算。

Databricks AWS 自訂模型重點

部署流程其實不複雜。先把模型記錄到 MLflow,再註冊到 Unity Catalog 或 workspace registry,最後開一個 serving endpoint。Databricks 也有官方的 Model Serving 頁面,能對照整體流程。

這裡最容易踩雷的是「我本機能跑」。上線時不只看模型本體,還要看依賴有沒有一起打包。少一個套件,服務就可能直接掛掉。這種錯誤最煩,因為它常常不是訓練問題,而是封裝問題。

  • 標準套件可直接用 MLflow flavor。
  • pyfunc 適合包自訂 Python 邏輯。
  • Unity Catalog 比較適合做治理與權限控管。
  • 模型上線前,先確認依賴清單完整。

記錄方式會影響部署難度

Databricks 花很多篇幅講 logging,因為問題通常就出在這裡。它支援 Databricks Runtime for ML 的 autologging,也支援 MLflow built-in flavors 的手動記錄,還有用 pyfunc 包自訂程式碼。

三種方式差很多。autologging 最省事,但你要接受它的預設流程。built-in flavor 比較乾淨,適合標準模型。pyfunc 最彈性,能塞前處理、後處理、工具函式,甚至一些業務邏輯。

如果你的模型不是單純的 predict,pyfunc 通常比較不彆扭。很多團隊會把前處理寫在 API 層,結果部署時忘了同步版本。這種拆法看起來很乾淨,實際上很容易出事。

“Databricks refers to such models as custom models.”

Databricks 也建議加上 signatureinput_example。這不是裝飾品。signature 會定義輸入輸出格式,input_example 則能幫你先抓出 shape 和 type 的錯誤。

我會直接講結論:如果模型需要特殊前處理,就把那段邏輯一起打包。不要幻想 serving container 會自己猜。文件也很直接,缺依賴就是常見失敗原因,沒什麼好美化的。

  • signature 會定義資料欄位與輸出格式。
  • input_example 可用來先驗證 payload。
  • code_path 可把自訂程式一起帶上。
  • pip_requirementsextra_pip_requirements 用來鎖依賴。

CPU 和 GPU 真的不是同一件事

Databricks 提供的 compute 類型不少,但差異不只是名字。CPU 方案有 CPU_MEDIUMCPU_LARGE。前者每個 concurrency 有 8GB,後者有 16GB。這代表你可以用記憶體來換吞吐,不一定非得上 GPU。

Databricks AWS 自訂模型重點

GPU 方案就更細了。GPU_SMALL 是 1xT4 與 16GB。GPU_MEDIUM 是 1xA10G 與 24GB。MULTIGPU_MEDIUM 是 4xA10G 與 96GB。GPU_MEDIUM_8 則是 8xA10G 與 192GB。這些數字很重要,因為它們直接影響每個 concurrency 能吃多少記憶體。

講白了,如果你的模型偏吃記憶體,但還不需要 GPU,先升到 CPU_MEDIUM 或 CPU_LARGE 可能就夠了。反過來,如果你在跑 transformer 類工作負載,PyTorch 和 Transformers flavor 會自動處理 GPU prediction,少掉不少接線工作。

但 GPU 也不是萬靈丹。容器 build 會更久,模型太大時還可能卡在 60 分鐘 timeout,或直接噴出 No space left on device。如果你是在做大型 LLM,Databricks 直接建議改用 Foundation Model APIs

  • CPU_MEDIUM 提供 8GB per concurrency。
  • CPU_LARGE 提供 16GB per concurrency。
  • GPU_MEDIUM_8 提供 192GB per concurrency。
  • GPU autoscaling 一般比 CPU 慢。

擴縮容規則比多數人想的更硬

文件把 scaling 規則講得很清楚。Databricks 把 provisioned concurrency 定義為系統可同時處理的最大平行請求數。它還給了一個簡單公式:provisioned concurrency = QPS × model execution time

這個公式很實際。假設你的模型每秒 20 個請求,也就是 20 QPS,而每個請求要 0.2 秒,那你至少需要 4 個 concurrency。這還沒算尖峰、重試、背景負載。很多團隊就是少算這一段,然後以為是平台不穩。

Databricks 的 scaling 行為也有節奏。流量上來時,endpoint 會很快擴上去。流量掉下來後,則大約每 5 分鐘縮一次。你也可以選 scale to zero,但第一個請求會碰到 cold start。

這個 cold start 通常要 10 到 20 秒,有時會更久,而且沒有 SLA 保證。對要穩定低延遲的 production 服務,這就很麻煩。Databricks 也直接寫了,scale to zero 不適合需要固定 uptime 的工作負載。

“Scale to zero should not be used for production workloads that require consistent uptime or guaranteed response times.”

還有一個常被忽略的點。Databricks 會用 zero-downtime update,先保留舊設定,等新設定 ready 才切換。這樣不會中斷流量,但切換期間你可能同時付兩份錢。

  • 容量規劃要看 QPS 與 latency。
  • scale to zero 會有 cold start。
  • 流量下降後,約每 5 分鐘縮容。
  • 更新期間可能同時計費兩個版本。

這份文件真正想提醒你的事

如果你真的要在 Databricks 上跑 custom model,流程其實很明確。先用 MLflow 包好模型,再加上 signature、input example,接著把依賴列清楚,最後才進 serving。這樣做很土,但很有效。

文件還提到一個老模型問題。若你用的是 MLflow v1.17 或更早的模型,可能會碰到 Anaconda 的 defaults channel。新版本通常改成 conda-forge。如果你有舊模型在跑,最好先檢查 conda.yaml,不要直接假設環境還能重現。

我覺得這份文件最有價值的地方,不是教你怎麼 train。它是在提醒你,上線後最重要的是包裝紀律。模型能不能在維護後正常 reload,往往比訓練分數更重要。

如果 reload 失敗,Databricks 會保留舊設定繼續服務。這是安全機制,但也代表你的部署流程要夠穩。對 production 團隊來說,真正的問題不是模型準不準,而是它能不能穩穩地活在伺服器上。

接下來你該怎麼做

如果你要把自訂模型丟到 AWS 上跑,先做一份上線前清單。確認模型有 signature,依賴有列全,推論時間有量過,還要測過 cold start。這些事情很無聊,但比半夜救火好太多。

我會建議團隊先用小流量測試,再決定要不要開 scale to zero。低流量內部工具可以考慮省成本。正式產品則應該先看延遲和穩定性,再決定容量。你如果連 597 秒 timeout 都沒算進去,後面很容易踩雷。

下一步很簡單。把你的模型 deployment 流程和 Databricks 的文件對一次。只要有一個環節不是你能重現的,就先別上 production。這種事沒什麼浪漫可言,能穩定跑才是真的。