隨著技術的發展,AI應用的模型資料越來越大,但是通過儲存服務(如OSS、NAS等)拉取這些大檔案時可能會出現長時間的延遲和冷啟動問題。您可以利用Fluid顯著提升模型載入速度,從而最佳化推理服務的效能,特別是對於基於KServe的推理服務而言。本文以Qwen-7B-Chat-Int8模型、GPU類型為V100卡為例,示範如何在KServe中使用Fluid實現模型加速。
前提條件
已建立一個非ContainerOS作業系統的ACK Pro版叢集,且叢集版本為1.22及以上,同時叢集中至少有3個節點,每個節點的剩餘記憶體需大於3GB。具體操作,請參見建立ACK Pro版叢集。
已安裝雲原生AI套件並部署ack-fluid組件。具體操作,請參見安裝雲原生AI套件。
已安裝Arena用戶端,且版本不低於0.9.15。具體操作,請參見配置Arena用戶端。
已安裝ack-kserve。具體操作,請參見安裝ack-kserve️。
已開通阿里雲Object Storage Service服務。具體操作,請參見開通OSS服務。
步驟一:準備模型資料並上傳OSS Bucket
下載模型。本文以Qwen-7B-Chat-Int8模型為例。
執行以下命令,安裝Git。
sudo yum install git執行以下命令,安裝Git LFS(Large File Support)外掛程式。
sudo yum install git-lfs執行以下命令,將ModelScope上的Qwen-7B-Chat-Int8倉庫複製到本地。
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat-Int8.git執行以下命令,進入Qwen-7B-Chat-Int8倉庫目錄。
cd Qwen-7B-Chat-Int8執行以下命令,在Qwen-7B-Chat-Int8目錄下,下載LFS管理的大檔案。
git lfs pull
將下載的Qwen-7B-Chat-Int8檔案上傳至OSS。
步驟二:建立Dataset和JindoRuntime
Dataset可以高效地組織和處理資料,而整合JindoRuntime可以通過資料緩衝策略進一步加速資料訪問,兩者結合可以大幅提升資料處理和模型服務的效能。
執行以下命令,建立用於儲存OSS的訪問憑證的Secret。
kubectl apply -f-<<EOF apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: fs.oss.accessKeyId: <YourAccessKey ID> fs.oss.accessKeySecret: <YourAccessKey Secret> EOF其中,
fs.oss.accessKeyId和fs.oss.accessKeySecret是用來訪問OSS的AccessKey ID(AK)和AccessKey Secret(SK)。關於如何擷取AK和SK,請參見擷取AccessKey。預期輸出:
secret/oss-secret created建立並拷貝以下內容到resource.yaml檔案中,用於建立一個Dataset和一個JindoRuntime。關於Dataset及JindoRuntime的詳細配置資訊,請參見JindoFS加速OSS檔案訪問。
Dataset用於描述遠端儲存資料集和UFS的資訊。
JindoRuntime用於啟動一個JindoFS的叢集來提供快取服務。
執行以下命令,建立JindoRuntime和Dataset。
kubectl apply -f resource.yaml預期輸出:
dataset.data.fluid.io/qwen-7b-chat-int8 created jindoruntime.data.fluid.io/qwen-7b-chat-int8 created
步驟三:部署vLLM推理服務
執行以下命令,部署一個基於KServe的模型服務。
如下所示,利用vLLM推理架構和KServe部署了一個服務於qwen-7b-chat-Int8語言模型的服務。
arena serve kserve \ --name=qwen-fluid \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \ --gpus=1 \ --cpu=4 \ --memory=12Gi \ --data="qwen-7b-chat-int8:/mnt/models/Qwen-7B-Chat-Int8" \ "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization 0.95 --quantization gptq --max-model-len=6144"預期輸出:
inferenceservice.serving.kserve.io/qwen-fluid created INFO[0002] The Job qwen-fluid has been submitted successfully INFO[0002] You can run `arena serve get qwen-fluid --type kserve -n default` to check the job status預期輸出表明推理服務已部署成功。
步驟四:查看資料加速效果
執行以下命令,查看Dataset資訊。
kubectl get dataset qwen-7b-chat-int8預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE qwen-7b-chat-int8 17.01GiB 10.46MiB 18.00GiB 0.1% Bound 23h執行以下命令,查看應用就緒的時間。
# 從所有Pod列表中篩選出名字中包含qwen-fluid的Pod,並提取出Pod的名稱賦值給變數POD_NAME。 POD_NAME=$(kubectl get po |grep qwen-fluid|awk -F " " '{print $1}') # 查看應用程式伺服器準備就緒所花費的時間 kubectl logs $POD_NAME |grep -i "server ready takes"預期輸出:
server ready takes 25.875763 s輸出結果顯示使用Fluid資料加速後應用就緒時間僅為25.875763s。具體加速效果與您的應用、資料集大小以及環境配置有關,本資料僅供參考。
如需瞭解JindoRuntime加速效果的詳細資料,請參見JindoFS加速OSS檔案訪問。
相關文檔
如需瞭解資料加速Fluid的更多資訊,請參見資料加速Fluid概述。