KServe(原KFServing)是雲原生環境的一個模型伺服器和推理引擎,具備自動縮放、零縮放和金絲雀部署等能力。通過ASM整合KServe,開發人員可以在雲原生應用程式中快速部署和管理機器學習模型的推理服務,減少手動設定和維護的工作量,提高開發效率。
前提條件
已添加叢集到ASM執行個體,且ASM執行個體版本為1.17.2.7及以上。
已在ACK叢集中部署Knative組件,並開啟Knative on ASM功能 。具體操作,請參見使用Knative on ASM部署Serverless應用的步驟一。
KServe介紹
KServe作為模型伺服器,為大規模服務機器學習和深度學習模型提供了基礎。KServe可以部署為傳統的Kubernetes Deployment方式,也可以部署為支援歸零的Serverless方式,提供基於流量的自動擴縮功能以及模型的藍綠和金絲雀部署等。更多資訊,請參見KServe。
步驟一:安裝KServe組件
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在KServe on ASM頁面,單擊開啟KServe on ASM。
KServe依賴於CertManager,安裝KServe會自動安裝CertManager組件。如需使用自建CertManager,請關閉在叢集中自動安裝CertManager組件。
步驟二:擷取ASM網關地址
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在入口網關頁面,查看並記錄目標網關的服務地址。
步驟三:建立推理服務
本文使用scikit-learn的訓練模型進行測試。
使用kubectl串連到資料面叢集,執行以下命令,建立用於部署KServe資源的命名空間。
kubectl create namespace kserve-test
建立InferenceService。
使用以下內容,建立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"
執行以下命令,在kserve-test命名空間中建立InferenceService。
kubectl apply -f isvc.yaml -n kserve-test
執行以下命令,查詢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
READY
為True
,表明InferenceService sklearn-iris安裝成功。可選:查看虛擬服務和網關規則。
InferenceService sklearn-iris安裝成功後,會自動建立對應模型配置的虛擬服務和網關規則。您可以執行以下步驟進行查看。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在虛擬服務頁面上方,單擊命名空間右側的表徵圖,選擇命名空間為kserve-test,查看建立的虛擬服務。
在左側導覽列,選擇 。
在網關規則頁面上方,選擇命名空間為knative-serving,查看建立的網關規則。
步驟四:訪問模型服務
下文以Linux和Mac環境為例進行說明。
執行以下命令,建立模型輸入檔案。
cat <<EOF > "./iris-input.json" { "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] } EOF
通過ASM網關進行訪問測試。
執行以下命令,擷取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
執行以下命令,使用步驟二擷取的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]}
對模型服務進行效能測試。
執行以下命令,部署測試端的應用進行壓測。
kubectl create -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/kserve/v0.7/loadtest.yaml
執行以下命令,查看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
執行以下命令,查看測試的日誌結果。
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:
相關文檔
如果您需要加速雲原生環境中資料密集型應用(例如巨量資料應用、AI應用等)的模型載入過程,請參見ASM結合KServe與Fluid實現資料加速訪問的AI Serving。
如果您需要將原始輸入資料轉換為模型伺服器所需的格式,請參見使用InferenceService部署Transformer服務。
如果您部署的模型服務涉及大容量、高密度和頻繁變化的用例,可以使用模型服務網格對多個模型服務進行管理、部署和調度。具體操作,請參見模型服務網格。