如我們所見,TensorFlow Serving和Seldon Core等工具顯示了ML模型生產級服務不是任何一個研究團隊或公司的獨特問題。不幸的是,這意味著每個內部解決方案都將使用不同的模型格式並公開獨特的專有服務API。
TensorFlow Serving和Seldon Core面臨的另一個問題是缺乏無伺服器原語,如修訂管理和更複雜形式的自動擴充套件。這些缺點也存在於大多數推論服務中。為了統一模型伺服器的開放原始碼社群,同時填補每個模型伺服器的空白,Seldon、Google、Bloomberg和IBM與開放原始碼社群合作,共同開發了KFServing。
無伺服器與服務平面
KFServing是一個無伺服器推論解決方案,為TensorFlow、XGBoost、Scikit-learn、PyTorch和ONNX等常見ML框架提供高效能、高抽象介面。透過將Knative放在Kubeflow的雲原生堆積積積堆疊之上,KFServing封裝了自動擴充套件、網路、健康檢查和伺服器設定的複雜性,並將GPU自動擴充套件、縮放到零和金絲雀發布等前沿服務功能引入ML預測服務。這使ML工程師能夠專注於與資料科學相關的關鍵工具,如預測服務、轉換器、可解釋性和漂移檢測器。
KFServing的設計主要借鑒了無伺服器Web開發。無伺服器允許你構建和執行應用程式和服務,而無需設定、擴充套件或管理任何伺服器。這些伺服器設定通常稱為服務平面或控制平面。
自然地,無伺服器抽象帶來了佈署的簡單性和流動性,因為有限的基礎設施管理。然而,無伺服器架構在很大程度上依賴於事件觸發器來擴充套件其副本。它允許你只專注於應用程式碼。
KFServing的主要原則之一是將無伺服器應用程式開發擴充套件到模型服務。這對資料科學家特別有利,因為你只想專注於正在開發的ML模型以及結果輸入和輸出層。
資料平面架構
KFServing定義了資料平面,它將所有標準模型服務元件連線在一起,並使用Knative為服務平面提供無伺服器抽象。資料平面是資料包和請求如何從一個介面轉發到另一個介面的協定,同時還提供服務發現、健康檢查、路由、負載平衡、認證/授權的能力。
KFServing的資料平面架構由靜態元件圖組成——類別似於Seldon Core的InferenceGraph——來協調單個模型的請求。整合、A/B測試和多臂老虎機等高階功能將這些服務連線在一起。
在實際實施中,我發現KFServing的資料平面設計特別適合需要快速迭代和頻繁更新模型的場景。它的無伺服器特性使得模型佈署和更新變得更加簡單和安全,同時保持了高效能和可靠性。
KFServing與Seldon Core的比較
在選擇推論系統時,理解KFServing和Seldon Core之間的差異至關重要:
無伺服器能力:KFServing內建了無伺服器功能,包括縮放到零和GPU自動擴充套件,而Seldon Core則缺乏這些特性。
版本管理:KFServing提供了更強大的版本管理和安全回復機制,這在生產環境中至關重要。
架構複雜性:Seldon Core的推論圖更加靈活和可擴充套件,但也增加了設定複雜性;KFServing則提供了更簡化的佈署體驗。
社群支援:兩者都有活躍的社群,但KFServing作為較新的解決方案,結合了之前解決方案的經驗教訓。
選擇適合的推論系統
在選擇Seldon Core還是KFServing時,需要考慮以下因素:
佈署需求:如果需要無伺服器能力(如縮放到零)和更簡化的佈署體驗,KFServing可能是更好的選擇。
推論複雜性:對於需要複雜推論圖和高度定製化的場景,Seldon Core提供了更大的靈活性。
基礎設施整合:評估現有的Kubernetes和雲基礎設施,選擇更容易整合的解決方案。
團隊技能:考慮團隊的技術背景和專長,選擇學習曲線更適合的系統。
實踐中的推論系統
在實際專案中,我常需要根據具體需求選擇合適的推論系統。對於一個需要快速迭代和頻繁佈署新模型的金融科技專案,我選擇了KFServing,其無伺服器特性和強大的版本管理大簡化了佈署流程。
而在另一個需要複雜推論邏輯和多模型整合的醫療影像分析專案中,Seldon Core的靈活推論圖架構則提供了更好的解決方案。這個專案需要將多個專業模型的輸出進行綜合分析,Seldon Core的InferenceGraph恰好滿足了這一需求。
隨著機器學習模型佈署需求的不斷演進,推論系統也在持續發展。未來的趨勢可能包括:
更深度的硬體最佳化:針對專用AI加速器的自動最佳化和排程
邊緣佈署支援:更好地支援邊緣裝置上的模型佈署和推論
混合雲架構:跨多個雲環境和本地環境的無縫模型佈署
自適應推論:根據負載和效能需求自動調整推論策略
機器學習模型推論系統的選擇對於成功佈署AI解決方案至關重要。Seldon Core和KFServing各有優勢,適合不同的使用場景。透過深入理解這些系統的核心特性和差異,可以為特定專案選擇最適合的推論解決方案,實作AI模型從實驗室到生產環境的順利過渡。
無論選擇哪種推論系統,重要的是建立完善的監控和維護機制,確保模型在生產環境中持續高效執行,並能夠及時應對資料漂移和其他挑戰。隨著技術的不斷發展,推論系統將變得更加強大和易用,進一步降低AI佈署的門檻。
KFServing 資料平面解析:模型服務架構全面剖析
在機器學習模型從訓練到生產環境的旅程中,模型佈署與服務是最關鍵的環節之一。KFServing 作為 Kubeflow 生態系統中的核心元件,提供了強大的模型推論服務能力。本文將探討 KFServing 的資料平面架構、關鍵元件以及實際佈署流程。
資料平面架構:理解 KFServing 的核心結構
KFServing 的資料平面採用靜態圖結構,這種設計使其能夠高效處理模型推論請求。在探討之前,我們需要理解幾個關鍵概念:
端點(Endpoint)
KFServing 例項分為兩種端點型別:
- 預設端點(Default):主要伺服器端點,處理大部分生產流量
- 金絲雀端點(Canary):用於測試新版本模型,實作安全佈署
這種雙端點設計讓使用者能夠安全地實施變更,透過固定版本和金絲雀發布策略來降低風險。若不需要逐步推出功能,也可以直接使用藍綠佈署策略,僅針對預設端點進行佈署。
元件(Component)
每個端點包含多個元件,共同構成完整的推論服務:
- 預測器(Predictor):唯一必需的元件,是系統的核心,負責執行實際的模型推論
- 直譯器(Explainer):可選元件,提供模型解釋能力,增強模型透明度
- 轉換器(Transformer):可選元件,負責在預測和解釋工作流程前後進行前處理和後處理
隨著 KFServing 的演進,它能無縫增加支援的元件數量,以啟用更多使用場景,例如 Seldon Core 的異常檢測。使用者甚至可以引入自定義元件,並利用 Knative 的抽象能力將它們連線在一起。
預測器(Predictor)詳解
預測器是 KFServing 例項的核心工作單元。本質上,它就是一個模型和一個模型伺服器,透過網路端點提供服務。預測器負責接收輸入資料,執行模型推論,並回傳預測結果。
直譯器(Explainer)詳解
直譯器提供了一個可選的替代資料平面,除了預測外,還提供模型解釋。使用者可以定義自己的解釋容器,KFServing 會設定相關環境變數,例如預測端點。對於常見使用案例,KFServing 提供了開箱即用的直譯器,如 Seldon Core 的 Alibi:Explain。
轉換器(Transformer)詳解
轉換器使用者能夠在預測和解釋工作流程前後定義前處理和後處理步驟。與直譯器類別似,它也會設定相關環境變數。轉換器特別適合處理資料格式轉換、特徵工程或結果後處理等任務。
KFServing 預測協定
資料平面的最後一部分是 KFServing 使用的預測協定。KFServing 定義了一組必須由合規推論/預測服務實作的 HTTP/REST 和 gRPC API。值得注意的是,KFServing 在所有模型框架中標準化了這個預測工作流程。
KFServing V1 資料平面協定包含三個主要 API:
API | 動詞 | 路徑 | 負載 |
---|---|---|---|
準備就緒 | GET | /v1/models/<model_name> | { Response:{“name”:<model_name>,“ready”: true/false} } |
預測 | POST | /v1/models/<model_name>:predict | { Request:{“instances”: []}, Response:{“predictions”: []} } |
解釋 | POST | /v1/models/<model_name>:explain | { Request:{“instances”: []}, Response:{“predictions”: [],“explanations”: []} } |
這種標準化協定確保了不同模型框架之間的一致性,簡化了系統整合和客戶端開發。
需要注意的是,KFServing 的協定正在不斷發展。V2 協定解決了 V1 資料平面協定中發現的一些問題,包括效能和在大量模型框架和伺服器之間的通用性。
KFServing 實戰:從設定到佈署
瞭解了 KFServing 的資料平面架構後,接下來我們將探討如何在實際環境中使用 KFServing。
設定 KFServing
KFServing 提供了 InferenceService,這是一種無伺服器推論資源,透過提供 Kubernetes CRD(自定義資源定義)來描述靜態圖,用於在任意框架上服務 ML 模型。KFServing 預先封裝在 Kubeflow 中,因此應該已經可用。KFServing 安裝會在 kubeflow 名稱空間中建立一個 Kubernetes 運算元,它會監視 InferenceService 資源。
值得注意的是,KFServing 也支援不依賴 Kubeflow 的獨立安裝。實際上,大多數 KFServing 的生產使用者都是以獨立安裝的方式執行它。
由於 Kubeflow 的 Kubernetes 最低要求是 1.14,而該版本不支援物件選擇器,因此在 Kubeflow 安裝中預設啟用了 ENABLE_WEBHOOK_NAMESPACE_SELECTOR
。如果使用 Kubeflow 的儀錶板或設定檔控制器建立使用者名稱空間,系統會自動增加標籤以使 KFServing 能夠佈署模型。
如果手動建立名稱空間,需要執行以下命令:
kubectl label namespace \
my-namespace serving.kubeflow.org/inferenceservice=enabled
這將允許 KFServing 在 my-namespace
名稱空間中佈署 InferenceService。
要檢查 KFServing 控制器是否正確安裝,可以執行以下命令:
kubectl get pods -n kubeflow | grep kfserving
若看到處於 Running 狀態的 pod,則表示控制器正在執行。
KFServing 的簡潔性與可擴充套件性
KFServing 的設計理念是:對初學者簡單易用,對資深資料科學家可高度定製。這種靈活性體現在 KFServing 的介面設計上。
接下來,我們將檢視三個 InferenceService 的範例,分別針對不同的機器學習框架。
scikit-learn 模型佈署
apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
name: "sklearn-iris"
spec:
default:
predictor:
sklearn:
storageUri: "gs://kfserving-samples/models/sklearn/iris"
TensorFlow 模型佈署
apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
name: "flowers-sample"
spec:
default:
predictor:
tensorflow:
storageUri: "gs://kfserving-samples/models/tensorflow/flowers"
PyTorch 模型佈署
apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
name: "pytorch-cifar10"
spec:
default:
predictor:
pytorch:
storageUri: "gs://kfserving-samples/models/pytorch/cifar10/"
modelClassName: "Net"
以上三個範例都提供了一個具有 HTTP 端點的服務例項,使用請求的框架伺服器型別來提供模型服務。在每個範例中,storageUri
指向一個序列化的資產(即訓練好的模型)。
這些框架規範在分享訊息(如 storageUri
和 Kubernetes 資源請求)方面足夠通用,但也足夠可擴充套件,能夠啟用特定框架的訊息,例如 PyTorch 的 ModelClassName
。
這種介面簡單易用,讓初學者能夠快速上手,但 KFServing 對於更複雜的佈署設定和策略有多大的擴充套件性呢?下面的範例展示了 KFServing 提供的一些進階功能。
複雜佈署:金絲雀發布策略
apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
name: "my-model"
spec:
default:
predictor:
# 90% 的流量傳送到這個模型
tensorflow:
storageUri: "gs://kfserving-samples/models/tensorflow/flowers"
serviceAccount: default
minReplicas: 2
maxReplicas: 10
resources:
requests:
cpu: 1
gpu: 1
memory: 8Gi
canaryTrafficPercent: 10
canary:
predictor:
# 10% 的流量傳送到這個模型
tensorflow:
storageUri: "gs://kfserving-samples/models/tensorflow/flowers-2"
serviceAccount: default
minReplicas: 1
maxReplicas: 5
resources:
requests:
cpu: 1
gpu: 1
memory: 8Gi
這個進階範例展示了 KFServing 的金絲雀發布能力。它定義了兩個版本的模型:預設版本接收 90% 的流量,而金絲雀版本接收 10% 的流量。這種方法允許安全地測試新模型版本,同時維持服務的穩定性。
此外,範例還展示瞭如何設定資源請求(CPU、GPU、記憶體)和副本數量(最小和最大),以實作自動擴充套件。
第一個擴充套件是 ServiceAccount
,用於以受管身份形式進行身份驗證。如果需要驗證到 S3(因為 S3 不應該是公開的),則需要將身份附加到 InferenceService 以驗證使用者身份。KFServing 允許以受管方式透過 ServiceAccount
傳遞掛載在容器上的身份並連線憑證。
使用 MinIO 進行模型儲存與身份驗證
如果嘗試存取可能儲存在 MinIO 上的模型,可以使用 MinIO 身份資訊建立金鑰,然後將其附加到服務帳戶。以下是一個帶有 KFServing 相關註解的 MinIO 金鑰範例:
apiVersion: v1
data:
awsAccessKeyID: xxxx
awsSecretAccessKey: xxxxxxxxx
kind: Secret
metadata:
annotations:
serving.kubeflow.org/s3-endpoint: minio-service.kubeflow.svc.cluster.local:9000
serving.kubeflow.org/s3-verifyssl: "0"
serving.kubeflow.org/s3-usehttps: "0"
serving.kubeflow.org/s3-region: us-east-1
name: minioaccess
namespace: my-namespace
這個 YAML 定義了一個 Kubernetes Secret,用於儲存 MinIO 的存取憑證。特別重要的是 metadata 下的 annotations 部分,它提供了 KFServing 連線到 MinIO 服務所需的設定:
s3-endpoint
:指定 MinIO 服務的端點s3-verifyssl
:設定為 “0” 表示不驗證 SSL 證書s3-usehttps
:設定為 “0” 表示不使用 HTTPSs3-region
:指定 S3 相容儲存的區域
透過這些註解,KFServing 可以正確設定與 MinIO 的連線,並使用提供的憑證存取儲存在 MinIO 中的模型。
KFServing 的優勢與應用場景
KFServing 提供了多項優勢,使其成為機器學習模型佈署的理想選擇:
- 簡化佈署流程:透過標準化的 CRD 定義,大幅簡化模型佈署過程
- 多框架支援:原生支援 TensorFlow、PyTorch、scikit-learn 等多種機器學習框架
- 自動擴充套件:根據 Knative 提供的自動擴充套件能力,可根據流量需求動態調整資源
- 金絲雀發布:支援漸進式佈署策略,降低新模型版本引入的風險
- 模型解釋:內建模型解釋功能,增強模型透明度和可解釋性
- 前後處理能力:透過轉換器元件支援資料前處理和後處理
- 多模型管理:在同一平台上管理和佈署多個機器學習模型
KFServing 特別適合以下應用場景:
- 需要高用性和可擴充套件性的生產環境模型佈署
- 需要頻繁更新模型版本的場景
- 對模型解釋性有要求的監管行業應用
- 需要統一管理多種框架模型的混合環境
實際佈署考量與最佳實踐
在將 KFServing 應用到實際生產環境時,有幾點值得考慮:
資源規劃
根據模型大小和預期流量合理設定資源是至關重要的。對於大型模型或高流量場景,應確保:
- 為預測器分配足夠的 CPU 和記憶體
- 若使用 GPU 加速推論,明確指定 GPU 資源需求
- 設定適當的最小和最大副本數,平衡成本和效能
安全性考量
在生產環境中,安全性是不可忽視的:
- 使用 ServiceAccount 和適當的 RBAC 策略限制對模型和資源的存取
- 對儲存在外部服務(如 S3 或 MinIO)的模型實施適當的存取控制
- 考慮啟用網路策略,限制 InferenceService 的入站和出站流量
監控與可觀測性
建立完善的監控系統對於確保服務品質至關重要:
- 監控推論延遲、吞吐量和錯誤率
- 追蹤資源利用率,特別是 CPU、GPU 和記憶體使用情況
- 實施日誌收集和分析,以便快速排查問題
持續佈署與 CI/CD
將 KFServing 整合到 CI/CD 管道中:
- 自動化模型訓練、評估和佈署流程
- 使用金絲雀發布策略安全地推出新模型版本
- 實施自動回復機制,在發現問題時快速還原到穩定版本
KFServing 的資料平面設計和服務架構為機器學習模型提供了強大而靈活的佈署方案。透過理解其核心概念和元件,可以有效利用 KFServing 構建高效、可擴充套件的模型推論服務。無論是簡單的單一模型佈署還是複雜的多模型服務架構,KFServing 都能提供統一的解決方案,簡化機器學習模型從實驗到生產的轉換過程。
在機器學習系統日益複雜的今天,KFServing 作為 Kubeflow 生態系統的重要組成部分,為模型佈署提供了標準化、可擴充套件的方法,使資料科學家和機器學習工程師能夠專注於模型開發,而不必過多擔心佈署細節。隨著 KFServing 的持續發展,其協定和功能也在不斷完善,為未來更多樣化的模型服務需求提供支援。
Kubernetes 與 KFServing 的模型推論服務架構實戰
機器學習模型開發完成後,如何有效地佈署到生產環境是許多團隊面臨的挑戰。在現代雲原生架構中,Kubernetes 結合 KFServing 提供了強大的模型推論解決方案。本文將探討如何利用這些技術構建可擴充套件、高效的模型推論服務架構。
ServiceAccount 與 MinIO 儲存整合
在 Kubernetes 環境中佈署推論服務前,我們首先需要設定適當的服務帳號與存取許可權。以下是一個整合 MinIO 存取許可權的 ServiceAccount 設定範例:
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: my-namespace
secrets:
- name: default-token-rand6
- name: minioaccess
此設定建立了一個名為 default
的 ServiceAccount,位於 my-namespace
名稱空間中。它關聯了兩個 Secret:一個是 Kubernetes 自動生成的 token,另一個是名為 minioaccess
的 Secret,包含了存取 MinIO 物件儲存服務的憑證。這種設定允許佈署在此 ServiceAccount 下的推論服務能夠無縫存取儲存在 MinIO 中的模型檔案。
KFServing 的擴充套件能力與資源管理
KFServing 作為 Kubeflow 生態系統中的核心元件,提供了多種擴充套件選項來最佳化模型推論服務。讓我來解析幾個關鍵擴充套件點:
副本數量控制
KFServing 允許設定最小和最大副本數(min 和 max replicas),這對於滿足動態需求至關重要。透過適當設定這些引數,可以實作:
- 在流量低時縮減資源,甚至縮至零(scale-to-zero)
- 在需求增加時自動擴充套件,避免服務中斷
- 設定上限防止過度設定資源,控制成本
在實務操作中,我發現針對不同模型型別設定不同的擴充套件策略非常重要。例如,對於需要溫機(warm-up)的複雜模型,最小副本數不應設為零,以避免冷啟動延遲。
資源請求與限制
KFServing 預設提供資源設定,但在生產環境中幾乎總是需要根據模型特性進行客製化。例如:
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1"
對於需要硬體加速的模型,KFServing 也支援 GPU 設定:
resources:
limits:
nvidia.com/gpu: 1
這些資源設定指定了容器需要的記憶體、CPU 和 GPU 資源。requests
欄位定義了保證分配的資源量,而 limits
則設定了使用上限。在調整這些值時,需考慮模型大小、批次處理能力和推論延遲要求。過低的設定會導致效能問題,過高則會造成資源浪費。
KFServing 的金絲雀佈署策略
KFServing 提供了優雅的佈署策略,特別是針對模型更新的金絲雀佈署(Canary Deployment)。與傳統的 n 路流量分割不同,KFServing 專注於雙路(default 和 canary)流量分配,提供了三種主要的佈署模式:
標準藍綠佈署
當只使用 default
設定時,KFServing 會建立一個標準的藍綠佈署,對應於 Kubernetes 的 Deployment 資源。這適合於需要一次性完全切換的情境。
固定佈署(Pinned Deployment)
當包含 canary
設定但 canaryTrafficPercent
設為 0 時,系統會建立可獨立定址的 default 和 canary 端點:
spec:
default:
predictor:
tensorflow:
storageUri: "s3://models/flowers-1"
canary:
predictor:
tensorflow:
storageUri: "s3://models/flowers-2"
canaryTrafficPercent: 0
這種設定非常適合實驗性流量測試。你可以將實驗性請求傳送到 canary 端點,同時保持生產流量指向原始模型。在實際應用中,我常利用這種模式進行 A/B 測試,或者在模型發布前進行最終驗證。
漸進式金絲雀佈署
當 canaryTrafficPercent
大於 0 時,系統會建立一個漸進式金絲雀佈署:
spec:
default:
predictor:
tensorflow:
storageUri: "s3://models/flowers-1"
canary:
predictor:
tensorflow:
storageUri: "s3://models/flowers-2"
canaryTrafficPercent: 20
此設定會將 20% 的流量導向新模型(flowers-2),80% 保持在原始模型(flowers-1)。隨著對新模型的信心增加,可以逐步提高 canaryTrafficPercent
值。當值達到 100% 時,canary 版本實際上已成為主要版本,此時應考慮刪除舊版本並重新設定佈署結構。
在實踐中,我通常從 5-10% 的流量開始,監控關鍵指標如準確度和延遲,然後根據實際效能逐步增加比例。這種方法大降低了模型更新的風險。
實際案例:推薦系統的佈署
讓我們將這些概念應用到一個實際案例中,佈署一個產品推薦系統。首先,我們需要定義 InferenceService:
apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
name: "recommender"
namespace: my-namespace
spec:
default:
predictor:
tensorflow:
serviceAccount: default
storageUri: "s3://models/recommender"
這個簡潔的 YAML 定義了一個名為 recommender
的推論服務,使用 TensorFlow 預測器,並指向儲存在 MinIO(透過 S3 協定存取)中的模型。serviceAccount
欄位指定了前面設定的 ServiceAccount,以便服務能夠存取模型儲存。
佈署後,我們可以檢查服務狀態:
$ kubectl get inferenceservices -n my-namespace
NAME URL READY DEFAULT
recommender http://recommender.my-namespace.example.com/v1/models/recommender True 100
傳送預測請求
佈署完成後,我們可以透過以下方式向服務傳送預測請求:
kubectl port-forward --namespace istio-system \
$(kubectl get pod --namespace istio-system \
--selector="app=istio-ingressgateway" \
--output jsonpath='{.items[0].metadata.name}') \
8080:80
curl -v -H "Host: recommender.my-namespace.example.com" \
http://localhost:8080/v1/models/recommender:predict -d \
'{"signature_name":"serving_default",
"inputs": {"products": [[1],[2]],"users" : [[25], [3]]}}'
這個命令序列首先設定了一個連線埠轉發,將本地的 8080 連線埠對映到 Istio 入口閘道器的 80 連線埠,然後使用 curl 傳送一個預測請求。請求中包含了兩個產品 ID(1和2)和兩個使用者 ID(25和3),服務會回傳推薦結果。
注意:如果收到 404 Not Found 錯誤,這可能是 Istio 閘道器的已知問題,特別是在 Kubeflow 1.0.x 版本中。建議使用 Kubeflow 1.1 或更高版本。
KFServing 提供的生產級功能
僅透過幾行 YAML,KFServing 就提供了豐富的生產級機器學習功能:
- 縮至零(Scale to zero):在無流量時自動縮減資源,節省成本
- GPU 自動擴充套件:根據負載自動分配 GPU 資源
- 版本管理:安全的模型更新與回復機制
- 最佳化容器:預先構建的高效容器映像
- 網路策略與認證:內建的安全機制
- 分散式追蹤:監控請求流程與效能
- 指標收集:自動收集關鍵效能指標
這些功能使 KFServing 成為一個強大的平台,不僅滿足當前佈署需求,還能隨著模型複雜度和流量的增長而擴充套件。