3.13. 複数の GPU ノードを使用したモデルのデプロイ
大規模言語モデル (LLM) などの大規模モデルを処理するために、複数の GPU ノードにわたってモデルをデプロイします。
この手順では、vLLM サービングフレームワークを使用して、複数の GPU ノードにわたって Red Hat OpenShift AI 上でモデルを提供する方法を説明します。マルチノード推論では、vllm-multinode-runtime
カスタムランタイムを使用します。vllm-multinode-runtime
ランタイムは、VLLM ServingRuntime for KServe と同じイメージを使用し、マルチ GPU 推論に必要な情報を含んでいます。
複数の GPU ノードを使用したモデルのデプロイ は、現在、Red Hat OpenShift AI のテクノロジープレビュー機能として提供されています。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat では、実稼働環境での使用を推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
- OpenShift クラスターのクラスター管理者権限を持っている。
- OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
Node Feature Discovery Operator、NVIDIA GPU Operator など、お使いの GPU タイプ用の Operator を有効にした。アクセラレーターの有効化の詳細は、アクセラレーターの有効化 を参照してください。
-
NVIDIA GPU (
nvidia.com/gpu
) を使用している。 -
ServingRuntime
またはInferenceService
のいずれかを使用して GPU タイプを指定した。ServingRuntime
で指定された GPU タイプがInferenceService
で設定されたものと異なる場合、両方の GPU タイプがリソースに割り当てられ、エラーが発生する可能性があります。
-
NVIDIA GPU (
- クラスターで KServe を有効にした。
-
環境にヘッド Pod が 1 つだけある。
InferenceService
のmin_replicas
またはmax_replicas
設定を使用してレプリカ数を調整しないでください。追加のヘッド Pod を作成すると、それらが Ray クラスターから除外される可能性があります。 - 永続ボリューム要求 (PVC) が設定済みで、ReadWriteMany (RWX) アクセスモード用に設定されている。
手順
ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。
oc login <openshift_cluster_url> -u <admin_username> -p <password>
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow モデルをデプロイするための namespace を選択または作成します。たとえば、次のコマンドを実行して、
kserve-demo
namespace を作成できます。oc new-project kserve-demo
oc new-project kserve-demo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ターゲット namespace で、モデルストレージ用の PVC を作成し、ストレージクラスの名前を指定します。ストレージクラスはファイルストレージである必要があります。
注記PVC をすでに設定している場合は、このステップをスキップできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow モデルを PVC にダウンロードします。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow vllm-multinode-runtime
カスタムランタイムを作成します。oc process vllm-multinode-runtime-template -n redhat-ods-applications|oc apply -n kserve-demo -f -
oc process vllm-multinode-runtime-template -n redhat-ods-applications|oc apply -n kserve-demo -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
InferenceService
設定を使用してモデルをデプロイします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow InferenceService
には次の設定を追加できます。-
workerSpec.tensorParallelSize
: ノードごとに使用される GPU の数を決定します。ヘッドノードとワーカーノードのデプロイメントリソースの GPU タイプ数は、どちらも自動的に更新されます。workerSpec.tensorParallelSize
の値は、必ず1
以上にしてください。 -
workerSpec.pipelineParallelSize
: デプロイメントに関与するノードの数を決定します。この変数は、ヘッドノードとワーカーノードの両方を含むノードの合計数を表します。workerSpec.pipelineParallelSize
の値は、必ず2
以上にしてください。
-
検証
複数の GPU ノードにモデルをデプロイするように環境を設定したことを確認するには、GPU リソースのステータス、InferenceService
のステータス、Ray クラスターのステータスを確認し、モデルにリクエストを送信します。
GPU リソースのステータスを確認します。
ヘッドノードとワーカーノードの Pod 名を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 応答の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <1> と <2> の値をチェックして、モデルが適切にロードされたことを確認します。モデルがロードされなかった場合、これらのフィールドの値は
0MiB
になります。
次のコマンドを使用して、
InferenceService
のステータスを確認します。注記テクノロジープレビューでは、推論にのみポート転送を使用できます。
oc wait --for=condition=ready pod/${podName} -n $DEMO_NAMESPACE --timeout=300s export MODEL_NAME=granite-8b-code-base-pvc
oc wait --for=condition=ready pod/${podName} -n $DEMO_NAMESPACE --timeout=300s export MODEL_NAME=granite-8b-code-base-pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 応答の例
NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE granite-8b-code-base-pvc http://granite-8b-code-base-pvc.default.example.com
NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE granite-8b-code-base-pvc http://granite-8b-code-base-pvc.default.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow モデルが推論に使用できることを確認するために、モデルにリクエストを送信します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow