Triton を使用した chatglm2-6b モデルのデプロイ | JD Cloud テクニカル チーム

1. 技術紹介

NVIDIA Triton Inference Server は、CPU と GPU 向けに最適化されたクラウドおよび推論ソリューションです。

サポートされているモデル タイプには、TensorRT、TensorFlow、PyTorch (meta-llama/Llama-2-7b)、Python (chatglm)、ONNX Runtime、OpenVino が含まれます。

NVIDIA Triton Server は、次の機能を備えた高性能推論サーバーです。

1. 高パフォーマンス: Triton Server は、推論に GPU を使用するワークロードに高パフォーマンスと低遅延を提供します。高スループットかつ低遅延で複数のモデルを同時に処理できます。

2. メモリ管理: 大規模なモデルでは、推論のために大量のビデオ メモリが必要になることがよくあります。Triton Server には、ビデオ メモリを効果的に管理および割り当てることができる柔軟なメモリ管理メカニズムがあり、大規模なモデルの推論を効率的に実行できます。

3. スケーラビリティ: Triton Server は、並列処理と非同期推論を通じて高度な同時推論リクエストをサポートします。荷物のニーズに応じて自動的に伸縮できます。

4. マルチモデルのサポート: Triton Server は複数のモデルを同時に展開および管理できます。これにより、サーバー リソースを共有し、さまざまなモデルを一貫した方法でデプロイおよび管理できるようになります。

5. 柔軟性: Triton Server は、TensorFlow、PyTorch、ONNX などを含む複数のモデル形式と推論フレームワークをサポートします。モデルの開発とトレーニングにお気に入りのモデルとツールを使用し、それらを Triton Server に簡単にデプロイできます。

6. 高度な機能: Triton Server は、モデルのバージョン管理、リクエストの同時実行制御、動的バッチ サイズの最適化、リクエスト時間の追跡など、多くの高度な機能を提供します。これらの機能により、モデルの展開と管理の機能が強化されます。

2. 練習する

3 (N) の簡単なステップでモデルを提供する 公式ドキュメント

https://github.com/triton-inference-server/server

簡単なステップでモデルを提供する

ステップ 1: triton-server コードをプルする

git clone -b r23.08 https://github.com/triton-inference-server/server.git #

ステップ 2: tritonserver:22.12-py3 イメージを使用して triton-server コンテナーを構築する

docker run --gpus all --shm-size=1g --ulimit memlock=-1 -p 8000:8000 -p 8001:8001 -p 8002:8002 --ulimit stack=67108864 -ti nvcr.io/nvidia/tritonserver :22.12-py3

-p ポートマッピングは後から変更するのが面倒なので注意してください。

tritonserver のバージョンと python_backend バックエンドのバージョンは一致している必要があります。

たとえば、22.12 を使用します。

ステップ 3: Python 推論バックエンド python_backend をダウンロードする

ドキュメント: https://github.com/triton-inference-server/python_backend

Python バックエンド コードをダウンロードします。

git clone https://github.com/triton-inference-server/python_backend -b r22.12

コンテナ内での操作: コンテナを途中で終了した場合は、 docker exec -it コンテナ名/bin/bash コマンドを使用してコンテナに入ります。

ダウンロードできない場合は、コンテナーにコピーできます: docker cp python_backend Busy_galileo:/opt

ステップ 4: モデル ディレクトリを作成する

cd python_backend

1) モデルディレクトリを作成します: mkdir -p models/chatglm2-6b/1/

2) ホストは、chatglm2 をコンテナー内のモデル ディレクトリにコピーします: docker cp chatglm2-6b コンテナー名:/コンテナーのパス/models/chatglm2-6b

3) モデル構成ファイルを作成します: vi models/chatglm2-6b/ config.pbtxt には、さまざまなパラメーター、入力パラメーター、出力パラメーター、モデル パスなどが含まれます。

name: "chatglm2-6b"
backend: "python"
max_batch_size: 1

input [
  {
    name: "QUERY"
    data_type: TYPE_STRING
    dims: [ -1 ]
  },
  {
    name: "max_new_tokens"
    data_type: TYPE_UINT32
    dims: [ -1 ]
  },
  {
    name: "top_k"
    data_type: TYPE_UINT32
    dims: [ 1 ]
    optional: true
  },
  {
    name: "top_p"
    data_type: TYPE_FP32
    dims: [ 1 ]
    optional: true
  },
  {
    name: "temperature"
    data_type: TYPE_FP32
    dims: [ 1 ]
    optional: true
  },
  {
    name: "length_penalty"
    data_type: TYPE_FP32
    dims: [ 1 ]
    optional: true
  },
  {
    name: "repetition_penalty"
    data_type: TYPE_FP32
    dims: [ 1 ]
    optional: true
  },
  {
    name: "bos_token_id"
    data_type: TYPE_UINT32
    dims: [ 1 ]
    optional: true
  },
  {
    name: "eos_token_id"
    data_type: TYPE_UINT32
    dims: [ 1 ]
    optional: true
  },
  {
    name: "do_sample"
    data_type: TYPE_BOOL
    dims: [ 1 ]
    optional: true
  },
  {
    name: "num_beams"
    data_type: TYPE_UINT32
    dims: [ 1 ]
    optional: true
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_STRING
    dims: [ -1, -1 ]
  }
]

instance_group [
  {
    kind: KIND_GPU
  }
]

parameters {
  key: "model_path"
  value: {
    string_value: "/opt/tritonserver/python_backend/models/chatglm2-6b"
  }
}

model.py を作成して、Python コードで実装されたモデル推論ロジックをカスタマイズします。vi models/chatglm2-6b/1/model.py

モデルの入力、出力、パラメーターは、ここで Python スクリプトを使用して処理できます。

    import triton_python_backend_utils as pb_utils


class TritonPythonModel:
    @staticmethod
    def auto_complete_config(auto_complete_model_config):
        """`auto_complete_config` is called only once when loading the model

    def initialize(self, args):
        """`initialize` is called only once when the model is being loaded.
        Implementing `initialize` function is optional. This function allows
        the model to initialize any state associated with this model.

        Parameters
        ----------
        args : dict
          Both keys and values are strings. The dictionary keys and values are:
          * model_config: A JSON string containing the model configuration
          * model_instance_kind: A string containing model instance kind
          * model_instance_device_id: A string containing model instance device
            ID
          * model_repository: Model repository path
          * model_version: Model version
          * model_name: Model name
        """
        print('Initialized...')

    def execute(self, requests):
        """`execute` must be implemented in every Python model. `execute`
        function receives a list of pb_utils.InferenceRequest as the only
        argument. This function is called when an inference is requested
        for this model.

        Parameters
        ----------
        requests : list
          A list of pb_utils.InferenceRequest

        Returns
        -------
        list
          A list of pb_utils.InferenceResponse. The length of this list must
          be the same as `requests`
        """

        responses = []

    def finalize(self):
        """`finalize` is called only once when the model is being unloaded.
        Implementing `finalize` function is optional. This function allows
        the model to perform any necessary clean ups before exit.
        """
        print('Cleaning up...')

ステップ5: 推論環境と各種ソフトウェアをインストールする

cuda のバージョンとグラフィックス カード ドライバーは一致する必要があり、cuda ツールキットとドライバーのバージョンは一致する必要があります。

対応関係については、公式 Web サイトを参照してください: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

1) トーチの導入と設置:

torch 科学計算フレームワークは、機械学習やその他の科学計算タスクに効率的な行列演算と自動微分機能を提供するように設計されています。

事前トレーニングされたモデルとアルゴリズムの豊富なライブラリを提供し、ユーザーがさまざまな機械学習タスクを迅速に構築およびトレーニングできるようにします。

pip インストール ./torch-1.12.1+cu116-cp38-cp38-linux_x86_64.whl

2) グラフィックカードドライバー:

sh ./NVIDIA-Linux-x86_64-460.106.00.run

3) cudnn の導入とインストール:

CUDA ディープ ニューラル ネットワーク ライブラリは、NVIDIA が提供する GPU 高速化ディープ ニューラル ネットワーク (DNN) ライブラリです。ディープ ラーニング タスクにおけるニューラル ネットワーク モデルのトレーニングと推論を最適化し、高速化するように設計されています。

cuDNN は、畳み込みニューラル ネットワーク (CNN) やリカレント ニューラル ネットワーク (RNN) などの一般的な深層学習タスク用のコア アルゴリズムと関数のセットを提供します。これらのアルゴリズムと機能は GPU アーキテクチャ向けに高度に最適化されており、最高のパフォーマンスと効率を提供します。

wget https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64/libcudnn8_8.1.1.33-1+cuda11.2_amd64.deb

dpkg -i libcudnn8_8.1.1.33-1+cuda11.2_amd64.deb

4) クダ:

Compute Unified Device Architecture ライブラリは、GPU プログラミング用に NVIDIA によって開発された並列コンピューティング プラットフォームおよび API です。

CUDA ライブラリを通じて、モデル推論を GPU 上で同期または非同期に実行できると同時に、バッチ処理とマルチカード並列コンピューティングをサポートしてモデル推論の速度と効率を向上させます。

wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run

sudo sh cuda_11.2.0_460.27.04_linux.run

5) 各種ソフトウェア

nohup apt-get アップデート

nohup apt-get install -y autoconf autogen clangd gdb git-lfs libb64-dev libz-dev locales-all mosh openssh-server python3-dev Rapidjson-dev sudo tmux unzip zstd zip zsh

ステップ 6: triton-server を起動する

CUDA_VISIBLE_DEVICES=0 セットID tritonserver --model-repository=/opt/tritonserver/python_backend/models --backend-config=python,shm-region-prefix-name=prefix1_ --http-port 8000 --grpc-port 8001 -- metrics-port 8002 --log-verbose 1 --log-file /opt/tritonserver/logs/triton_server_gpu0.log





正常に開始されました http ポート 8000 grpc ポート 8001 測定ポート 8002

3. テスト

Python コードを呼び出すだけで http インターフェイスを呼び出すことができます。

import requests
# 定义模型的输入数据
data = {
    "inputs": [
        {

            "name": "QUERY",
            "shape": [1,1],
            "datatype": "BYTES",
            "data": ["川普是不是四川人"]
        },
        {

            "name": "max_new_tokens",
            "shape" : [1,1],
            "datatype": "UINT32",
            "data": [15000]
        },
    ]
}
headers = {
    'Content-Type': 'application/json',
}
# 发送 POST 请求
response = requests.post('http://localhost:8000/v2/models/chatglm2-6b/infer', headers=headers, json=data)
result = response.json()
print(result)

応答:

{
	"model_name": "chatglm2-6b",
	"model_version": "1",
	"outputs": [
		{
			"data": [
				"\n\n 川普不是四川人,他出生于美国宾夕法尼亚州,是一个美国政治家、企业家和电视名人。"
			],
			"datatype": "BYTES",
			"name": "OUTPUT",
			"shape": []
		}
	]
}

4. 技術的な方向性

CI(Continuous Integration、継続的インテグレーション)/CD(Continuous Delivery、継続的デリバリー/Continuous Deployment、継続的デプロイメント)

将来的には達成可能:

1. k8s を使用してコンテナのデプロイメントを自動的に操作する (Xingyun と同様)

2. 大規模なモデル実行環境の完全な Docker イメージを保存し、モデル ファイルを対応するディレクトリにダウンロードするだけでサービスを開始します。

3. 複数のオープンソース モデルを 1 台のマシンにデプロイし、さまざまなモデルに応答インターフェイスを提供し、応答効果を比較します。

4. 基本的なコンテナを自動的に構築する dockerFile を作成する

k8s ドキュメント

https://kubernetes.io/zh-cn/docs/tasks/tools/

すべてのノードに Docker と kubeadm、kubenet をインストールする

Kubernetesマスターをデプロイする

コンテナー ネットワーク プラグイン kubectl をデプロイする

Kubernetes ノードをデプロイし、ノードを Kubernetes クラスターに追加します。

著者: JD Technology Yang Jian

出典:JD Cloud Developer Community 転載の際は出典を明記してください

200元の罰金と100万元以上を没収 You Yuxi: 高品質の中国語文書の重要性 MuskのJDK 21用ハードコア移行サーバー Solon、仮想スレッドは信じられないほど素晴らしい! TCP 輻輳制御によりインターネットが節約される OpenHarmony 用の Flutter が登場 Linux カーネルの LTS 期間が 6 年から 2 年に復元される Go 1.22 で for ループ変数エラーが修正される Svelte は「新しいホイール」を作成 - ルーン文字 Google が創立 25 周年を祝う
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4090830/blog/10114529