容器計算服務 ACS(Container Compute Service)提供了高效、靈活的容器管理和編排能力,為大規模模型的部署與推理提供了強有力的支持。本文介紹如何在ACS上高效利用大模型推理鏡像,實現模型服務的快速部署與規模化應用。
準備工作
獲取llm-inference大模型推理容器鏡像信息,以便您在ACS實例上配置工作負載時使用。
登錄容器鏡像服務控制臺。
在左側導航欄,單擊制品中心。
在倉庫名稱搜索框,搜索
llm-inference
選擇目標鏡像egslingjun/llm-inference
。egslingjun/llm-inference
容器鏡像支持vLLM大語言模型推理庫及DeepGPU-LLM大語言模型推理引擎,可以幫助您快速構建大語言模型(例如Llama模型、ChatGLM模型、百川Baichuan模型或通義千問Qwen模型)的推理環境。該鏡像大概每1個月內更新一次。鏡像詳情如下所示:鏡像名稱
鏡像Tag
組件信息
鏡像地址
llm-inference
vllm0.4.2-deepgpu-llm24.5-pytorch2.3.0-cuda12.1-ubuntu22.04
基礎鏡像Ubuntu 22.04
Python 3.10
Torch 2.3.0
CUDA 12.1
vLLM 0.4.2
deepgpu-llm 24.5+pt2.3cu121
egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.4.2-deepgpu-llm24.5-pytorch2.3.0-cuda12.1-ubuntu22.04
vllm0.4.3-deepgpu-llm24.6-pytorch2.4.0-cuda12.4-ubuntu22.04
基礎鏡像Ubuntu 22.04
Python 3.10
Torch 2.4.0
CUDA 12.4.1
vLLM 0.4.3
deepgpu-llm 24.6+pt2.4cu124
egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.4.3-deepgpu-llm24.6-pytorch2.4.0-cuda12.4-ubuntu22.04
vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04
基礎鏡像Ubuntu 22.04
Python 3.10
Torch 2.4.0
CUDA 12.4.1
vLLM 0.5.4
deepgpu-llm 24.7.2+pt2.4cu124
egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04
vllm0.6.3-post1-deepgpu-llm24.9-pytorch2.4.0-cuda12.4-ubuntu22.04
基礎鏡像Ubuntu 22.04
Python 3.10
Torch 2.4.0
CUDA 12.4.1
vLLM 0.6.3.post1
deepgpu-llm 24.9+pt2.4cu124
egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.6.3-post1-deepgpu-llm24.9-pytorch2.4.0-cuda12.4-ubuntu22.04
準備NAS文件系統。大語言模型因其龐大的參數量,需要占用大量的磁盤空間來存儲模型文件,建議您創建NAS存儲卷來持久化存儲模型文件。具體操作,請參見靜態掛載NAS存儲卷或動態掛載NAS存儲卷。本文示例采用靜態掛載NAS存儲卷的方式實現,推薦存儲空間為20G。
將NAS文件系統掛載到ECS實例上。具體操作,請參見一鍵掛載NFS協議文件系統。
執行以下命令,將模型下載到NAS文件系統中。
cd /mnt pip install modelscope modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir ./Qwen2.5-7B-Instruct
說明本文使用的Qwen2.5-7B模型大小約為15G,100Mbps帶寬下載約需要20分鐘左右,您可以根據實際情況調整為Qwen2.5-3B或Qwen2.5-0.5B等更輕量的模型。
由于
modelscope
正常運行需要Python版本≥3.10,因此推薦使用Ubuntu 22.04作為ECS實例鏡像,其默認Python版本為3.10。您也可以使用其他公共或自定義鏡像,確保Python版本≥3.10即可。
部署大模型推理服務
根據以下內容創建PVC。具體操作,請參見創建PVC。
參數
示例
名稱
nas-test。
分配模式
選擇使用掛載點域名創建。
總量
20Gi。
掛載點域名
08cxxxxxxec-wxxxxxxcn-hangzhou.nas.aliyuncs.com
使用kubectl連接到ACS集群。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
使用以下內容,創建your-deployment.yaml。
說明關于以下示例中使用的GPU卡具體型號,請參見GPU型號及驅動版本。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: my-deployment name: my-deployment namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: my-deployment template: metadata: labels: # 指定GPU型號為example-model,請按實際情況填寫,如T4 alibabacloud.com/gpu-model-series: example-model # 指定compute-class為gpu類型 alibabacloud.com/compute-class: gpu app: my-deployment spec: containers: - command: - sh - -c - python3 -m vllm.entrypoints.openai.api_server --model /mnt/Qwen2.5-7B-Instruct --trust-remote-code --tensor-parallel-size 1 --disable-custom-all-reduce image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04 imagePullPolicy: IfNotPresent #Always name: my-deployment resources: limits: cpu: 16 memory: 64Gi nvidia.com/gpu: "1" requests: cpu: 16 memory: 64Gi nvidia.com/gpu: "1" terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /mnt name: nas-test - mountPath: /dev/shm name: cache-volume dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - name: nas-test persistentVolumeClaim: # PVC的聲明 claimName: nas-test - name: cache-volume emptyDir: medium: Memory sizeLimit: 64G --- apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: ipv4 labels: app: my-deployment name: svc-llm namespace: default spec: externalTrafficPolicy: Local ports: - name: serving port: 8000 protocol: TCP targetPort: 8000 selector: app: my-deployment type: LoadBalancer
執行以下命令,部署大模型推理任務和對應的service。
kubectl apply -f your-deployment.yaml
由于鏡像較大,您可以通過執行以下命令持續關注模型部署情況,大約需要20分鐘左右。
kubectl logs -f my-deployment-787b8xxxxx-xxxxx
當出現以下格式的輸出時,說明模型已經部署成功。
INFO: Started server process [2] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) INFO 12-13 12:39:11 metrics.py:406] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%. INFO 12-13 12:39:21 metrics.py:406] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%. INFO 12-13 12:39:31 metrics.py:406] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%. INFO 12-13 12:39:41 metrics.py:406] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.
執行以下命令,查看部署的Service。
kubectl get svc
預期輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 3h38m svc-llm LoadBalancer 10.0.143.103 112.xxx.xxx.177 8000/TCP 58s
其中
EXTERNAL-IP
為Service對外公開的IP。記錄此IP,方便后續進行測試。
測試大模型服務
執行以下命令,輸入Prompt等待輸出。
export EXTERNAL_IP=112.xxx.xxx.177
curl http://$EXTERNAL_IP:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{ "model": "/mnt/Qwen2.5-7B-Instruct", "messages": [ {"role": "system", "content": "你是個友善的AI助手。"}, {"role": "user", "content": "介紹一下深度學習。"} ]}'
預期輸出:
{"id":"chat-edab465b4b5547bda7xxxxxxxxxxxxxxx","object":"chat.completion","created":1734094178,"model":"/mnt/Qwen2.5-7B-Instruct","choices":[{"index":0,"message":{"role":"assistant","content":"深度學習是一種人工智能研究方法,它基于人工神經網絡的原理,通過對大量數據進行處理和學習,使得計算機能夠模擬人的學習和決策過程。深度學習主要包括卷積神經網絡(CNN)、循環神經網絡(RNN)和長短期記憶網絡(LSTM)等。這些模型能夠識別和分類圖像,提取特征,進行自然語言處理,甚至語音識別等任務。深度學習的應用范圍非常廣泛,包括圖像識別、語音識別、自然語言處理、計算機視覺等領域。","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":24,"total_tokens":130,"completion_tokens":106}}%
至此,使用ACS GPU算力構建LLM推理服務完成。
相關文檔
更多關于vLLM的詳細信息,請參見vllm-project。
更多關于DeepGPU-LLM的詳細信息,請參見什么是推理引擎DeepGPU-LLM。