全部產品
Search
文件中心

Alibaba Cloud Service Mesh:ASM整合KServe實現雲原生AI模型推理服務

更新時間:Jun 30, 2024

KServe(原KFServing)是雲原生環境的一個模型伺服器和推理引擎,具備自動縮放、零縮放和金絲雀部署等能力。通過ASM整合KServe,開發人員可以在雲原生應用程式中快速部署和管理機器學習模型的推理服務,減少手動設定和維護的工作量,提高開發效率。

前提條件

KServe介紹

KServe作為模型伺服器,為大規模服務機器學習和深度學習模型提供了基礎。KServe可以部署為傳統的Kubernetes Deployment方式,也可以部署為支援歸零的Serverless方式,提供基於流量的自動擴縮功能以及模型的藍綠和金絲雀部署等。更多資訊,請參見KServe

KServe

步驟一:安裝KServe組件

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇生態整合中心 > KServe on ASM

  3. KServe on ASM頁面,單擊開啟KServe on ASM

    KServe依賴於CertManager,安裝KServe會自動安裝CertManager組件。如需使用自建CertManager,請關閉在叢集中自動安裝CertManager組件

步驟二:擷取ASM網關地址

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

  3. 入口網關頁面,查看並記錄目標網關的服務地址。

步驟三:建立推理服務

本文使用scikit-learn的訓練模型進行測試。

  1. 使用kubectl串連到資料面叢集,執行以下命令,建立用於部署KServe資源的命名空間。

    kubectl create namespace kserve-test
  2. 建立InferenceService。

    1. 使用以下內容,建立isvc.yaml檔案。

      apiVersion: "serving.kserve.io/v1beta1"
      kind: "InferenceService"
      metadata:
        name: "sklearn-iris"
      spec:
        predictor:
          model:
            modelFormat:
              name: sklearn
            storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
    2. 執行以下命令,在kserve-test命名空間中建立InferenceService。

      kubectl apply -f isvc.yaml -n kserve-test
  3. 執行以下命令,查詢InferenceService sklearn-iris的安裝狀態。

    kubectl get inferenceservices sklearn-iris -n kserve-test

    預期輸出:

    NAME           URL                                           READY   PREV   LATEST   PREVROLLEDOUTREVISION   LATESTREADYREVISION            AGE
    sklearn-iris   http://sklearn-iris.kserve-test.example.com   True           100                              sklearn-iris-predictor-00001   3h26m

    READYTrue,表明InferenceService sklearn-iris安裝成功。

  4. 可選:查看虛擬服務和網關規則。

    InferenceService sklearn-iris安裝成功後,會自動建立對應模型配置的虛擬服務和網關規則。您可以執行以下步驟進行查看。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇流量管理中心 > 虛擬服務

    3. 虛擬服務頁面上方,單擊命名空間右側的重新整理表徵圖,選擇命名空間kserve-test,查看建立的虛擬服務。

    4. 在左側導覽列,選擇ASM網關 > 網關規則

    5. 網關規則頁面上方,選擇命名空間knative-serving,查看建立的網關規則。

步驟四:訪問模型服務

下文以Linux和Mac環境為例進行說明。

  1. 執行以下命令,建立模型輸入檔案。

    cat <<EOF > "./iris-input.json"
    {
      "instances": [
        [6.8,  2.8,  4.8,  1.4],
        [6.0,  3.4,  4.5,  1.6]
      ]
    }
    EOF
  2. 通過ASM網關進行訪問測試。

    1. 執行以下命令,擷取SERVICE_HOSTNAME。

      SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3)
      echo $SERVICE_HOSTNAME

      預期輸出:

      sklearn-iris.kserve-test.example.com
    2. 執行以下命令,使用步驟二擷取的ASM網關地址,訪問模型服務。

      ASM_GATEWAY="XXXX" # 請將XXXX替換為ASM網關地址。
      curl  -H "Host: ${SERVICE_HOSTNAME}" http://${ASM_GATEWAY}:80/v1/models/sklearn-iris:predict -d @./iris-input.json

      預期輸出:

      {"predictions": [1, 1]}
  3. 對模型服務進行效能測試。

    1. 執行以下命令,部署測試端的應用進行壓測。

      kubectl create -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/kserve/v0.7/loadtest.yaml
    2. 執行以下命令,查看Pod名稱。

      kubectl get pod

      預期輸出:

      NAME                                                       READY   STATUS      RESTARTS   AGE
      load-testxhwtq-pj9fq                                       0/1     Completed   0          3m24s
      sklearn-iris-predictor-00001-deployment-857f9bb56c-vg8tf   2/2     Running     0          51m
    3. 執行以下命令,查看測試的日誌結果。

      kubectl logs load-testxhwtq-pj9fq # 請替換Pod名稱為實際的測試應用Pod名稱。

      預期輸出:

      Requests      [total, rate, throughput]         30000, 500.02, 500.01
      Duration      [total, attack, wait]             59.999s, 59.998s, 1.352ms
      Latencies     [min, mean, 50, 90, 95, 99, max]  1.196ms, 1.463ms, 1.378ms, 1.588ms, 1.746ms, 2.99ms, 18.873ms
      Bytes In      [total, mean]                     690000, 23.00
      Bytes Out     [total, mean]                     2460000, 82.00
      Success       [ratio]                           100.00%
      Status Codes  [code:count]                      200:30000
      Error Set:

相關文檔