2.12. 複数の GPU ノードを使用したモデルのデプロイ
大規模言語モデル (LLM) などの大規模モデルを処理するために、複数の GPU ノードにわたってモデルをデプロイします。
vLLM サービングフレームワークを使用して、複数の GPU ノードにわたって Red Hat OpenShift AI 上でモデルを提供できます。マルチノード推論では、vllm-multinode-runtime
カスタムランタイムが使用されます。これは、vLLM NVIDIA GPU ServingRuntime for KServe と同じイメージを使用し、マルチ GPU 推論に必要な情報を含んでいます。
モデルは、永続ボリューム要求 (PVC) または Open Container Initiative (OCI) コンテナーイメージからデプロイできます。
複数の GPU ノードを使用したモデルのデプロイ は、現在、Red Hat OpenShift AI のテクノロジープレビュー機能として提供されています。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat では、実稼働環境での使用を推奨していません。これらの機能により、近日発表予定の製品機能をリリースに先駆けてご提供でき、お客様は開発プロセス時に機能をテストして、フィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
- OpenShift クラスターのクラスター管理者権限を持っている。
- OpenShift コマンドラインインターフェイス (CLI) をダウンロードしてインストールした。詳細は、OpenShift CLI のインストール (Red Hat OpenShift Dedicated) または OpenShift CLI のインストール (Red Hat OpenShift Service on AWS) を参照してください。
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 からデプロイする場合: 永続ボリューム要求 (PVC) がセットアップされ、ReadWriteMany (RWX) アクセスモード用に設定されている。
OCI コンテナーイメージからデプロイする場合:
- モデルを OCI コンテナーイメージに保存した。
- モデルがプライベート OCI リポジトリーに保存されている場合は、イメージプルシークレットを設定した。
手順
ターミナルウィンドウで、クラスター管理者として 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 (PVC からモデルをデプロイする場合のみ) モデルをデプロイする namespace に、モデルストレージ用の PVC を作成します。
Filesystem volumeMode
を使用してストレージクラスを作成し、このストレージクラスを PVC に使用します。ストレージサイズは、ディスク上のモデルファイルのサイズよりも大きくする必要があります。以下に例を示します。注記PVC がすでに設定済みの場合、または OCI コンテナーイメージからモデルをデプロイする場合は、このステップをスキップできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成した PVC にモデルをダウンロードするための Pod を作成します。バケット名、モデルパス、および認証情報を使用してサンプル 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
に変更します。
プロジェクト namespace に
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 - 1
- デプロイ方法に応じてモデルへのパスを指定します。
-
PVC の場合:
pvc://<pvc_name>/<model_path>
-
OCI コンテナーイメージの場合:
oci://<registry_host>/<org_or_username>/<repository_name><tag_or_digest>
-
PVC の場合:
- 2
InferenceService
には次の設定を追加できます。-
workerSpec.tensorParallelSize
: ノードごとに使用される GPU の数を決定します。ヘッドノードとワーカーノードのデプロイメントリソースの GPU タイプ数は、どちらも自動的に更新されます。workerSpec.tensorParallelSize
の値は、必ず1
以上にしてください。 workerSpec.pipelineParallelSize
: デプロイメントでモデルのバランスをとるために使用されるノードの数を決定します。この変数は、ヘッドノードとワーカーノードの両方を含むノードの合計数を表します。workerSpec.pipelineParallelSize
の値は、必ず2
以上にしてください。実稼働環境では、この値は変更しないでください。注記お使いの環境およびモデルサイズに応じて、追加の引数を指定する必要がある場合があります。
-
InferenceService
設定を適用してモデルをデプロイします。oc apply -f <inference-service-file.yaml>
oc apply -f <inference-service-file.yaml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
複数の 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