すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:vLLMを使用してQwenモデルをACKの推論サービスとしてデプロイする

最終更新日:Nov 19, 2024

このトピックでは、Versatile Large Language Model (vLLM) を使用して、Container service for Kubernetes (ACK) にQwenモデルを推論サービスとしてデプロイする方法について説明します。 Qwen 1.5-4B-Chatモデルが例として使用され、GPU NVIDIA T4およびNVIDIA A10が使用されます。

背景情報

Qwen1.5-4B-チャット

Qwen1.5-4B-Chatは、Transformerに基づいてAlibaba Cloudによって開発された40億パラメータモデルの大規模言語モデル (LLM) です。 このモデルは、さまざまなwebベースのテキスト、専門分野の本、およびコードをカバーする超大量のトレーニングデータに基づいてトレーニングされます。 詳細については、「Qwen GitHubリポジトリ」をご参照ください。

vLLM

vLLMは、高性能で使いやすいLLM推論サービスフレームワークです。 vLLMは、Qwenモデルを含む最も一般的に使用されるLLMをサポートします。 vLLMは、PagedAttention最適化、連続バッチ処理、モデル定量化などのテクノロジーを活用して、LLMの推論効率を大幅に向上させています。vLLMフレームワークの詳細については、「vLLM GitHubリポジトリ」をご参照ください。

前提条件

  • GPU高速化ノードを含むACK Proクラスターが作成されます。 クラスターのKubernetesバージョンが1.22以降です。 各GPU高速化ノードは、16 GB以上のGPUメモリを提供します。 詳細については、「ACK管理クラスターの作成」をご参照ください。

    バージョンが525のGPUドライバをインストールすることを推奨します。 ack.aliyun.com/nvidia-driver-version:525.105.17ラベルをGPUアクセラレーションノードに追加して、GPUドライバーのバージョンを525.105.17に指定できます。 詳細については、「ラベルの追加によるノードのNVIDIAドライバーバージョンの指定」をご参照ください。

  • Arenaクライアントの最新バージョンがインストールされています。 詳細については、「Arenaクライアントの設定」をご参照ください。

ステップ1: モデルデータの準備

この例では、Qwen1.5-4B-Chatモデルを使用して、Qwenモデルをダウンロードし、そのモデルをObject Storage Service (OSS) にアップロードし、ACKクラスターに永続ボリューム (PV) と永続ボリュームクレーム (PVC) を作成する方法を説明します。

File Storage NAS にモデルをアップロードする方法の詳細については、「静的にプロビジョニングされたNASボリュームのマウント」をご参照ください。

  1. モデルファイルをダウンロードします。

    1. 次のコマンドを実行してGitをインストールします。

      # Run yum install git or apt install git. 
      yum install git
    2. 次のコマンドを実行して、Git Large File Support (LFS) プラグインをインストールします。

      # Run yum install git-lfs or 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コンソールにログインし、作成したOSSバケットの名前を表示および記録します。

      OSSバケットの作成方法の詳細については、「バケットの作成」をご参照ください。

    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のパラメータを示します。

      項目

      説明

      PVタイプ

      OSS

      ボリューム名

      llm-モデル

      アクセス証明書

      OSSバケットへのアクセスに使用するAccessKey IDとAccessKey secretを指定します。

      バケットID

      作成したOSSバケットの名前を指定します。

      OSSパス

      /models/Qwen1.5-4B-Chatなど、モデルのパスを選択します。

    • 次の表に、PVCのパラメータを示します。

      項目

      説明

      PVCタイプ

      OSS

      ボリューム名

      llm-モデル

      割り当てモード

      [既存のボリューム] を選択します。

      既存のボリューム

      [既存のボリューム] ハイパーリンクをクリックし、作成したPVを選択します。

手順2: 推論サービスのデプロイ

大きなモデルは、メモリリソースに大きな要求があります。 最適なパフォーマンスを確保するために、本番環境で高性能NVIDIA A10 GPUを使用することを推奨します。 テストの目的で、広く使用されている費用対効果の高いNVIDIA T4 GPUを選択できますが、NVIDIA T4 GPUのパフォーマンスはNVIDIA A10 GPUのパフォーマンスよりもはるかに低い場合があります。

  1. 次のコマンドを実行して、vLLMを使用してQwen1.5-4B-Chatモデルを推論サービスとしてデプロイします。

    モデルパラメータファイルは、特殊なタイプのデータセットと見なすことができます。 Arenaが提供する -- dataパラメーターを使用して、推論サービスコンテナー内の特定のパスにモデルをマウントできます。 この例では、Qwen1.5-4B-Chatモデルは /model/Qwen1.5-4B-Chatにマウントされています。 -- max_model_lenパラメーターは、Qwen1.5-4B-Chatモデルが処理できる最大トークン長を設定するために使用されます。 このパラメーターの値を大きくすると、モデルの相互作用の品質が向上しますが、この変更によりGPUメモリリソースが消費される可能性があります。 vLLMでサポートされているパラメーターの詳細については、「GithubのvLLMコードリポジトリ」をご参照ください。

    シングルNVIDIA A10环境

    arena serve custom \
        --name=vllm-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/vllm:0.4.1-ubuntu22.04 \
        --data=llm-model:/model/Qwen1.5-4B-Chat \
        "python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 16384"

    単一のNVIDIA T4環境

    arena serve custom \
        --name=vllm-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/vllm:0.4.1-ubuntu22.04 \
        --data=llm-model:/model/Qwen1.5-4B-Chat \
        "python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 8192 --dtype half"

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    -- name

    推論サービスの名前。

    -- version

    推論サービスのバージョン。

    -- gpus

    各推論サービスレプリカのGPUの数。

    -- レプリカ

    推論サービスレプリカの数。

    -- 安らかポート

    公開する推論サービスのポート。

    -- 準備-プローブ-アクション

    準備プローブの接続タイプ。 有効な値: HttpGet、Exec、gRPC、およびTCPSocket。

    -- readiness-probe-action-option

    準備プローブの接続方法。

    -- readiness-probe-option

    準備完了プローブの設定。

    -- データ

    共有PVCをランタイム環境にマウントします。 値は、コロン (:) で区切られた2つの部分で構成されます。 コロンの左側にあるPVCの名前を指定します。 arena data listコマンドを実行して、クラスター内の既存のPVCのリストを照会できます。 コロンの右側にあるランタイム環境を指定します。 トレーニングデータまたはモデルのローカルパスを指定することもできます。 これにより、スクリプトは指定されたPVのデータまたはモデルにアクセスできます。

    -- イメージ

    推論サービスイメージのアドレス。

    期待される出力:

    service/vllm-qwen-4b-chat-v1 created
    deployment.apps/vllm-qwen-4b-chat-v1-custom-serving created
    INFO[0008] The Job vllm-qwen-4b-chat has been submitted successfully
    INFO[0008] You can run `arena serve get vllm-qwen-4b-chat --type custom-serving -n default` to check the job status

    出力は、vLLM関連の推論サービスと、対応するデプロイメントとジョブがデプロイされていることを示します。

  2. 次のコマンドを実行して、推論サービスの詳細を表示します。

    arena serve get vllm-qwen-4b-chat

    期待される出力:

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

    出力は、推論サービスが期待どおりに実行されており、サービスを提供する準備ができていることを示します。

手順3: 推論サービスの検証

  1. 次のコマンドを実行して、推論サービスとローカル環境の間にポート転送ルールを作成します。

    重要

    kubectl Port-forwardを使用して設定されたポート転送は、運用環境では信頼性、安全性、拡張性がありません。 開発とデバッグ用のみです。 本番環境では、このコマンドを使用してポート転送を設定しないでください。 ACKクラスターの運用に使用されるネットワークソリューションの詳細については、「Ingressの概要」をご参照ください。

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

    期待される出力:

    Forwarding from 127.0.0.1:8000 -> 8000
    Forwarding from [::1]:8000 -> 8000
  2. 次のコマンドを実行して、TritonInferenceサーバーに推論要求を送信します。

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

    期待される出力:

    {"id":"cmpl-503270b21fa44db2b6b3c3e0abaa3c02","object":"chat.com pletion","created":1717141209,"model":"/model/Qwen1.5-4B-Chat/","options":[{"index":0,"message":{"role":"assistant","content":"OK. What do you want to test?"},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":21,"total_tokens":30,"completion_tokens":9}}

    出力は、モデルが所与の要求に基づいて適切な応答を生成できることを示す。 この例はテストメッセージです。

(オプション) 手順4: 環境の削除

リソースが不要になった場合は、できるだけ早くリソースを削除してください。

  • 次のコマンドを実行して、推論サービスを削除します。

    arena serve delete vllm-qwen-4b-chat
  • 次のコマンドを実行して、PVとPVCを削除します。

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