通過KServe on ACK Serverless Knative可將 AI 模型部署為Serverless推理服務,實現自動彈性、多版本管理、灰階發布等能力。
步驟一:安裝並配置KServe組件
為確保KServe能與Knative的ALB網關或Kourier網關無縫整合,需要先安裝 KServe 組件,然後修改其預設設定,禁用其內建的 Istio 虛擬服務。
安裝KServe組件。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在組件管理頁簽的add-on 組件地區,定位並部署KServe組件。
禁用 Istio VirtualHost。
編輯
inferenceservice-configConfigMap,將disableIstioVirtualHost設定為true。kubectl get configmap inferenceservice-config -n kserve -o yaml \ | sed 's/"disableIstioVirtualHost": false/"disableIstioVirtualHost": true/g' \ | kubectl apply -f -預期輸出:
configmap/inferenceservice-config configured驗證配置。
kubectl get configmap inferenceservice-config -n kserve -o yaml \ | grep '"disableIstioVirtualHost":' \ | tail -n1 \ | awk -F':' '{gsub(/[ ,]/,"",$2); print $2}'輸出為
true,表明配置已更新。重啟 KServe 控制器以應用配置變更。
kubectl rollout restart deployment kserve-controller-manager -n kserve
步驟二:部署InferenceService推理服務
本樣本部署了一個基於鳶尾花(Iris)資料集訓練的scikit-learn分類模型,將順序接收花朵的四項尺寸特徵值,並預測其所屬的具體類別。
輸入為按順序排列的四個數值特徵:
| 輸出為代表預測類別的索引:
|
建立inferenceservice.yaml,部署推理服務。
apiVersion: "serving.kserve.io/v1beta1" kind: "InferenceService" metadata: name: "sklearn-iris" spec: predictor: model: # 模型的格式,此處為sklearn modelFormat: name: sklearn image: "kube-ai-registry.cn-shanghai.cr.aliyuncs.com/ai-sample/kserve-sklearn-server:v0.12.0" command: - sh - -c - "python -m sklearnserver --model_name=sklearn-iris --model_dir=/models --http_port=8080"部署InferenceService。
kubectl apply -f inferenceservice.yaml查看服務狀態。
kubectl get inferenceservices sklearn-iris輸出中,
READY列顯示True,表明服務狀態正常。NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE sklearn-iris http://sklearn-iris-predictor-default.default.example.com True 100 sklearn-iris-predictor-default-00001 51s
步驟三:訪問服務
通過叢集的入口網關向服務發送推理請求。
在Knative頁面的服務管理頁簽,擷取ALB或Kourier網關的訪問網關和服務預設網域名稱,供後續訪問服務。
下圖以ALB網關為例,Kourier網關介面類似。

準備請求資料。
在本地終端,建立一個名為
./iris-input.json檔案,包含兩個數組,每個數組為一個待預測樣本。cat <<EOF > "./iris-input.json" { "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] } EOF在本地終端發送推理請求,訪問服務。
將
${INGRESS_DOMAIN}替換為步驟1擷取的訪問網關地址。curl -H "Content-Type: application/json" -H "Host: sklearn-iris-predictor.default.example.com" "http://${INGRESS_DOMAIN}/v1/models/sklearn-iris:predict" -d @./iris-input.json輸出表示模型對兩個輸入樣本的預測類別索引均為1,即雜色鳶尾 (Iris Versicolour)。
{"predictions":[1,1]}
計費說明
KServe和Knative組件本身不產生額外費用。但在使用過程中產生的計算資源(如ECS、ECI)、網路資源(如ALB、CLB)等費用,由各雲產品收取。請參見雲產品資源費用。
常見問題
InferenceService狀態長時間處於Not Ready,如何排查?
可通過以下步驟排查:
執行
kubectl describe inferenceservice <yourServiceName>查看Event,確認是否存在錯誤資訊。執行
kubectl get pods查看是否有與該服務相關的Pod(通常以服務名開頭)處於Error或CrashLoopBackOff狀態。如Pod狀態異常,通過
kubectl logs <pod-name> -c kserve-container查看模型服務容器的日誌,檢查模型載入是否失敗(例如,網路問題導致模型無法下載、模型檔案格式錯誤等)。
如何部署自己訓練的模型?
可將模型檔案上傳到OSS Bucket,在建立InferenceService時,將spec.predictor.model.storageUri欄位的值替換為模型檔案所在的URI。同時,根據模型架構,正確設定modelFormat(例如 tensorflow、pytorch、onnx 等)。
如何為模型服務配置GPU資源?
如果模型需要GPU進行推理,可以在InferenceService的YAML檔案中為predictor添加resources欄位來申請GPU資源。樣本如下。
關於如何在Knative中使用GPU資源,請參見使用GPU資源。
spec:
predictor:
resources:
requests:
nvidia.com/gpu: "1"
limits:
nvidia.com/gpu: "1"相關文檔
如需在Knative中部署AI模型推理服務,可參見在Knative中部署AI模型推理服務的最佳實務獲得配置建議。
ACK Knative提供Stable Diffusion的應用模板,請參見基於Knative部署生產層級的Stable Diffusion服務。