2.12. 複数の GPU ノードを使用したモデルのデプロイ
大規模言語モデル (LLM) などの大規模モデルを処理するために、複数の GPU ノードにわたってモデルをデプロイします。
vLLM サービングフレームワークを使用して、複数の GPU ノードにわたって Red Hat OpenShift AI 上でモデルを提供できます。マルチノード推論では、vllm-multinode-runtime カスタムランタイムを使用します。vllm-multinode-runtime ランタイムは、VLLM NVIDIA GPU 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-demonamespace を作成できます。oc new-project kserve-demo
oc new-project kserve-demoCopy to Clipboard Copied! Toggle word wrap Toggle overflow モデルをデプロイする namespace から、モデルストレージ用の PVC を作成します。
Filesystem volumeModeを使用してストレージクラスを作成します。PVC にこのストレージクラスを使用します。ストレージサイズは、ディスク上のモデルファイルのサイズよりも大きくする必要があります。以下に例を示します。注記PVC をすでに設定している場合は、このステップをスキップできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow モデルを PVC にダウンロードするには、提供されているサンプル YAML を変更します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
chmod操作は、Pod が root として実行されている場合にのみ使用できます。Pod を root として実行していない場合は、引数から `chmod -R 777` を削除します。- 2 7
- モデルへのパスを指定します。
- 3
InferenceServiceにあるcontainers.imageの値。この値にアクセスするには、oc get configmap inferenceservice-config -n redhat-ods-operator -oyaml | grep kserve-storage-initializer:のコマンドを実行します。- 4
- S3 バケットへのアクセスキー ID。
- 5
- S3 バケットへのシークレットアクセスキー。
- 6
- S3 バケットの名前。
- 8
- S3 バケットへのエンドポイント。
- 9
- AWS S3 バケットを使用する場合の S3 バケットのリージョン。ODF や Minio などの他の S3 互換ストレージを使用する場合は、
AWS_DEFAULT_REGION環境変数を削除できます。 - 10
- SSL エラーが発生した場合は、
S3_VERIFY_SSLをfalseに変更します。
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-pvcoc wait --for=condition=ready pod/${podName} -n $DEMO_NAMESPACE --timeout=300s export MODEL_NAME=granite-8b-code-base-pvcCopy 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.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow モデルが推論に使用できることを確認するために、モデルにリクエストを送信します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow