全部產品
Search
文件中心

Container Service for Kubernetes:部署vLLM推理應用

更新時間:Jun 19, 2024

vLLM(Vectorized Large Language Model)是一個高效能的大型語言模型推理庫,支援多種模型格式和後端加速,適用於大規模語言模型的推理服務部署。本文以Qwen-7B-Chat-Int8模型、GPU類型為V100卡為例,示範如何部署一個vLLM推理服務。

說明

關於vLLM的詳細資料,請參見vllm-project

前提條件

步驟一:準備模型資料並上傳OSS Bucket

您可以使用OSS或NAS準備模型資料,具體操作,請參見使用OSS靜態儲存卷使用NAS靜態儲存卷。本文以OSS為例說明如何準備模型資料。

  1. 下載模型。本文以Qwen-7B-Chat-Int8模型為例。

    1. 執行以下命令,安裝Git。

      sudo yum install git
    2. 執行以下命令,安裝Git LFS(Large File Support)外掛程式。

      sudo yum install git-lfs
    3. 執行以下命令,將ModelScope上的Qwen-7B-Chat-Int8倉庫複製到本地。

      GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat-Int8.git
    4. 執行以下命令,進入Qwen-7B-Chat-Int8倉庫目錄。

      cd Qwen-7B-Chat-Int8
    5. 執行以下命令,在Qwen-7B-Chat-Int8目錄下,下載LFS管理的大檔案。

      git lfs pull
  2. 將下載的Qwen-7B-Chat-Int8檔案上傳至OSS。

    1. 登入OSS控制台,查看並記錄已建立的Bucket名稱。

      如何建立Bucket,請參見建立儲存空間

    2. 安裝和配置ossutil。具體操作,請參見安裝ossutil

    3. 執行以下命令,在OSS建立名為Qwen-7B-Chat-Int8的目錄。

      ossutil mkdir oss://<Your-Bucket-Name>/Qwen-7B-Chat-Int8
    4. 執行以下命令,上傳模型檔案至OSS。

      ossutil cp -r ./Qwen-7B-Chat-Int8 oss://<Your-Bucket-Name>/Qwen-7B-Chat-Int8
  3. 為目的地組群配置名為llm-model的儲存卷PV和儲存聲明PVC。具體操作,請參見使用OSS靜態儲存卷

    • 以下為樣本PV的基本配置資訊:

      配置項

      說明

      儲存卷類型

      OSS

      名稱

      llm-model

      訪問認證

      配置用於訪問OSS的AccessKey ID和AccessKey Secret。

      Bucket ID

      選擇步驟2中建立的OSS Bucket。

      OSS Path

      選擇模型所在的路徑,如/Qwen-7B-Chat-Int8。

    • 以下為樣本PVC的基本配置資訊:

      配置項

      說明

      儲存宣告類型

      OSS

      名稱

      llm-model

      分配模式

      選擇已有儲存卷

      已有儲存卷

      單擊選擇已有儲存卷連結,選擇已建立的儲存卷PV。

步驟二:部署推理服務

  1. 執行以下命令,檢查叢集中可用的GPU資源。

    arena top node

    輸出結果會顯示可用於運行推理服務的GPU節點個數。

  2. 執行以下命令,啟動名稱為vllm的推理服務。

    arena serve kserve \
        --name=qwen \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \
        --gpus=1 \
        --cpu=4 \
        --memory=12Gi \
        --data="llm-model:/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"

    參數說明如下所示:

    參數

    是否必選

    說明

    --name

    提交的推理服務名稱,全域唯一。

    --image

    推理服務的鏡像地址。

    --gpus

    推理服務需要使用的GPU卡數。預設值為0。

    --cpu

    推理服務需要使用的CPU數。

    --memory

    推理服務需要使用的記憶體數量。

    --data

    服務的模型地址,本文指定模型的儲存為llm-model,掛載到容器中的/mnt/models/目錄下。

    預期輸出:

    inferenceservice.serving.kserve.io/qwen created
    INFO[0006] The Job qwen has been submitted successfully 
    INFO[0006] You can run `arena serve get qwen --type kserve -n default` to check the job status 

    輸出結果表明推理服務已部署成功。

步驟三:驗證推理服務

  1. 執行以下命令,查看KServe推理服務的部署情況。

    arena serve get qwen

    預期輸出:

    展開查看推理服務的部署情況

    Name:       qwen
    Namespace:  default
    Type:       KServe
    Version:    1
    Desired:    1
    Available:  1
    Age:        2m
    Address:    http://qwen-default.example.com
    Port:       :80
    GPU:        1
    
    
    Instances:
      NAME                             STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                             ------   ---  -----  --------  ---  ----
      qwen-predictor-5485d6d8d5-kvj7g  Running  2m   1/1    0         1    cn-beijing.XX.XX.XX.XX

    輸出結果表明,KServe推理服務部署成功,模型訪問地址為http://qwen-default.example.com

  2. 執行以下命令,使用擷取到的Nginx Ingress網關地址訪問推理服務。

    # 擷取Nginx ingress的IP地址。
    NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}')
    # 擷取Inference Service的Hostname。
    SERVICE_HOSTNAME=$(kubectl get inferenceservice qwen -o jsonpath='{.status.url}' | cut -d "/" -f 3)
    # 發送請求訪問推理服務。
    curl -H "Host: $SERVICE_HOSTNAME" -H "Content-Type: application/json" http://$NGINX_INGRESS_IP:80/v1/chat/completions -d '{"model": "qwen", "messages": [{"role": "user", "content": "測試一下"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'

    預期輸出:

    展開查看預期輸出

    {"id":"cmpl-b7579597aa284f118718b22b83b726f8","object":"chat.completion","created":1715589652,"model":"qwen","choices":[{"index":0,"message":{"role":"assistant","content":"好的,請問您有什麼需要測試的?<|im_end|>"},"logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":10,"total_tokens":20,"completion_tokens":10}}% 

    輸出結果表明請求被正確地發送到了服務,並且服務返回了一個預期的JSON響應。

(可選)步驟四:刪除推理服務

重要

在執行刪除操作前,請確保不再需要該服務及其相關資源。

執行以下命令,刪除推理服務。

arena serve delete qwen

相關文檔