KServe(原KFServing)是云原生環境的一個模型服務器和推理引擎,支持自動擴縮容、縮容至零、金絲雀部署等能力。本文介紹如何基于阿里云服務網格ASM和Arena部署Serverless模式的KServe模型推理服務。
前提條件
已安裝KServe組件。具體操作,請參見ASM集成KServe實現云原生AI模型推理服務。
已安裝Arena客戶端,且版本不低于0.9.11。具體操作,請參見配置Arena客戶端。
步驟一:準備模型數據
您可以使用NAS或OSS準備模型數據,具體操作,請參見使用NAS靜態存儲卷、使用OSS靜態存儲卷。本文以NAS為例說明如何準備模型數據。
1、獲取NAS實例的掛載點
登錄文件存儲NAS控制臺,在左側導航欄選擇文件系統 > 文件系統列表,在頁面頂部選擇NAS實例所在地域。
在文件系統列表頁面,單擊目標文件系統ID進入文件詳情頁面,單擊掛載使用,懸浮鼠標至,查看NAS實例的掛載地址,并記錄此處的掛載地址和掛載命令以備后續使用。
2、為目標集群配置存儲卷PV和存儲聲明PVC
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在存儲卷頁面右上方,單擊創建。
在創建存儲卷對話框中進行參數配置,然后單擊創建,創建名為training-data的存儲卷。
以下為主要參數說明,其他配置項可根據業務按需配置。詳細信息,請參見使用NAS靜態存儲卷。
配置項
說明
存儲卷類型
NAS
名稱
training-data
掛載點域名
選擇步驟1查詢到的掛載點地址。
然后在左側導航欄,選擇
,在存儲聲明頁面右上方,單擊創建。在創建存儲聲明對話框中進行參數配置,然后單擊創建,創建名為training-data的存儲聲明。
以下為主要參數說明,其他配置項可根據業務按需配置。詳細信息,請參見使用NAS靜態存儲卷。
配置項
說明
存儲聲明類型
NAS
名稱
training-data
分配模式
選擇已有存儲卷。
已有存儲卷
單擊選擇已有存儲卷鏈接選擇已創建的存儲卷PV。
3、將數據下載到NAS中
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在節點頁面,單擊目標節點名稱進入節點的實例詳情頁面,單擊遠程連接,然后單擊立即登錄,進入遠程連接頁面。
執行步驟1獲取到的掛載命令,掛載NAS。
下載BLOOM模型和訓練數據。
從Hugging Face下載
bloom-560m
模型,將模型存儲到PVC中,對應路徑為pvc://training-data/bloom-560m
。
步驟二:部署推理服務
執行以下命令,檢查集群中可用的GPU資源。
arena top node
預期輸出:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 1 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 1 0 --------------------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 0/2 (0.0%)
預期輸出表明,有2個包含GPU的節點可用于運行推理服務。
執行以下命令,啟動名稱為bloom-560m的推理服務。
pvc training-data
將會被掛載到容器內的/mnt/models
目錄,即步驟一中下載好的模型路徑。arena serve kserve \ --name=bloom-560m \ --image=ghcr.io/huggingface/text-generation-inference:1.0.2 \ --gpus=1 \ --cpu=6 \ --memory=20Gi \ --port=8080 \ --env=STORAGE_URI=pvc://training-data \ "text-generation-launcher --disable-custom-kernels --model-id /mnt/models/bloom-560m --num-shard 1 -p 8080"
預期輸出:
inferenceservice.serving.kserve.io/bloom-560m created INFO[0013] The Job bloom-560m has been submitted successfully INFO[0013] You can run `arena serve get bloom-560m --type kserve -n default` to check the job status
命令中的參數說明如下所示:
參數
是否必選
說明
--name
是
指定提交的作業名稱,全局唯一,不能重復。
--image
是
指定推理服務的鏡像地址。
--gpus
否
指定推理服務需要使用的GPU卡數。默認值為0。
--cpu
否
指定推理服務需要使用的CPU數。
--memory
否
指定推理服務需要使用的內存數。
--port
否
推理服務對外暴露的端口。
--env
否
推理服務環境變量,這里指定模型存儲的PVC為training-data。
步驟三:驗證推理服務
執行以下命令,查看KServe推理服務的部署情況。
arena serve get bloom-560m
預期輸出:
Name: bloom-560m Namespace: default Type: KServe Version: 00001 Desired: 1 Available: 1 Age: 9m Address: http://bloom-560m.default.example.com Port: :80 GPU: 1 LatestRevision: bloom-560m-predictor-00001 LatestPrecent: 100 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp Running 9m 2/2 0 1 cn-hongkong.192.1xx.x.xxx
預期輸出表明,KServe推理服務部署成功,模型訪問地址為
http://bloom-560m.default.example.com
。獲取ASM網關地址。具體操作,請參見獲取ASM網關地址。
執行下列命令,使用獲取到的ASM網關地址訪問推理服務。
# 請將${ASM_GATEWAY}替換為ASM網關地址。 curl -H "Host: bloom-560m.default.example.com" http://${ASM_GATEWAY}:80/generate \ -X POST \ -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":17}}' \ -H 'Content-Type: application/json'
預期輸出:
{"generated_text":" Deep Learning is a new type of machine learning that is used to solve complex problems."}
步驟四:更新推理服務
創建一個新的模型版本,可將PVC中的模型地址復制到新的路徑
bloom-560m-v2
。執行下列命令,灰度更新KServe推理服務,指定新版本模型路徑為
bloom-560m-v2
,新版本分配10%流量,老版本分配90%流量。arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=10 \ "text-generation-launcher --disable-custom-kernels --model-id /mnt/models/bloom-560m-v2 --num-shard 1 -p 8080"
執行以下命令,查看推理服務運行情況。
arena serve get bloom-560m
預期輸出:
Name: bloom-560m Namespace: default Type: KServe Version: 00002 Desired: 2 Available: 2 Age: 36m Address: http://bloom-560m.default.example.com Port: :80 GPU: 2 LatestRevision: bloom-560m-predictor-00002 LatestPrecent: 10 PrevRevision: bloom-560m-predictor-00001 PrevPrecent: 90 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp Running 36m 2/2 0 1 cn-hongkong.192.1xx.x.xxx bloom-560m-predictor-00002-deployment-5b7bb66cfb-nqprp Running 6m 2/2 0 1 cn-hongkong.192.1xx.x.xxx
新版本測試通過后,可執行以下命令,將
canary-traffic-percent
的值設置為100,將流量全部轉發到新版本。arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=100
(可選)步驟五:刪除推理服務
如果需要刪除推理服務,可執行以下命令。
arena serve delete bloom-560m