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

Container Service for Kubernetes:Tritonを使用してQwen推論サービスをACKにデプロイする

最終更新日:Oct 23, 2024

このトピックでは、Qwen1.5-4B-ChatモデルとT4およびA10 GPUを例として使用して、TritonおよびVersatile Large Language model (vLLM) 推論フレームワークを使用して、Container service for Kubernetes (ACK) の推論サービスとしてQwenモデルをデプロイする方法を示します。

背景情報

Qwen1.5-4B-チャット

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

Triton (Triton Inferenceサーバー)

Triton (Triton Inference Server) は、AI推論アプリケーションの迅速な開発に役立つNVIDIAが提供するオープンソースの推論サービスフレームワークです。 Tritonは、TensorRT、TensorFlow、PyTorch、ONNX、vLLMなど、バックエンドとして機能するさまざまな機械学習フレームワークをサポートしています。Tritonは、リアルタイム推論、バッチ推論、およびオーディオ /ビデオストリーミング推論に最適化され、パフォーマンスが向上します。 トリトンの主な特徴:

  • さまざまな機械学習と深層学習フレームワークをサポートします。

  • 同時実行モデルをサポートします。

  • 連続バッチ処理をサポートします。

  • GPU使用率、リクエスト待ち時間、リクエストスループットなど、主要な推論サービス指標をサポートします。

Triton推論サービスフレームワークの詳細については、「Triton inference Server 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クライアントの最新バージョンがインストールされています。 詳細については、「Configure the Arena client」をご参照ください。

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

このセクションでは、Qwen1.5-4B-Chatモデルを例として、Object Storage Service (OSS) からモデルをダウンロードしてアップロードする方法、およびACKクラスターに永続ボリューム (PV) と永続ボリュームクレーム (PVC) を作成する方法を示します。

他のモデルを展開する方法の詳細については、「サポートされているモデル」をご参照ください。 モデルをApsara File Storage NAS (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: Triton推論サービスフレームワークの設定

Triton推論サービスフレームワークの構成に必要な、config.pbtxtという名前のvLLM構成ファイルとmodel.jsonという名前のTriton構成ファイルを作成します。

  1. 次のコマンドを実行して、作業ディレクトリを作成します。

    mkdir triton-vllm
  2. 次のコマンドを実行して、config.pbtxtという名前のvLLM設定ファイルを作成します。

    cat << EOF > triton-vllm/config.pbtxt
    backend: "vllm"
    
    # The usage of device is deferred to the vLLM engine
    instance_group [
      {
        count: 1
        kind: KIND_MODEL
      }
    ]
    
    version_policy: { all { }}
    EOF
  3. 次のコマンドを実行して、model.jsonという名前のTriton構成ファイルを作成します。

    LLMはGPUのメモリ量が多い。 本番環境で最適なパフォーマンスを確保するために、高性能のA10 GPUを使用することを推奨します。 テストの目的で、広く採用され、費用対効果の高いT4 GPUを使用できます。 しかし、A10は性能においてT4を大きく上回る。

    単一のA10 GPUを使用する

    cat << EOF > triton-vllm/model.json
    {
        "model":"/model/Qwen1.5-4B-Chat",
        "disable_log_requests": "true",
        "gpu_memory_utilization": 0.95,
        "trust_remote_code": "true",
        "max_model_len": 16384
    }
    EOF

    上記の構成ファイルで、max_model_lenパラメーターを設定して、モデルで処理できるトークンの最大長を指定します。 値を増やしてモデルの会話エクスペリエンスを向上させることができますが、より多くのGPUメモリが消費されます。 vLLM + Triton推論サービスフレームワークの構成の詳細については、「TritonでのvLLMモデルの展開」をご参照ください。

    単一のT4 GPUを使用する

    cat << EOF > triton-vllm/model.json
    {
        "モデル":"/model/Qwen1.5-4B-Chat" 、
        "disable_log_requests": "true" 、
        "gpu_memory_utilization": 0.95、
        "trust_remote_code": "true" 、
        "dtype": "half" 、
        "max_model_len": 8192
    }
    EOF 

    上記の構成ファイルで、max_model_lenパラメーターを設定して、モデルで処理できるトークンの最大長を指定します。 値を増やしてモデルの会話エクスペリエンスを向上させることができますが、より多くのGPUメモリが消費されます。 dtypeパラメーターを設定して、モデルの読み込み時に使用する浮動小数点精度を指定します。 T4 GPUはbfloat16 (bf16) 精度をサポートしていません。 したがって、dtypeパラメータは、前の構成では半分 (半精度浮動小数点) に設定される。 vLLM + Triton推論サービスフレームワークの構成の詳細については、「TritonでのvLLMモデルの展開」をご参照ください。

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

次の例では、Arenaを使用してQwen1.5-4B-Chatモデルから推論サービスをデプロイします。 推論サービスは、Triton推論サービスフレームワークを使用し、vLLMモデル推論フレームワークを使用します。

  1. 次のコマンドを実行して、triton_config_fileおよびmodel_config_file環境変数をステップ2のTritonおよびvLLM設定ファイルにエクスポートします。 これにより、各コマンドまたはスクリプトへのファイルパスをハードコーディングすることなく、異なる環境で推論サービスを構成および展開できます。

    export triton_config_file="triton-vllm/config.pbtxt"
    export model_config_file="triton-vllm/model.json"
  2. 次のコマンドを実行して、推論サービスをデプロイします。

    arena serve triton \
        --name=triton-vllm \
        --version=v1 \
        --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/tritonserver:24.04-vllm-python-py3-ubuntu22.04 \
        --gpus=1 \
        --cpu=6 \
        --memory=30Gi \
        --data="llm-model:/model/Qwen1.5-4B-Chat" \
        --model-repository /triton-config \
        --config-file="$model_config_file:/triton-config/qwen-4b/1/model.json" \
        --config-file="$triton_config_file:/triton-config/qwen-4b/config.pbtxt" \
        --http-port=8000 \
        --grpc-port=9000 \
        --allow-metrics=true

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

    パラメーター

    説明

    -- name

    推論サービスの名前。

    -- version

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

    -- イメージ

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

    -- gpus

    各推論サービスレプリカで使用されるGPUの数。

    -- cpu

    各推論サービスレプリカで使用されているCPUの数。

    -メモリ

    各推論サービスレプリカによって使用されるメモリの量。

    -- データ

    共有PVCをランタイムにマウントします。 値は、コロン (:) で区切られた2つの部分で構成されます。 コロンの左側にあるPVCの名前を指定します。 arena data listコマンドを実行して、現在のクラスターのPVCを表示できます。 コロンの右側にPVCをマウントするパスを指定します。 指定されたパスからトレーニングデータが読み取られます。 このようにして、トレーニングジョブは、PVCによって要求されたPVに格納されたデータを取得できます。

    -- configファイル

    ローカル構成ファイルをランタイムにマウントします。 値は、コロン (:) で区切られた2つの部分で構成されます。 コロンの左側に構成ファイルの名前を指定し、コロンの右側に構成がマウントされるパスを指定します。

    -- model-repository

    Tritonモデルリポジトリのディレクトリ。 ディレクトリには複数のサブディレクトリを含めることができます。 各サブディレクトリは、Triton推論サービスフレームワークにロードされるモデルに対応する。 したがって、各サブディレクトリに対応するモデル構成ファイルを含める必要があります。 詳細については、「Triton公式ドキュメント」をご参照ください。

    -- httpポート

    Triton推論サービスによって公開されるHTTPポート。

    -- grpcポート

    Triton推論サービスによって公開されるgRPCポート。

    -- allow-metrics

    Triton推論サービスのメトリックを公開するかどうかを指定します。

    期待される出力:

    configmap/triton-vllm-v1-4bd5884e6b5b6a3 created
    configmap/triton-vllm-v1-7815124a8204002 created
    service/triton-vllm-v1-tritoninferenceserver created
    deployment.apps/triton-vllm-v1-tritoninferenceserver created
    INFO[0007] The Job triton-vllm has been submitted successfully
    INFO[0007] You can run `arena serve get triton-vllm --type triton-serving -n default` to check the job status

    を確認できます。

    出力は、推論サービスがデプロイされていることを示します。

  3. 次のコマンドを実行して、推論サービスの詳細情報を表示します。 サービスの準備が整うまで待ちます。

    arena serve get triton-vllm

    期待される出力:

    Name:       triton-vllm
    Namespace:  default
    Type:       Triton
    Version:    v1
    Desired:    1
    Available:  1
    Age:        3m
    Address:    172.16.XX.XX
    Port:       RESTFUL:8000,GRPC:9000
    GPU:        1
    
    Instances:
      NAME                                                  STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                                                  ------   ---  -----  --------  ---  ----
      triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6  Running  3m   1/1    0         1    cn-beijing.172.16.XX.XX

    出力は、ポッド (triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6) が推論サービスに対して実行されており、サービスを提供する準備ができていることを示します。

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

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

    重要

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

    kubectl port-forward svc/triton-vllm-v1-tritoninferenceserver 8000:8000

    期待される出力:

    Forwarding from 127.0.0.1:8000 -> 8000
    Forwarding from [::1]:8000 -> 8000

    からの転送

  2. 次のコマンドを実行して、Triton推論サービスにリクエストを送信します。

    curl -X POST localhost:8000/v2/models/qwen-4b/generate -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0}}'

    URLのqwen-4bを実際の推論モデル名に置き換えます。

    期待される出力:

    {"model_name":"qwen-4b","model_version":"1","text_output":"What is AI? AI is a branch of computer science that studies how to make computers intelligent. Purpose of AI"}

    の目的

    出力は、モデルがAIの定義を提供できることを示します。

(オプション) ステップ5: 環境をクリアする

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

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

    arena serve del triton-vllm
  • 次のコマンドを実行して、PVとPVCを削除します。

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