全部產品
Search
文件中心

Container Service for Kubernetes:基於ACK使用TGI部署Qwen模型推理服務

更新時間:Jul 27, 2024

本文以Qwen1.5-4B-Chat模型、GPU類型為A10卡為例,示範如何在ACK中使用Hugging Face的TGI(Text Generation Inference)架構部署Qwen(通義千問)模型推理服務。

背景資訊

Qwen1.5-4B-Chat

Qwen1.5-4B-Chat是阿里雲基於Transformer大語言模型研發的40億參數模型,模型在超大規模的預訓練資料(預訓練資料類型多樣且覆蓋廣泛,包括大量網路文本、專業書籍、代碼等)上進行訓練得到。更多模型資訊,請參見Qwen GitHub程式碼程式庫

TGI(Text Generation Inference

TGI是Hugging Face開源的用於部署大語言模型推理服務的工具,能夠簡單快速的部署常見的大語言模型,支援Flash AttentionPaged Attention、Continuous batching、 Tensor parallelism等功能來加速推理效能,更多資訊,請參見TGI官方文檔

前提條件

  • 已建立包含A10卡GPU的Kubernetes叢集,且叢集版本為1.22及以上。具體操作,請參見建立GPU叢集

    建議GPU節點使用525版本驅動,您可以通過為GPU節點池添加標籤ack.aliyun.com/nvidia-driver-version:525.105.17指定驅動版本為525.105.17。具體操作,請參見通過指定版本號碼自訂節點GPU驅動版本

  • 已安裝最新版Arena用戶端。具體操作,請參見配置Arena用戶端

步驟一:準備模型資料

本文以Qwen1.5-4B-Chat模型為例,示範如何下載模型、上傳模型至OSS,以及在ACK叢集中建立對應的儲存卷PV和儲存卷聲明PVC。

如需上傳模型至NAS,請參見使用NAS靜態儲存卷

    1. 下載模型檔案。

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

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

        # 可執行yum install git-lfs或apt install git-lfs安裝。
        yum install git-lfs
      3. 執行以下命令,將ModelScope上的Qwen1.5-4B-Chat倉庫複製到本地。

        GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
      4. 執行以下命令,進入Qwen1.5-4B-Chat目錄,下載LFS管理的大檔案。

        cd Qwen1.5-4B-Chat
        git lfs pull
    2. 將下載的Qwen1.5-4B-Chat檔案上傳至OSS。

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

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

      2. 安裝和配置ossutil,用於管理OSS資源。具體操作,請參見安裝ossutil

      3. 執行以下命令,在OSS建立名為Qwen1.5-4B-Chat的目錄。

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

        ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
    3. 為目的地組群配置儲存卷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。

步驟二:部署推理服務

重要

TGI不支援舊型號的GPU卡(例如V100、T4等),需要您將推理服務部署到A10或者更新架構的GPU節點上。

  1. 執行下列命令,通過Arena部署一個自訂類型的推理服務。

    部署的推理服務名稱為tgi-qwen-4b-chat,版本為v1,需要使用一個GPU,副本數為1,並且配置就緒檢測。模型是一種特殊類型的資料,因此可以使用--data參數將已建立的模型PVC掛載到容器中的/model/Qwen1.5-4B-Chat目錄下。

    arena serve custom \
        --name=tgi-qwen-4b-chat \
        --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=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/text-generation-inference:2.0.2-ubuntu22.04 \
        --data=llm-model:/model/Qwen1.5-4B-Chat \
        "text-generation-launcher --model-id /model/Qwen1.5-4B-Chat --num-shard 1 -p 8000"

    參數說明如下所示:

    參數

    說明

    --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/tgi-qwen-4b-chat-v1 created
    deployment.apps/tgi-qwen-4b-chat-v1-custom-serving created
    INFO[0001] The Job tgi-qwen-4b-chat has been submitted successfully
    INFO[0001] You can run `arena serve get tgi-qwen-4b-chat --type custom-serving -n default` to check the job status

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

  2. 執行下列命令,查看推理服務詳細資料。

    arena serve get tgi-qwen-4b-chat

    預期輸出:

    Name:       tgi-qwen-4b-chat
    Namespace:  default
    Type:       Custom
    Version:    v1
    Desired:    1
    Available:  1
    Age:        3m
    Address:    172.16.XX.XX
    Port:       RESTFUL:8000
    GPU:        1
    
    Instances:
      NAME                                                 STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                                                 ------   ---  -----  --------  ---  ----
      tgi-qwen-4b-chat-v1-custom-serving-67b58c9865-m89lq  Running  3m   1/1    0         1    cn-beijing.192.168.XX.XX

    輸出結果表明該推理服務的一個Pod(tgi-qwen-4b-chat-v1-custom-serving-67b58c9865-m89lq)正在穩定運行,且已準備好提供服務。

步驟三:驗證推理服務

  1. 執行以下命令,在推理服務與本地環境之間建立連接埠轉寄。

    重要

    請注意kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress概述

    kubectl port-forward svc/tgi-qwen-4b-chat-v1 8000:8000

    預期輸出:

    Forwarding from 127.0.0.1:8000 -> 8000
    Forwarding from [::1]:8000 -> 8000
  2. 執行以下命令,向Triton模型推理服務發送一條模型推理請求。

    curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json"  -d '{"model": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "測試一下"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'

    預期輸出:

    {"id":"","object":"text_completion","created":1716274541,"model":"/model/Qwen1.5-4B-Chat","system_fingerprint":"2.0.2-sha-6073ece","choices":[{"index":0,"message":{"role":"assistant","content":"好的,請問您有什麼需要測試的嗎?"},"logprobs":null,"finish_reason":"length"}],"usage":{"prompt_tokens":21,"completion_tokens":10,"total_tokens":31}}

    輸出結果表明模型可以根據給定的輸入(在這個例子中是一條測試訊息)產生相應的回複。

(可選)步驟四:清理環境

如果不再使用已建立的資源,請及時清理。

  • 執行以下命令,刪除已部署的模型推理服務。

    arena serve delete tgi-qwen-4b-chat
  • 執行以下命令,刪除已建立的PV和PVC。

    kubectl delete pvc llm-model
    kubectl delete pv llm-model