第3章 大規模モデルのサービング
Red Hat OpenShift AI には、大規模言語モデル (LLM) などの大規模モデルをデプロイするために、KServe コンポーネントをベースとした シングルモデルサービングプラットフォーム が組み込まれています。各モデルが独自のモデルサーバーからデプロイされるため、シングルモデルサービングプラットフォームは、多くのリソースを必要とする大規模なモデルのデプロイ、監視、スケーリング、および保守に役立ちます。
3.1. シングルモデルサービングプラットフォームについて
OpenShift AI には、大規模言語モデル (LLM) などの大規模モデルをデプロイするために、KServe コンポーネントをベースとしたシングルモデルサービングプラットフォームが組み込まれています。各モデルが独自のモデルサーバー上にデプロイされるため、シングルモデルサービングプラットフォームは、多くのリソースを必要とする大規模なモデルのデプロイ、監視、スケーリング、および保守に役立ちます。
3.1.1. コンポーネント
- KServe : あらゆるタイプのモデルに対するモデルサービングを調整する Kubernetes カスタムリソース定義 (CRD)。KServe には、指定されたモデルサーバータイプの読み込みを実装するモデルサービングランタイムが含まれます。KServe は、デプロイメントオブジェクト、ストレージアクセス、およびネットワーク設定のライフサイクルも処理します。
- Red Hat OpenShift Serverless: モデルのサーバーレスデプロイメントを可能にするクラウドネイティブ開発モデル。OpenShift Serverless は、オープンソースの Knative プロジェクトをベースにしています。
- Red Hat OpenShift Service Mesh: トラフィックフローを管理し、アクセスポリシーを適用するサービスメッシュネットワーキングレイヤー。OpenShift Service Mesh は、オープンソースの Istio プロジェクトをベースにしています。
3.1.2. インストールオプション
シングルモデルサービングプラットフォームをインストールするには、次のオプションがあります。
- 自動インストール
OpenShift クラスターに
ServiceMeshControlPlane
またはKNativeServing
リソースをまだ作成していない場合は、KServe とその依存関係をインストールして構成するように Red Hat OpenShift AI Operator を設定できます。自動インストールの詳細は、KServe の自動インストールの設定 を参照してください。
- 手動インストール
OpenShift クラスターに
ServiceMeshControlPlane
またはKNativeServing
リソースをすでに作成している場合は、KServe とその依存関係をインストールして構成するように Red Hat OpenShift AI Operator を設定 できません。この状況では、KServe を手動でインストールする必要があります。手動インストールの詳細は、KServe の手動インストール を参照してください。
3.1.3. 認可
シングルモデルサービングプラットフォームの認可プロバイダーとして Authorino を追加できます。認可プロバイダーを追加すると、プラットフォームにデプロイするモデルに対してトークン認可を有効にできます。その場合、認可されなければモデルに対して推論リクエストを実行できなくなります。
シングルモデルサービングプラットフォームに Authorino を認可プロバイダーとして追加するには、次のオプションがあります。
- クラスター上でシングルモデルサービングプラットフォームの自動インストールが可能な場合は、自動インストールプロセスの一部として Authorino を含めることができます。
- シングルモデルサービングプラットフォームを手動でインストールする必要がある場合は、Authorino も手動で設定する必要があります。
シングルモデルサービングプラットフォームのインストールオプションを選択する方法は、インストールオプション を参照してください。
3.1.4. モニタリング
シングルモデルサービングプラットフォームの監視を設定し、Prometheus を使用して、プリインストールされた各モデルサービングランタイムのメトリクスをスクレイピングできます。
3.1.5. サポート対象のモデルサービングランタイム
OpenShift AI には、いくつかのプリインストールされたモデルサービングランタイムが含まれています。プリインストールされたモデルサービングランタイムを使用すると、ランタイムを自分で変更したり定義したりすることなく、モデルの提供を開始できます。モデルをサポートするために、カスタムランタイムを追加することもできます。
カスタムランタイムの追加に関するサポートは、シングルモデルサービングプラットフォーム用のカスタムモデルサービングランタイムの追加 を参照してください。
Name | 説明 | エクスポートされたモデル形式 |
---|---|---|
Caikit Text Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe (1) | Caikit 形式のモデルを提供するための複合ランタイム | Caikit テキスト生成 |
Caikit Standalone ServingRuntime for KServe (2) | 埋め込みタスク用の Caikit 埋め込み形式でモデルを提供するためのランタイム | Caikit の埋め込み |
OpenVINO Model Server | Intel アーキテクチャーに最適化されたモデルを提供するためのスケーラブルで高性能なランタイム | PyTorch、TensorFlow、OpenVINO IR、PaddlePaddle、MXNet、Caffe、Kaldi |
Text Generation Inference Server (TGIS) Standalone ServingRuntime for KServe (3) | TGI 対応モデルを提供するためのランタイム | PyTorch モデル形式 |
vLLM ServingRuntime for KServe | 大規模言語モデル向けの高スループットかつメモリー効率の高い推論およびサービングランタイム |
- 複合 Caikit-TGIS ランタイムは、Caikit および Text Generation Inference Server (TGIS) に基づいています。このランタイムを使用するには、モデルを Caikit 形式に変換する必要があります。例は、caikit-tgis-serving リポジトリーの Converting Hugging Face Hub models to Caikit format を参照してください。
- Caikit Standalone ランタイムは Caikit NLP に基づいています。このランタイムを使用するには、モデルを Caikit 埋め込み形式に変換する必要があります。例は、Tests for text embedding module を参照してください。
- Text Generation Inference Server (TGIS) は、Hugging Face TGI の初期のフォークに基づいています。Red Hat は、TGI モデルをサポートするスタンドアロン TGIS ランタイムの開発を継続します。モデルが OpenShift AI の最新バージョンと互換性がない場合は、今後のバージョンでサポートが追加される可能性があります。それまでの間は、独自のカスタムランタイムを追加して TGI モデルをサポートすることもできます。詳細は、シングルモデルサービングプラットフォーム用のカスタムモデルサービングランタイムの追加 を参照してください。
Name | デフォルトプロトコル | 追加プロトコル | モデルメッシュのサポート | シングルノードの OpenShift サポート | デプロイメントモード |
---|---|---|---|---|---|
Caikit Text Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe | REST | gRPC | いいえ | はい | raw および serverless |
Caikit Standalone ServingRuntime for KServe | REST | gRPC | いいえ | はい | raw および serverless |
OpenVINO Model Server | REST | なし | はい | はい | raw および serverless |
Text Generation Inference Server (TGIS) Standalone ServingRuntime for KServe | gRPC | なし | いいえ | はい | raw および serverless |
vLLM ServingRuntime for KServe | REST | なし | いいえ | はい | raw および serverless |
関連情報
3.1.6. 推論エンドポイント
これらの例は、推論エンドポイントを使用してモデルをクエリーする方法を示しています。
- Caikit TGIS ServingRuntime for KServe
-
:443/api/v1/task/text-generation
-
:443/api/v1/task/server-streaming-text-generation
-
- Caikit Standalone ServingRuntime for KServe
複数のモデルを提供している場合は、
/info/models
または:443 caikit.runtime.info.InfoService/GetModelsInfo
をクエリーして、提供されているモデルのリストを表示できます。REST エンドポイント
-
/api/v1/task/embedding
-
/api/v1/task/embedding-tasks
-
/api/v1/task/sentence-similarity
-
/api/v1/task/sentence-similarity-tasks
-
/api/v1/task/rerank
-
/api/v1/task/rerank-tasks
-
/info/models
-
/info/version
-
/info/runtime
gRPC エンドポイント
-
:443 caikit.runtime.Nlp.NlpService/EmbeddingTaskPredict
-
:443 caikit.runtime.Nlp.NlpService/EmbeddingTasksPredict
-
:443 caikit.runtime.Nlp.NlpService/SentenceSimilarityTaskPredict
-
:443 caikit.runtime.Nlp.NlpService/SentenceSimilarityTasksPredict
-
:443 caikit.runtime.Nlp.NlpService/RerankTaskPredict
-
:443 caikit.runtime.Nlp.NlpService/RerankTasksPredict
-
:443 caikit.runtime.info.InfoService/GetModelsInfo
-
:443 caikit.runtime.info.InfoService/GetRuntimeInfo
-
デフォルトでは、Caikit Standalone ランタイムは REST エンドポイントを公開します。gRPC プロトコルを使用するには、カスタム Caikit Standalone ServingRuntime を手動でデプロイします。詳細は、シングルモデルサービングプラットフォーム用のカスタムモデルサービングランタイムの追加 を参照してください。
サンプルのマニフェストは caikit-tgis-serving GitHub リポジトリー で入手できます。
- TGIS Standalone ServingRuntime for KServe
-
:443 fmaas.GenerationService/Generate
:443 fmaas.GenerationService/GenerateStream
注記TGIS スタンドアロンランタイムのエンドポイントをクエリーするには、OpenShift AI
text-generation-inference
リポジトリーの proto ディレクトリーにあるファイルもダウンロードする必要があります。
-
- OpenVINO Model Server
-
/v2/models/<model-name>/infer
-
- vLLM ServingRuntime for KServe
-
:443/version
-
:443/docs
-
:443/v1/models
-
:443/v1/chat/completions
-
:443/v1/completions
-
:443/v1/embeddings
-
:443/tokenize
:443/detokenize
注記- vLLM ランタイムは OpenAI REST API と互換性があります。vLLM ランタイムがサポートするモデルのリストは、サポートされるモデル を参照してください。
- vLLM で embeddings 推論エンドポイントを使用するには、vLLM でサポートされている embeddings モデルを使用する必要があります。生成モデルでは embeddings エンドポイントは使用できません。詳細は、vLLM でサポートされている embeddings モデル を参照してください。
vLLM v0.5.5 以降では、
/v1/chat/completions
エンドポイントを使用してモデルをクエリーするときに、チャットテンプレートを提供する必要があります。モデルに定義済みのチャットテンプレートが含まれていない場合は、例に示すように、chat-template
コマンドラインパラメーターを使用して、カスタム vLLM ランタイムでチャットテンプレートを指定できます。<CHAT_TEMPLATE>
をテンプレートのパスに置き換えます。containers: - args: - --chat-template=<CHAT_TEMPLATE>
ここで
.jinja
ファイルとして利用できるチャットテンプレート、または/apps/data/template
の下の vLLM イメージを使用できます。詳細は、チャットテンプレート を参照してください。
上記のパスで示されているように、シングルモデルサービングプラットフォームは、OpenShift ルーターの HTTPS ポート (通常はポート 443) を使用して、外部 API リクエストを処理します。
-
3.1.6.1. コマンドの例
モデルのデプロイ時にトークン認可を有効にした場合は、Authorization
ヘッダーを追加してトークン値を指定する必要があります。
Caikit TGIS ServingRuntime for KServe
curl --json '{"model_id": "<model_name__>", "inputs": "<text>"}' https://<inference_endpoint_url>:443/api/v1/task/server-streaming-text-generation -H 'Authorization: Bearer <token>'
Caikit Standalone ServingRuntime for KServe
REST
curl -H 'Content-Type: application/json' -d '{"inputs": "<text>", "model_id": "<model_id>"}' <inference_endpoint_url>/api/v1/task/embedding -H 'Authorization: Bearer <token>'
gRPC
grpcurl -insecure -d '{"text": "<text>"}' -H \"mm-model-id: <model_id>\" <inference_endpoint_url>:443 caikit.runtime.Nlp.NlpService/EmbeddingTaskPredict -H 'Authorization: Bearer <token>'
TGIS Standalone ServingRuntime for KServe
grpcurl -proto text-generation-inference/proto/generation.proto -d '{"requests": [{"text":"<text>"}]}' -H 'Authorization: Bearer <token>' -insecure <inference_endpoint_url>:443 fmaas.GenerationService/Generate
OpenVINO Model Server
curl -ks <inference_endpoint_url>/v2/models/<model_name>/infer -d '{ "model_name": "<model_name>", "inputs": [{ "name": "<name_of_model_input>", "shape": [<shape>], "datatype": "<data_type>", "data": [<data>] }]}' -H 'Authorization: Bearer <token>'
vLLM ServingRuntime for KServe
curl -v https://<inference_endpoint_url>:443/v1/chat/completions -H "Content-Type: application/json" -d '{ "messages": [{ "role": "<role>", "content": "<content>" }] -H 'Authorization: Bearer <token>'