部署模型時,您可以根據自身需求選擇模型來源以及部署模型的平台。本文以Qwen1.5-4B-Chat模型、GPU類型為T4卡為例,示範如何在ACK中快速部署ModelScope模型、HuggingFace模型及本地模型。
本教程使用FastAPI和Uvicorn架構部署模型,僅適用於快速體驗模型功能,不建議在生產環境中使用。如需在生產環境部署LLM模型,建議使用vLLM、Triton等成熟的推理服務架構。詳細資料,請參見使用vLLM部署Qwen模型推理服務、使用Triton部署Qwen模型推理服務。
模型介紹
ModelScope
ModelScope彙集了行業領先的預訓練模型,可以減少開發人員的重複研發成本,提供綠色環保、開源開放的AI開發環境和模型服務。ModelScope平台以開源的方式提供了諸多優質模型,您可以在ModelScope免費體驗與下載使用。更多資訊,請參見ModelScope概覽介紹。
HuggingFace
HuggingFace擁有超過350,000個模型、75,000個資料集以及150,000個示範應用程式的平台,所有模型、資料集及應用程式均開源,您可以在HuggingFace上共同構建機器學習專案。更多資訊,請參見HuggingFace文檔。
前提條件
已建立包含GPU節點的ACK叢集Pro版,且叢集版本為1.22及以上,GPU節點顯存需為16GB及以上。具體操作,請參見建立ACK託管叢集。
建議GPU節點使用525版本驅動,您可以通過為GPU節點池添加標籤
ack.aliyun.com/nvidia-driver-version:525.105.17
指定驅動版本為525.105.17。具體操作,請參見通過指定版本號碼自訂節點GPU驅動版本。已安裝最新版Arena用戶端。具體操作,請參見配置Arena用戶端。
部署ModelScope模型
步驟一:部署推理服務
執行以下命令,通過Arena部署一個自訂類型的服務。該服務名稱為modelscope,版本號碼為v1。
應用啟動後程式會自動從ModelScope下載名為
qwen/Qwen1.5-4B-Chat
的模型。如需修改為其他模型可以修改啟動參數裡的MODEL_ID
欄位,可以通過環境變數DASHSCOPE_API_KEY
配置ModelScope SDK Token資訊。重要ModelScope模型將會下載到容器內,因此GPU節點磁碟空間至少需要預留30 GB。
arena serve custom \ --name=modelscope \ --version=v1 \ --gpus=1 \ --replicas=1 \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=qwen/Qwen1.5-4B-Chat python3 server.py"
參數說明如下所示:
參數
說明
--name
指定推理服務名稱。
--version
指定推理服務版本。
--gpus
指定單個推理服務副本需要使用的GPU卡數。
--replicas
指定推理服務副本數。
--restful-port
指定推理服務對外暴露的連接埠。
--readiness-probe-action
指定就緒探針連線類型,支援HttpGet、Exec、gRPC、TCPSocket。
--readiness-probe-action-option
指定就緒探針串連方式。
--readiness-probe-option
指定就緒探針配置。
--image
指定推理服務的鏡像地址。
預期輸出:
service/modelscope-v1 created deployment.apps/modelscope-v1-custom-serving created INFO[0002] The Job modelscope has been submitted successfully INFO[0002] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status
輸出結果表明一系列與部署名為
modelscope-v1
的模型服務相關的Kubernetes資源建立操作已成功執行。執行以下命令,查看推理服務的詳細資料。
模型下載需要耗費一定時間,因此部署服務後需要等待大約10分鐘才能查看推理服務的詳細資料。
arena serve get modelscope
預期輸出:
Name: modelscope Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 10m Address: 172.16.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- modelscope-v1-custom-serving-5bb85d6555-2p6z9 Running 10m 1/1 0 1 cn-beijing.192.168.XX.XX
輸出結果表明
modelscope
推理服務已被成功部署並處於健康運行狀態,已經準備就緒可以接受請求,且模型及服務環境已成功配置在具有GPU資源的節點上。
步驟二:驗證推理服務
執行以下命令,在推理服務與本地環境之間建立連接埠轉寄。
重要請注意kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress概述。
kubectl port-forward svc/modelscope-v1 8000:8000
預期輸出:
Forwarding from 127.0.0.1:8088 -> 8000 Forwarding from [::1]:8088 -> 8000
執行以下命令,向
modelscope
模型推理服務發送一條模型推理請求。curl -XPOST http://localhost:8000/generate -H "Content-Type: application/json" -d '{"text_input": "什麼是人工智慧?人工智慧是", "parameters": {"stream": false, "temperature": 0.9, "seed": 10}}'
預期輸出:
{"model_name":"/root/.cache/modelscope/hub/qwen/Qwen1___5-4B-Chat","text_output":"什麼是人工智慧?人工智慧是研究如何使電腦和機器模仿人類的智能行為來實現自主思考"}
輸出結果表明模型可以根據提問自動產生關於人工智慧的定義。
(可選)步驟三:清理推理服務
如果不再使用已建立的資源,請執行以下命令,刪除已部署的模型推理服務。
arena serve del modelscope
部署HuggingFace模型
步驟一:部署推理服務
確認容器可以訪問到HuggingFace倉庫。
執行以下命令,通過Arena部署一個自訂類型的服務,該服務名稱為huggingface,版本號碼為v1。
本文通過設定
MODEL_SOURCE
環境變數指定模型倉庫為HuggingFace,應用啟動後會自動從HuggingFace下載名為qwen/Qwen1.5-4B-Chat
的模型,如需修改為其他HuggingFace模型,請修改啟動參數裡的MODEL_ID
欄位。也支援通過環境變數HUGGINGFACE_TOKEN
配置HugginFace Token資訊。重要HuggingFace模型將會下載到容器內,因此GPU節點磁碟空間至少需要預留30 GB。
arena serve custom \ --name=huggingface \ --version=v1 \ --gpus=1 \ --replicas=1 \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=Qwen/Qwen1.5-4B-Chat MODEL_SOURCE=Huggingface python3 server.py"
參數說明如下所示:
參數
說明
--name
指定推理服務名稱。
--version
指定推理服務版本。
--gpus
指定單個推理服務副本需要使用的GPU卡數。
--replicas
指定推理服務副本數。
--restful-port
指定推理服務對外暴露的連接埠。
--readiness-probe-action
指定就緒探針連線類型,支援HttpGet、Exec、gRPC、TCPSocket。
--readiness-probe-action-option
指定就緒探針串連方式。
--readiness-probe-option
指定就緒探針配置。
--image
指定推理服務的鏡像地址。
預期輸出:
service/huggingface-v1 created deployment.apps/huggingface-v1-custom-serving created INFO[0003] The Job huggingface has been submitted successfully INFO[0003] You can run `arena serve get huggingface --type custom-serving -n default` to check the job status
輸出結果表明推理服務已成功部署。
執行以下命令,查看推理服務的詳細資料。
模型下載需要耗費一定時間,因此部署服務後需要等待大約10分鐘才能查看推理服務的詳細資料。
arena serve get huggingface
預期輸出:
Name: huggingface Namespace: default Type: Custom Version: v1 Desired: 1 Available: 0 Age: 1h Address: 172.16.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- huggingface-v1-custom-serving-dcf6cf6c8-2lqzr Running 1h 1/1 0 1 cn-beijing.192.168.XX.XX
輸出結果表明該推理服務的一個Pod(huggingface-v1-custom-serving-dcf6cf6c8-2lqzr)正在穩定運行,且已準備好提供服務。
步驟二:驗證推理服務
執行以下命令,在推理服務與本地環境之間建立連接埠轉寄。
重要請注意kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress概述。
kubectl port-forward svc/huggingface-v1 8000:8000
預期輸出:
Forwarding from 127.0.0.1:8088 -> 8000 Forwarding from [::1]:8088 -> 8000
執行以下命令,向HuggingFace模型推理服務發送一條模型推理請求。
curl -XPOST http://localhost:8000/generate -H "Content-Type: application/json" -d '{"text_input": "什麼是人工智慧?人工智慧是", "parameters": {"stream": false, "temperature": 0.9, "seed": 10}}'
預期輸出:
{"model_name":"Qwen/Qwen1.5-4B-Chat","text_output":"什麼是人工智慧?人工智慧是電腦科學的一個分支,它試圖建立一種能夠類比人類智能的機器"}
輸出結果表明模型可以根據提問自動產生關於人工智慧的定義。
(可選)步驟三:清理推理服務
如果不再使用已建立的資源,請執行以下命令,刪除已部署的模型推理服務。
arena serve del huggingface
部署本地模型
步驟一:下載模型檔案
本文以Qwen1.5-4B-Chat模型為例,示範如何下載模型、上傳模型至OSS,以及在ACK叢集中建立對應的儲存卷PV和儲存卷聲明PVC。
下載模型檔案。
執行以下命令,安裝Git。
# 可執行yum install git或apt install git安裝。 yum install git
執行以下命令,安裝Git LFS(Large File Support)外掛程式。
# 可執行yum install git-lfs或apt install git-lfs安裝。 yum install git-lfs
執行以下命令,將ModelScope上的Qwen1.5-4B-Chat倉庫複製到本地。
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
執行以下命令,進入Qwen1.5-4B-Chat目錄,下載LFS管理的大檔案。
cd Qwen1.5-4B-Chat git lfs pull
將下載的Qwen1.5-4B-Chat檔案上傳至OSS。
為目的地組群配置儲存卷PV和儲存聲明PVC。具體操作,請參見使用OSS靜態儲存卷。
以下為樣本PV的配置資訊:
配置項
說明
儲存卷類型
OSS
名稱
llm-model
訪問認證
配置用於訪問OSS的AccessKey ID和AccessKey Secret。
Bucket ID
選擇已建立的OSS Bucket。
OSS Path
選擇模型所在的路徑,如/models/Qwen1.5-4B-Chat。
以下為樣本PVC的配置資訊:
配置項
說明
儲存宣告類型
OSS
名稱
llm-model
分配模式
選擇已有儲存卷。
已有儲存卷
單擊選擇已有儲存卷連結,選擇已建立的儲存卷PV。
步驟二:部署推理服務
執行以下命令,通過Arena部署一個自訂類型的服務,該服務名稱為local-model。
其中,
--data
參數將已建立的PVCllm-model
掛載到了容器中的/model/Qwen1.5-4B-Chat
目錄下。應用啟動後會從本地目錄/model/Qwen1.5-4B-Chat
載入模型,如需修改為其他本地模型可以修改啟動參數裡的MODEL_ID
欄位。arena serve custom \ --name=local-model \ --version=v1 \ --gpus=1 \ --replicas=1 \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --data=llm-model:/model/Qwen1.5-4B-Chat \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=/model/Qwen1.5-4B-Chat python3 server.py"
參數說明如下所示:
參數
說明
--name
指定推理服務名稱。
--version
指定推理服務版本。
--gpus
指定單個推理服務副本需要使用的GPU卡數。
--replicas
指定推理服務副本數。
--restful-port
指定推理服務對外暴露的連接埠。
--readiness-probe-action
指定就緒探針連線類型,支援HttpGet、Exec、gRPC、TCPSocket。
--readiness-probe-action-option
指定就緒探針串連方式。
--readiness-probe-option
指定就緒探針配置。
--data
掛載共用儲存卷PVC到運行環境中。它由兩部分組成,通過英文冒號(:)分割。冒號左側是您已經準備好的PVC名稱。您可以通過命令
arena data list
查看當前叢集可用的PVC列表;冒號右側是您想將PVC掛載到運行環境中的路徑,也是您訓練代碼要讀取資料或模型的本地路徑。這樣通過掛載的方式,您的代碼就可以訪問PVC中的資料或模型。--image
指定推理服務的鏡像地址。
預期輸出:
service/local-model-v1 created deployment.apps/local-model-v1-custom-serving created INFO[0001] The Job local-model has been submitted successfully INFO[0001] You can run `arena serve get local-model --type custom-serving -n default` to check the job status
輸出結果表明推理服務已成功部署。
執行以下命令,查看推理服務詳細資料。
模型下載需要耗費一定時間,因此部署服務後需要等待大約10分鐘才能查看推理服務的詳細資料。
arena serve get local-model
預期輸出:
Name: local-model Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 1m Address: 172.16.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- local-model-v1-custom-serving-8458fb6cf6-6mvzp Running 1m 1/1 0 1 cn-beijing.192.168.XX.XX
輸出結果表明該推理服務的一個Pod(local-model-v1-custom-serving-8458fb6cf6-6mvzp )正在穩定運行,且已準備好提供服務。
步驟三:驗證推理服務
執行以下命令,建立推理服務與本地環境之間的連接埠轉寄。
重要請注意kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress概述。
kubectl port-forward svc/local-model-v1 8000:8000
預期輸出:
Forwarding from 127.0.0.1:8088 -> 8000 Forwarding from [::1]:8088 -> 8000
執行以下命令,向local-model模型推理服務發送一條模型推理請求。
curl -XPOST http://localhost:8000/generate -H "Content-Type: application/json" -d '{"text_input": "什麼是人工智慧?人工智慧是", "parameters": {"stream": false, "temperature": 0.9, "seed": 10}}'
預期輸出:
{"model_name":"/model/Qwen1.5-4B-Chat","text_output":"什麼是人工智慧?人工智慧是電腦科學的一個分支,它研究如何使電腦具有智能行為。"}
輸出結果表明模型可以根據提問自動產生關於人工智慧的定義。
(可選)步驟四:清理環境
如果不再使用已建立的資源,請及時清理。
執行以下命令,清理已部署的模型推理服務。
arena serve del local-model
執行以下命令,清理已建立的PV和PVC。
kubectl delete pvc llm-model kubectl delete pv llm-model