ASM集成KServe實現(xiàn)云原生AI模型推理服務(wù)
KServe(原KFServing)是云原生環(huán)境的一個模型服務(wù)器和推理引擎,具備自動縮放、零縮放和金絲雀部署等能力。通過ASM集成KServe,開發(fā)人員可以在云原生應(yīng)用程序中快速部署和管理機器學(xué)習(xí)模型的推理服務(wù),減少手動配置和維護的工作量,提高開發(fā)效率。
前提條件
已添加集群到ASM實例,且ASM實例版本為1.17.2.7及以上。
已在ACK集群中部署Knative組件,并開啟Knative on ASM功能 。具體操作,請參見使用Knative on ASM部署Serverless應(yīng)用的步驟一。
KServe介紹
KServe作為模型服務(wù)器,為大規(guī)模服務(wù)機器學(xué)習(xí)和深度學(xué)習(xí)模型提供了基礎(chǔ)。KServe可以部署為傳統(tǒng)的Kubernetes Deployment方式,也可以部署為支持歸零的Serverless方式,提供基于流量的自動擴縮功能以及模型的藍綠和金絲雀部署等。更多信息,請參見KServe。
步驟一:安裝KServe組件
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在KServe on ASM頁面,單擊開啟KServe on ASM。
KServe依賴于CertManager,安裝KServe會自動安裝CertManager組件。如需使用自建CertManager,請關(guān)閉在集群中自動安裝CertManager組件。
步驟二:獲取ASM網(wǎng)關(guān)地址
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在入口網(wǎng)關(guān)頁面,查看并記錄目標網(wǎng)關(guān)的服務(wù)地址。
步驟三:創(chuàng)建推理服務(wù)
本文使用scikit-learn的訓(xùn)練模型進行測試。
使用kubectl連接到數(shù)據(jù)面集群,執(zhí)行以下命令,創(chuàng)建用于部署KServe資源的命名空間。
kubectl create namespace kserve-test
創(chuàng)建InferenceService。
使用以下內(nèi)容,創(chuàng)建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"
執(zhí)行以下命令,在kserve-test命名空間中創(chuàng)建InferenceService。
kubectl apply -f isvc.yaml -n kserve-test
執(zhí)行以下命令,查詢InferenceService sklearn-iris的安裝狀態(tài)。
kubectl get inferenceservices sklearn-iris -n kserve-test
預(yù)期輸出:
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安裝成功。可選:查看虛擬服務(wù)和網(wǎng)關(guān)規(guī)則。
InferenceService sklearn-iris安裝成功后,會自動創(chuàng)建對應(yīng)模型配置的虛擬服務(wù)和網(wǎng)關(guān)規(guī)則。您可以執(zhí)行以下步驟進行查看。
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在虛擬服務(wù)頁面上方,單擊命名空間右側(cè)的圖標,選擇命名空間為kserve-test,查看新建的虛擬服務(wù)。
在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)關(guān)規(guī)則頁面上方,選擇命名空間為knative-serving,查看新建的網(wǎng)關(guān)規(guī)則。
步驟四:訪問模型服務(wù)
下文以Linux和Mac環(huán)境為例進行說明。
執(zhí)行以下命令,創(chuàng)建模型輸入文件。
cat <<EOF > "./iris-input.json" { "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] } EOF
通過ASM網(wǎng)關(guān)進行訪問測試。
執(zhí)行以下命令,獲取SERVICE_HOSTNAME。
SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3) echo $SERVICE_HOSTNAME
預(yù)期輸出:
sklearn-iris.kserve-test.example.com
執(zhí)行以下命令,使用步驟二獲取的ASM網(wǎng)關(guān)地址,訪問模型服務(wù)。
ASM_GATEWAY="XXXX" # 請將XXXX替換為ASM網(wǎng)關(guān)地址。 curl -H "Host: ${SERVICE_HOSTNAME}" http://${ASM_GATEWAY}:80/v1/models/sklearn-iris:predict -d @./iris-input.json
預(yù)期輸出:
{"predictions": [1, 1]}
對模型服務(wù)進行性能測試。
執(zhí)行以下命令,部署測試端的應(yīng)用進行壓測。
kubectl create -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/kserve/v0.7/loadtest.yaml
執(zhí)行以下命令,查看Pod名稱。
kubectl get pod
預(yù)期輸出:
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
執(zhí)行以下命令,查看測試的日志結(jié)果。
kubectl logs load-testxhwtq-pj9fq # 請?zhí)鎿QPod名稱為實際的測試應(yīng)用Pod名稱。
預(yù)期輸出:
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:
相關(guān)文檔
如果您需要加速云原生環(huán)境中數(shù)據(jù)密集型應(yīng)用(例如大數(shù)據(jù)應(yīng)用、AI應(yīng)用等)的模型加載過程,請參見ASM結(jié)合KServe與Fluid實現(xiàn)數(shù)據(jù)加速訪問的AI Serving。
如果您需要將原始輸入數(shù)據(jù)轉(zhuǎn)換為模型服務(wù)器所需的格式,請參見使用InferenceService部署Transformer服務(wù)。
如果您部署的模型服務(wù)涉及大容量、高密度和頻繁變化的用例,可以使用模型服務(wù)網(wǎng)格對多個模型服務(wù)進行管理、部署和調(diào)度。具體操作,請參見模型服務(wù)網(wǎng)格。