全部產品
Search
文件中心

Container Service for Kubernetes:使用KServe快速部署推理服務

更新時間:Oct 31, 2025

通過KServe on ACK Serverless Knative可將 AI 模型部署為Serverless推理服務,實現自動彈性、多版本管理、灰階發布等能力。

步驟一:安裝並配置KServe組件

為確保KServe能與Knative的ALB網關Kourier網關無縫整合,需要先安裝 KServe 組件,然後修改其預設設定,禁用其內建的 Istio 虛擬服務。

  1. 安裝KServe組件。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

    3. 組件管理頁簽的add-on 組件地區,定位並部署KServe組件。

  2. 禁用 Istio VirtualHost。

    編輯inferenceservice-config ConfigMap,將 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
  3. 驗證配置。

    kubectl get configmap inferenceservice-config -n kserve -o yaml \
    | grep '"disableIstioVirtualHost":' \
    | tail -n1 \
    | awk -F':' '{gsub(/[ ,]/,"",$2); print $2}'

    輸出為true,表明配置已更新。

  4. 重啟 KServe 控制器以應用配置變更。

    kubectl rollout restart deployment kserve-controller-manager -n kserve

步驟二:部署InferenceService推理服務

本樣本部署了一個基於鳶尾花(Iris)資料集訓練的scikit-learn分類模型,將順序接收花朵的四項尺寸特徵值,並預測其所屬的具體類別。

輸入為按順序排列的四個數值特徵:

  1. 萼片長度 (Sepal Length)

  2. 萼片寬度 (Sepal Width)

  3. 花瓣長度 (Petal Length)

  4. 花瓣寬度 (Petal Width)

輸出為代表預測類別的索引:

  • 0:山鳶尾 (Iris Setosa)

  • 1:雜色鳶尾 (Iris Versicolour)

  • 2:維吉尼亞鳶尾 (Iris Virginica)

  1. 建立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"
  2. 部署InferenceService。

    kubectl apply -f inferenceservice.yaml
  3. 查看服務狀態。

    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

步驟三:訪問服務

通過叢集的入口網關向服務發送推理請求。

  1. Knative頁面的服務管理頁簽,擷取ALB或Kourier網關的訪問網關和服務預設網域名稱,供後續訪問服務。

    下圖以ALB網關為例,Kourier網關介面類似。

    image

  2. 準備請求資料。

    在本地終端,建立一個名為./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
  3. 在本地終端發送推理請求,訪問服務。

    ${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,如何排查?

可通過以下步驟排查:

  1. 執行kubectl describe inferenceservice <yourServiceName> 查看Event,確認是否存在錯誤資訊。

  2. 執行kubectl get pods 查看是否有與該服務相關的Pod(通常以服務名開頭)處於ErrorCrashLoopBackOff狀態。

  3. 如Pod狀態異常,通過 kubectl logs <pod-name> -c kserve-container 查看模型服務容器的日誌,檢查模型載入是否失敗(例如,網路問題導致模型無法下載、模型檔案格式錯誤等)。

如何部署自己訓練的模型?

可將模型檔案上傳到OSS Bucket,在建立InferenceService時,將spec.predictor.model.storageUri欄位的值替換為模型檔案所在的URI。同時,根據模型架構,正確設定modelFormat(例如 tensorflowpytorchonnx 等)。

如何為模型服務配置GPU資源?

如果模型需要GPU進行推理,可以在InferenceService的YAML檔案中為predictor添加resources欄位來申請GPU資源。樣本如下。

關於如何在Knative中使用GPU資源,請參見使用GPU資源
spec:
  predictor:
    resources:
      requests:
        nvidia.com/gpu: "1"
      limits:
        nvidia.com/gpu: "1"

相關文檔