2.12. シングルモデルサービングプラットフォームを使用したモデルのデプロイ
シングルモデルサービングプラットフォームでは、各モデルが独自のモデルサーバー上でデプロイされます。これにより、リソースの増加を必要とする大規模なモデルのデプロイ、監視、スケーリング、保守が容易になります。
2.12.1. シングルモデルサービングプラットフォームの有効化
KServe をインストールすると、Red Hat OpenShift AI ダッシュボードを使用して、シングルモデルサービングプラットフォームを有効にすることができます。ダッシュボードを使用して、プラットフォームのモデルサービングランタイムを有効にすることもできます。
前提条件
- OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。
- KServe をインストールしている。
- クラスター管理者は、OpenShift AI ダッシュボード設定を編集して KServe コンポーネントを使用するシングルモデルサービングプラットフォームを選択する機能を無効に していない。詳細は、ダッシュボード設定オプション を参照してください。
手順
次のようにシングルモデルサービングプラットフォームを有効にします。
-
左側のメニューで、Settings
Cluster settings をクリックします。 - Model serving platforms セクションを見つけます。
- プロジェクトに対してシングルモデルサービングプラットフォームを有効にするには、Single model serving platform チェックボックスをオンにします。
- Save changes をクリックします。
-
左側のメニューで、Settings
次のように、シングルモデルサービングプラットフォーム用のプリインストールされたランタイムを有効にします。
OpenShift AI ダッシュボードの左側のメニューで、Settings
Serving runtimes をクリックします。 Serving runtimes ページには、プリインストールされたランタイムと追加したカスタムランタイムが表示されます。
プリインストールされたランタイムの詳細は、サポートされているランタイム を参照してください。
使用するランタイムを Enabled に設定します。
これで、シングルモデルサービングプラットフォームをモデルのデプロイに使用できるようになりました。
2.12.2. シングルモデルサービングプラットフォーム用のカスタムモデルサービングランタイムの追加
モデルサービングランタイムは、特定のモデルフレームワーク群のサポートと、それらのフレームワークでサポートされるモデル形式のサポートを追加します。OpenShift AI に含まれている プリインストールされたランタイム を使用できます。デフォルトのランタイムがニーズを満たしていない場合は、独自のカスタムランタイムを追加することもできます。たとえば、TGIS ランタイムが Hugging Face Text Generation Inference (TGI) でサポートされているモデル形式をサポートしていない場合は、カスタムランタイムを作成してモデルのサポートを追加できます。
管理者は、OpenShift AI インターフェイスを使用して、カスタムのモデルサービングランタイムを追加して有効にすることができます。その場合は、シングルモデルサービングプラットフォームにモデルをデプロイする際に、カスタムランタイムを選択できます。
Red Hat はカスタムランタイムのサポートを提供しません。追加したカスタムランタイムを使用するライセンスがあることを確認し、お客様の責任で正しく設定および保守するようにしてください。
前提条件
- OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。
- カスタムランタイムをビルドし、イメージを Quay などのコンテナーイメージリポジトリーに追加している。
手順
OpenShift AI ダッシュボードから、Settings > Serving runtimes をクリックします。
Serving runtimes ページが開き、すでにインストールされ有効になっているモデルサービングランタイムが表示されます。
カスタムランタイムを追加するには、次のオプションのいずれかを選択します。
- 既存のランタイム (TGIS Standalone ServingRuntime for KServe など) で開始するには、既存のランタイムの横にあるアクションメニュー (⋮) をクリックしてから、Duplicate をクリックします。
- 新しいカスタムランタイムを追加するには、Add serving runtime をクリックします。
- Select the model serving platforms this runtime supports リストで、Single-model serving platform を選択します。
- Select the API protocol this runtime supports リストで、REST または gRPC を選択します。
オプション: (既存のランタイムを複製するのではなく) 新しいランタイムを開始した場合は、次のオプションのいずれかを選択してコードを追加します。
YAML ファイルをアップロードする
- Upload files をクリックします。
ファイルブラウザーで、コンピューター上の YAML ファイルを選択します。
埋め込み YAML エディターが開き、アップロードしたファイルの内容が表示されます。
エディターに YAML コードを直接入力する
- Start from scratch をクリックします。
- 埋め込みエディターに YAML コードを直接入力または貼り付けます。
注記多くの場合、カスタムランタイムを作成するには、
ServingRuntime
仕様のenv
セクションに新しいパラメーターまたはカスタムパラメーターを追加する必要があります。Add をクリックします。
Serving runtimes ページが開き、インストールされているランタイムの更新されたリストが表示されます。追加したカスタムランタイムが自動的に有効になることを確認します。ランタイム作成時に指定した API プロトコルが表示されます。
- オプション: カスタムランタイムを編集するには、アクションメニュー (⋮) をクリックし、Edit を選択します。
検証
- 追加したカスタムモデルサービングランタイムは、Serving runtimes ページに有効な状態で表示されます。
2.12.3. シングルモデルサービングプラットフォームへのテスト済みおよび検証済みのモデルサービングランタイム追加
プリインストールされたカスタムのモデルサービングランタイムに加えて、NVIDIA Triton Inference Server などの Red Hat でテストおよび検証されたモデルサービングランタイムを使用して要件に対応することもできます。Red Hat のテスト済みおよび検証済みのランタイムの詳細は、Red Hat OpenShift AI のテスト済みおよび検証済みのランタイム を参照してください。
Red Hat OpenShift AI ダッシュボードを使用して、シングルモデルサービングプラットフォーム用の NVIDIA Triton Inference Server ランタイムを追加して有効にできます。その場合は、シングルモデルサービングプラットフォームにモデルをデプロイする際に、ランタイムを選択できます。
前提条件
- OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。
手順
OpenShift AI ダッシュボードから、Settings > Serving runtimes をクリックします。
Serving runtimes ページが開き、すでにインストールされ有効になっているモデルサービングランタイムが表示されます。
- Add serving runtime をクリックします。
- Select the model serving platforms this runtime supports リストで、Single-model serving platform を選択します。
- Select the API protocol this runtime supports リストで、REST または gRPC を選択します。
Start from scratch をクリックします。
REST API プロトコルを選択した場合は、埋め込みエディターに次の YAML コードを直接入力または貼り付けます。
apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: triton-kserve-rest labels: opendatahub.io/dashboard: "true" spec: annotations: prometheus.kserve.io/path: /metrics prometheus.kserve.io/port: "8002" containers: - args: - tritonserver - --model-store=/mnt/models - --grpc-port=9000 - --http-port=8080 - --allow-grpc=true - --allow-http=true image: nvcr.io/nvidia/tritonserver@sha256:xxxxx name: kserve-container resources: limits: cpu: "1" memory: 2Gi requests: cpu: "1" memory: 2Gi ports: - containerPort: 8080 protocol: TCP protocolVersions: - v2 - grpc-v2 supportedModelFormats: - autoSelect: true name: tensorrt version: "8" - autoSelect: true name: tensorflow version: "1" - autoSelect: true name: tensorflow version: "2" - autoSelect: true name: onnx version: "1" - name: pytorch version: "1" - autoSelect: true name: triton version: "2" - autoSelect: true name: xgboost version: "1" - autoSelect: true name: python version: "1"
gRPC API プロトコルを選択した場合は、埋め込みエディターで次の YAML コードを直接入力または貼り付けます。
apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: triton-kserve-grpc labels: opendatahub.io/dashboard: "true" spec: annotations: prometheus.kserve.io/path: /metrics prometheus.kserve.io/port: "8002" containers: - args: - tritonserver - --model-store=/mnt/models - --grpc-port=9000 - --http-port=8080 - --allow-grpc=true - --allow-http=true image: nvcr.io/nvidia/tritonserver@sha256:xxxxx name: kserve-container ports: - containerPort: 9000 name: h2c protocol: TCP volumeMounts: - mountPath: /dev/shm name: shm resources: limits: cpu: "1" memory: 2Gi requests: cpu: "1" memory: 2Gi protocolVersions: - v2 - grpc-v2 supportedModelFormats: - autoSelect: true name: tensorrt version: "8" - autoSelect: true name: tensorflow version: "1" - autoSelect: true name: tensorflow version: "2" - autoSelect: true name: onnx version: "1" - name: pytorch version: "1" - autoSelect: true name: triton version: "2" - autoSelect: true name: xgboost version: "1" - autoSelect: true name: python version: "1" volumes: - emptyDir: null medium: Memory sizeLimit: 2Gi name: shm
-
metadata.name
フィールドで、追加するランタイムの値が、すでに追加されているランタイムと一致していないことを確認してください。 オプション: 追加するランタイムのカスタム表示名を使用するには、次の例に示すように、
metadata.annotations.openshift.io/display-name
フィールドを追加し、値を指定します。apiVersion: serving.kserve.io/v1alpha1 kind: ServingRuntime metadata: name: kserve-triton annotations: openshift.io/display-name: Triton ServingRuntime
注記ランタイムのカスタム表示名を設定しないと、OpenShift AI には
metadata.name
フィールドの値が表示されます。Create をクリックします。
Serving runtimes ページが開き、インストールされているランタイムの更新されたリストが表示されます。追加したランタイムが自動的に有効になっていることを確認します。ランタイム作成時に指定した API プロトコルが表示されます。
- オプション: ランタイムを編集するには、アクションメニュー (⋮) をクリックし、Edit を選択します。
検証
- 追加したモデルサービスランタイムは、Serving runtimes ページに有効な状態で表示されます。
2.12.4. シングルモデルサービングプラットフォームへのモデルのデプロイ
シングルモデルサービングプラットフォームを有効にすると、カスタムまたはプリインストールされたモデルサービングランタイムを有効にして、プラットフォームへのモデルのデプロイを開始できます。
Text Generation Inference Server (TGIS) は、Hugging Face TGI の初期のフォークに基づいています。Red Hat は、TGI モデルをサポートするスタンドアロン TGIS ランタイムの開発を継続します。モデルが OpenShift AI の現在のバージョンで機能しない場合、今後のバージョンでサポートが追加される可能性があります。それまでの間は、独自のカスタムランタイムを追加して TGI モデルをサポートすることもできます。詳細は、シングルモデルサービングプラットフォーム用のカスタムモデルサービングランタイムの追加 を参照してください。
前提条件
- Red Hat OpenShift AI にログインしている。
-
OpenShift AI グループを使用している場合は、OpenShift のユーザーグループまたは管理者グループ (
rhoai-users
やrhoai-admins
など) に属している。 - KServe をインストールしている。
- シングルモデルサービングプラットフォームを有効にしている。
- デプロイされたモデルのトークン認可と外部モデルルートを有効にするために、Authorino を認可プロバイダーとして追加している。詳細は、シングルモデルサービングプラットフォームの認可プロバイダーの追加 を参照してください。
- データサイエンスプロジェクトを作成した。
- S3 互換オブジェクトストレージにアクセスできる。
- デプロイするモデルについて、S3 互換オブジェクトストレージバケット内の関連フォルダーパスを把握している。
- Caikit-TGIS ランタイムを使用するために、モデルを Caikit 形式に変換している。例は、caikit-tgis-serving リポジトリーの Converting Hugging Face Hub models to Caikit format を参照してください。
- モデルサーバーでグラフィックスプロセッシングユニット (GPU) を使用する場合は、OpenShift AI で GPU サポートを有効にしている。NVIDIA GPU を使用する場合は、NVIDIA GPU の有効化 を参照してください。AMD GPU を使用する場合は、AMD GPU の統合 を参照してください。
- vLLM ランタイムを使用するには、OpenShift AI で GPU サポートを有効にし、クラスターに Node Feature Discovery Operator をインストールして設定しておく。詳細は、Node Feature Discovery Operator のインストール と NVIDIA GPU の有効化 を参照してください。
- vLLM ServingRuntime with Gaudi accelerators support for KServe を使用するために、OpenShift AI のハイブリッドプロセッシングユニット (HPU) のサポートを有効にした。これには、Intel Gaudi AI アクセラレーター Operator のインストールとアクセラレータープロファイルの設定が含まれます。詳細は、Setting up Gaudi for OpenShift および アクセラレーターの使用 を参照してください。
vLLM ROCm ServingRuntime for KServe を使用する場合は、OpenShift AI で AMD グラフィックプロセッシングユニット (GPU) のサポートを有効にした。これには、AMD GPU Operator のインストールとアクセラレータープロファイルの設定が含まれます。詳細は、Deploying the AMD GPU operator on OpenShift および アクセラレーターの使用 を参照してください。
注記OpenShift AI 2.17 では、Red Hat はモデルサービング用に NVIDIA GPU、Intel Gaudi、および AMD GPU アクセラレーターをサポートしています。
RHEL AI モデルをデプロイするために、以下を実行した。
- vLLM ServingRuntime for KServe を有効にした。
- Red Hat コンテナーレジストリーからモデルをダウンロードし、S3 互換オブジェクトストレージにアップロードした。
手順
左側のメニューで、Data Science Projects をクリックします。
Data Science Projects ページが開きます。
モデルをデプロイするプロジェクトの名前をクリックします。
プロジェクトの詳細ページが開きます。
- Models タブをクリックします。
次のいずれかの操作を実行します。
- Single-model serving platform タイルが表示された場合は、タイル上の Deploy model をクリックします。
- タイルが表示されない場合は、Deploy model ボタンをクリックします。
Deploy model ダイアログが開きます。
- Model deployment name フィールドに、デプロイするモデルの一意の名前を入力します。
- Serving runtime フィールドで、有効なランタイムを選択します。
- Model framework (name - version) リストから値を選択します。
- Number of model server replicas to deploy フィールドに値を指定します。
- Model server size リストから値を選択します。
次のオプションは、クラスターでアクセラレーターサポートを有効にし、アクセラレータープロファイルを作成した場合にのみ使用できます。
- Accelerator リストからアクセラレーターを選択します。
- 前の手順でアクセラレーターを選択した場合は、Number of accelerators フィールドで使用するアクセラレーターの数を指定します。
- オプション: Model route セクションで、Make deployed models available through an external route チェックボックスをオンにして、デプロイされたモデルを外部クライアントが利用できるようにします。
デプロイされたモデルに対する推論リクエストにトークン認可を要求するには、次のアクションを実行します。
- Require token authorization を選択します。
- Service account name フィールドに、トークンが生成されるサービスアカウント名を入力します。
モデルの場所を指定するには、次の一連のアクションのいずれかを実行します。
既存の接続を使用するには
- Existing connection を選択します。
- Name リストから、以前に定義した接続を選択します。
Path フィールドに、指定したデータソース内のモデルを含むフォルダーパスを入力します。
重要OpenVINO Model Server ランタイムには、モデルパスの指定方法に関する特定の要件があります。詳細は、OpenShift AI リリースノートの既知の問題 RHOAIENG-3025 を参照してください。
新しい接続を使用するには
モデルがアクセスできる新しい接続を定義するには、New connection を選択します。
Add connection モーダルで、Connection type を選択します。S3 compatible object storage オプションと URI オプションは、事前にインストールされた接続タイプです。OpenShift AI 管理者が追加した場合は、追加のオプションが利用できる場合があります。
選択した接続タイプに固有のフィールドを含む Add connection フォームが開きます。
接続の詳細フィールドに入力します。
重要接続タイプが S3 互換オブジェクトストレージの場合は、データファイルが含まれるフォルダーパスを指定する必要があります。OpenVINO Model Server ランタイムには、モデルパスの指定方法に関する特定の要件があります。詳細は、OpenShift AI リリースノートの既知の問題 RHOAIENG-3025 を参照してください。
(オプション) Configuration parameters セクションでランタイムパラメーターをカスタマイズします。
- Additional serving runtime arguments の値を変更して、デプロイされるモデルの動作を定義します。
モデルの環境内の変数を定義するには、Additional environment variables の値を変更します。
Configuration parameters セクションに、事前定義されたサービングランタイムパラメーターが表示されます (利用可能な場合)。
注記ポートまたはモデルサービングランタイムの引数は変更しないでください。これらの引数には、特定の値を設定する必要があるためです。これらのパラメーターを上書きすると、デプロイが失敗する可能性があります。
- Deploy をクリックします。
検証
- デプロイされたモデルがプロジェクトの Models タブに表示され、ダッシュボードの Model Serving ページで Status 列にチェックマークが付いて表示されていることを確認します。
2.12.5. KServe のタイムアウトの設定
大規模なモデルをデプロイする場合、または KServe でノードの自動スケーリングを使用する場合、モデルがデプロイされる前に操作がタイムアウトすることがあります。KNative Serving が設定するデフォルトの progress-deadline
が 10 分であるためです。
KNative Serving を使用した Pod のデプロイに 10 分以上かかる場合、Pod が自動的に失敗とマークされる可能性があります。これは、S3 互換のオブジェクトストレージからプルするのに 10 分以上かかる大規模なモデルをデプロイしている場合、またはノードの自動スケーリングを使用して GPU ノードの消費を削減している場合に発生する可能性があります。
この問題を解決するには、アプリケーションに合わせて KServe の InferenceService
でカスタムの progress-deadline
を設定できます。
前提条件
- OpenShift クラスターの namespace 編集アクセス権がある。
手順
- OpenShift コンソールにクラスター管理者としてログインします。
- モデルをデプロイしたプロジェクトを選択します。
-
Administrator パースペクティブで、Home
Search をクリックします。 -
Resources ドロップダウンメニューから、
InferenceService
を検索します。 spec.predictor.annotations
の下のserving.knative.dev/progress-deadline
を新しいタイムアウトに変更します。apiVersion: serving.kserve.io/v1alpha1 kind: InferenceService metadata: name: my-inference-service spec: predictor: annotations: serving.knative.dev/progress-deadline: 30m
注記必ず
spec.predictor.annotations
レベルでprogress-deadline
を設定して、KServe のInferenceService
がprogress-deadline
を KNative Service オブジェクトにコピーできるようにしてください。
2.12.6. デプロイされたモデルサービングランタイムのパラメーターのカスタマイズ
特定のモデルをデプロイしたり、既存のモデルのデプロイメントを拡張したりするには、デフォルトのパラメーター以外に追加のパラメーターが必要になる場合があります。このような場合、デプロイメントのニーズに合わせて既存のランタイムのパラメーターを変更できます。
ランタイムのパラメーターのカスタマイズは、選択したモデルのデプロイメントにのみ影響します。
前提条件
- OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。
- シングルモデルサービングプラットフォームにモデルをデプロイした。
手順
OpenShift AI ダッシュボードから、左側のメニューの Model Serving をクリックします。
Deployed models ページが開きます。
カスタマイズするモデル名の横にあるアクションメニュー (⋮) をクリックし、Edit を選択します。
Configuration parameters セクションに、事前定義されたサービングランタイムパラメーターが表示されます (利用可能な場合)。
Configuration parameters セクションでランタイムパラメーターをカスタマイズします。
- Additional serving runtime arguments の値を変更して、デプロイされるモデルの動作を定義します。
モデルの環境内の変数を定義するには、Additional environment variables の値を変更します。
注記ポートまたはモデルサービングランタイムの引数は変更しないでください。これらの引数には、特定の値を設定する必要があるためです。これらのパラメーターを上書きすると、デプロイが失敗する可能性があります。
- ランタイムパラメーターのカスタマイズが完了したら、Redeploy をクリックして、変更を加えたモデルを保存してデプロイします。
検証
- デプロイされたモデルがプロジェクトの Models タブに表示され、ダッシュボードの Model Serving ページで Status 列にチェックマークが付いて表示されていることを確認します。
次のいずれかの方法で、設定した引数と変数が
spec.predictor.model.args
とspec.predictor.model.env
に表示されることを確認します。- OpenShift コンソールから InferenceService YAML を確認します。
OpenShift CLI で次のコマンドを使用します。
oc get -o json inferenceservice <inferenceservicename/modelname> -n <projectname>
2.12.7. カスタマイズ可能なモデルサービングランタイムのパラメーター
デプロイメントのニーズに合わせて、既存のモデルサービングランタイムのパラメーターを変更できます。
サポートされている各サービングランタイムのパラメーターの詳細は、次の表を参照してください。
サービングランタイム | リソース |
---|---|
NVIDIA Triton Inference Server | |
Caikit Text Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe | |
Caikit Standalone ServingRuntime for KServe | |
OpenVINO Model Server | |
Text Generation Inference Server (TGIS) Standalone ServingRuntime for KServe | |
vLLM ServingRuntime for KServe |
2.12.8. モデル保存用の OCI コンテナーの使用
モデルを S3 バケットまたは URI に保存する代わりに、モデルを Open Container Initiative (OCI) コンテナーにアップロードできます。モデルの保存に OCI コンテナーを使用すると、次のことが可能になります。
- 同じモデルを複数回ダウンロードすることを回避し、起動時間を短縮します。
- ローカルにダウンロードされるモデルの数を減らすことで、ディスク領域の使用量を削減します。
- 事前に取得したイメージを許可することで、モデルのパフォーマンスが向上します。
モデルの保存に OCI コンテナーを使用する場合、次のタスクを実行します。
- OCI イメージへのモデルの保存
- OCI イメージからのモデルのデプロイ
モデルストレージに OCI コンテナーを使用する機能は、現在、Red Hat OpenShift AI 2.17 でテクノロジープレビュー機能として利用できます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat では、実稼働環境での使用を推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
2.12.8.1. OCI イメージへのモデルの保存
モデルを OCI イメージに保存できます。次の手順では、MobileNet v2-7 モデルを ONNX 形式で保存する例を使用します。
前提条件
- ONNX 形式のモデルがある。この手順の例では、ONNX 形式の MobileNet v2-7 モデルを使用します。
- Podman ツールがインストールされている。
手順
ローカルマシンのターミナルウィンドウで、OCI イメージの作成に必要なモデルファイルとサポートファイルの両方を保存するための一時ディレクトリーを作成します。
cd $(mktemp -d)
一時ディレクトリー内に
models
フォルダーを作成します。mkdir -p models/1
注記この例のコマンドでは、サブディレクトリー
1
を指定します。これは、OpenVINO がモデルのバージョン管理に番号付きのサブディレクトリーを必要とするためです。OpenVINO を使用していない場合は、OCI コンテナーイメージを使用するために1
サブディレクトリーを作成する必要はありません。モデルとサポートファイルをダウンロードします。
DOWNLOAD_URL=https://github.com/onnx/models/raw/main/validated/vision/classification/mobilenet/model/mobilenetv2-7.onnx curl -L $DOWNLOAD_URL -O --output-dir models/1/
tree
コマンドを使用して、モデルファイルが期待どおりにディレクトリー構造内に配置されていることを確認します。tree
tree
コマンドで、次の例のようなディレクトリー構造が返されるはずです。. ├── Containerfile └── models └── 1 └── mobilenetv2-7.onnx
Containerfile
という名前の Docker ファイルを作成します。注記-
シェルを提供するベースイメージを指定してください。次の例では、
ubi9-micro
がベースコンテナーイメージです。scratch
などのシェルを提供しない空のイメージを指定することはできません。KServe はシェルを使用してモデルファイルがモデルサーバーにアクセス可能であることを確認するためです。 - コピーしたモデルファイルの所有権を変更し、root グループに読み取り権限を付与して、モデルサーバーがファイルにアクセスできるようにしてください。OpenShift は、ランダムなユーザー ID と root グループ ID を使用してコンテナーを実行します。
FROM registry.access.redhat.com/ubi9/ubi-micro:latest COPY --chown=0:0 models /models RUN chmod -R a=rX /models # nobody user USER 65534
-
シェルを提供するベースイメージを指定してください。次の例では、
podman build
コマンドを使用して OCI コンテナーイメージを作成し、レジストリーにアップロードします。次のコマンドでは、レジストリーとして Quay を使用します。注記リポジトリーがプライベートの場合は、コンテナーイメージをアップロードする前に、レジストリーに対して認証されていることを確認してください。
podman build --format=oci -t quay.io/<user_name>/<repository_name>:<tag_name> . podman push quay.io/<user_name>/<repository_name>:<tag_name>
2.12.8.2. OCI イメージに保存されているモデルのデプロイ
OCI イメージに保存されているモデルをデプロイできます。
次の手順では、OpenVINO モデルサーバー上の OCI イメージに保存されている ONNX 形式の MobileNet v2-7 モデルをデプロイする例を使用します。
KServe では、デフォルトでモデルはクラスター外部に公開され、認可によって保護されません。
前提条件
- OCI イメージへのモデルの保存 の説明に従って、モデルを OCI イメージに保存した。
- プライベート OCI リポジトリーに保存されているモデルをデプロイする場合は、イメージプルシークレットを設定した。イメージプルシークレットの作成の詳細は、イメージプルシークレットの使用 を参照してください。
- OpenShift クラスターにログインしている。
手順
モデルをデプロイするためのプロジェクトを作成します。
oc new-project oci-model-example
OpenShift AI アプリケーションプロジェクトの
kserve-ovms
テンプレートを使用してServingRuntime
リソースを作成し、新しいプロジェクトで OpenVINO モデルサーバーを設定します。oc process -n redhat-ods-applications -o yaml kserve-ovms | oc apply -f -
kserve-ovms
という名前のServingRuntime
が作成されていることを確認します。oc get servingruntimes
このコマンドは、次のような出力を返すはずです。
NAME DISABLED MODELTYPE CONTAINERS AGE kserve-ovms openvino_ir kserve-container 1m
モデルがプライベート OCI リポジトリーに保存されているか、パブリック OCI リポジトリーに保存されているかに応じて、
InferenceService
YAML リソースを作成します。パブリック OCI リポジトリーに保存されているモデルの場合は、次の値を含む
InferenceService
YAML ファイルを作成し、<user_name>
、<repository_name>
、<tag_name>
をお客様の環境固有の値に置き換えます。apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: sample-isvc-using-oci spec: predictor: model: runtime: kserve-ovms # Ensure this matches the name of the ServingRuntime resource modelFormat: name: onnx storageUri: oci://quay.io/<user_name>/<repository_name>:<tag_name> resources: requests: memory: 500Mi cpu: 100m # nvidia.com/gpu: "1" # Only required if you have GPUs available and the model and runtime will use it limits: memory: 4Gi cpu: 500m # nvidia.com/gpu: "1" # Only required if you have GPUs available and the model and runtime will use it
プライベート OCI リポジトリーに保存されているモデルの場合は、次の例に示すように、
spec.predictor.imagePullSecrets
フィールドにプルシークレットを指定したInferenceService
YAML ファイルを作成します。apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: sample-isvc-using-private-oci spec: predictor: model: runtime: kserve-ovms # Ensure this matches the name of the ServingRuntime resource modelFormat: name: onnx storageUri: oci://quay.io/<user_name>/<repository_name>:<tag_name> resources: requests: memory: 500Mi cpu: 100m # nvidia.com/gpu: "1" # Only required if you have GPUs available and the model and runtime will use it limits: memory: 4Gi cpu: 500m # nvidia.com/gpu: "1" # Only required if you have GPUs available and the model and runtime will use it imagePullSecrets: # Specify image pull secrets to use for fetching container images, including OCI model images - name: <pull-secret-name>
InferenceService
リソースを作成すると、KServe はstorageUri
フィールドによって参照される OCI イメージに保存されているモデルをデプロイします。
検証
デプロイメントのステータスを確認します。
oc get inferenceservice
このコマンドで、デプロイしたモデルの URL やその準備状態などの情報を含む出力が返されるはずです。
2.12.9. vLLM でのアクセラレーターの使用
OpenShift AI では、NVIDIA、AMD、および Intel Gaudi アクセラレーターがサポートされています。また、OpenShift AI には、アクセラレーターのサポートを提供するモデルサービングランタイムがプリインストールされています。
2.12.9.1. NVIDIA GPU
vLLM ServingRuntime for KServe 使用すると、NVIDIA グラフィックスプロセッシングユニット (GPU) を使用するモデルを提供できます。このランタイムを使用するには、OpenShift AI で GPU サポートを有効にする必要があります。これには、クラスターへの Node Feature Discovery Operator のインストールと設定が含まれます。詳細は、Node Feature Discovery Operator のインストール と NVIDIA GPU の有効化 を参照してください。
2.12.9.2. Intel Gaudi アクセラレーター
vLLM ServingRuntime with Gaudi accelerators support for KServe を使用すると、Intel Gaudi アクセラレーターを使用するモデルを提供できます。このランタイムを使用するには、OpenShift AI でハイブリッドプロセッシングユニット (HPU) のサポートを有効にする必要があります。これには、Intel Gaudi AI アクセラレーター Operator のインストールとアクセラレータープロファイルの設定が含まれます。詳細は、Setting up Gaudi for OpenShift および アクセラレータープロファイルの操作 を参照してください。
推奨される vLLM パラメーター、環境変数、サポートされる設定などの詳細は、vLLM with Intel® Gaudi® AI Accelerators を参照してください。
2.12.9.3. AMD GPU
vLLM ROCm ServingRuntime for KServe を使用すると、AMD GPU を使用するモデルを提供できます。このランタイムを使用するには、OpenShift AI で AMD グラフィックプロセッシングユニット (GPU) のサポートを有効にする必要があります。これには、AMD GPU Operator のインストールとアクセラレータープロファイルの設定が含まれます。詳細は、Deploying the AMD GPU operator on OpenShift および アクセラレータープロファイルの操作 を参照してください。
関連情報
2.12.10. vLLM モデルサービングランタイムのカスタマイズ
場合によっては、LLM ファミリーをデプロイするために、vLLM ServingRuntime for KServe にフラグまたは環境変数をさらに追加する必要があります。
次の手順では、vLLM モデルサービングランタイムをカスタマイズして、Llama、Granite、または Mistral モデルをデプロイする方法を説明します。
前提条件
- OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。
- Llama モデルをデプロイする場合は、meta-llama-3 モデルをオブジェクトストレージにダウンロードした。
- Granite モデルをデプロイする場合は、granite-7b-instruct または granite-20B-code-instruct モデルをオブジェクトストレージにダウンロードした。
- Mistral モデルをデプロイする場合は、mistral-7B-Instruct-v0.3 モデルをオブジェクトストレージにダウンロードした。
- vLLM ServingRuntime for KServe を有効にした。
- OpenShift AI で GPU サポートを有効にし、クラスターに Node Feature Discovery Operator をインストールして設定した。詳細は、Node Feature Discovery Operator のインストール と NVIDIA GPU の有効化 を参照してください。
手順
- シングルモデルサービングプラットフォームへのモデルのデプロイ で説明されている手順に従って、モデルをデプロイします。
- Serving runtime フィールドで、vLLM ServingRuntime for KServe を選択します。
meta-llama-3 モデルをデプロイする場合は、Configuration parameters セクションの Additional serving runtime arguments に次の引数を追加します。
–-distributed-executor-backend=mp 1 --max-model-len=6144 2
granite-7B-instruct モデルをデプロイする場合は、Configuration parameters セクションの Additional serving runtime arguments に次の引数を追加します。
--distributed-executor-backend=mp 1
- 1
- 分散モデルワーカーのバックエンドをマルチプロセッシングに設定します。
granite-20B-code-instruct モデルをデプロイする場合は、Configuration parameters セクションの Additional serving runtime arguments に次の引数を追加します。
--distributed-executor-backend=mp 1 –-tensor-parallel-size=4 2 --max-model-len=6448 3
mistral-7B-Instruct-v0.3 model モデルをデプロイする場合は、Configuration parameters セクションの Additional serving runtime arguments に次の引数を追加します。
--distributed-executor-backend=mp 1 --max-model-len=15344 2
- Deploy をクリックします。
検証
- デプロイされたモデルがプロジェクトの Models タブに表示され、ダッシュボードの Model Serving ページで Status 列にチェックマークが付いて表示されていることを確認します。
Granite モデルの場合、次のサンプルコマンドを使用して、デプロイしたモデルへの API リクエストを検証します。
curl -q -X 'POST' \ "https://<inference_endpoint_url>:443/v1/chat/completions" \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d "{ \"model\": \"<model_name>\", \"prompt\": \"<prompt>", \"max_tokens\": <max_tokens>, \"temperature\": <temperature> }"