2.11. シングルモデルサービングプラットフォームを使用したモデルのデプロイ


シングルモデルサービングプラットフォームでは、各モデルが独自のモデルサーバー上でデプロイされます。これにより、リソースの増加を必要とする大規模なモデルのデプロイ、監視、スケーリング、保守が容易になります。

重要

シングルモデルサービングプラットフォームを使用して、自己署名 SSL 証明書を使用する S3 互換ストレージからモデルをデプロイする場合は、OpenShift クラスターに認証局 (CA) バンドルをインストールする必要があります。詳細は、証明書の使用 (OpenShift AI Self-Managed) または 証明書の使用 (非接続環境での OpenShift AI Self-Managed) を参照してください。

2.11.1. シングルモデルサービングプラットフォームの有効化

KServe をインストールすると、Red Hat OpenShift AI ダッシュボードを使用して、シングルモデルサービングプラットフォームを有効にすることができます。ダッシュボードを使用して、プラットフォームのモデルサービングランタイムを有効にすることもできます。

前提条件

  • OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。
  • KServe がインストールされている。
  • spec.dashboardConfig.disableKServe ダッシュボード設定オプションが false (デフォルト) に設定されている。

    ダッシュボード設定オプションの設定の詳細は、ダッシュボードのカスタマイズを 参照してください。

手順

  1. 次のようにシングルモデルサービングプラットフォームを有効にします。

    1. 左側のメニューで、Settings Cluster settings をクリックします。
    2. Model serving platforms セクションを見つけます。
    3. プロジェクトに対してシングルモデルサービングプラットフォームを有効にするには、Single model serving platform チェックボックスをオンにします。
    4. Standard (No additional dependencies) または Advanced (Serverless and Service Mesh) のデプロイメントモードを選択します。

      これらの展開モードオプションの詳細は、KServe デプロイメントモードについてを 参照してください。

    5. Save changes をクリックします。
  2. 次のように、シングルモデルサービングプラットフォーム用のプリインストールされたランタイムを有効にします。

    1. OpenShift AI ダッシュボードの左側のメニューで、Settings Serving runtimes をクリックします。

      Serving runtimes ページには、プリインストールされたランタイムと追加したカスタムランタイムが表示されます。

      プリインストールされているランタイムの詳細は、サポートされているランタイムを 参照してください。

    2. 使用するランタイムを Enabled に設定します。

      これで、シングルモデルサービングプラットフォームをモデルのデプロイに使用できるようになりました。

モデルサービングランタイムは、特定のモデルフレームワーク群のサポートと、それらのフレームワークでサポートされるモデル形式のサポートを追加します。OpenShift AI に含まれている プリインストールされたランタイム を使用できます。デフォルトのランタイムがニーズを満たしていない場合は、独自のカスタムランタイムを追加することもできます。

管理者は、OpenShift AI インターフェイスを使用して、カスタムのモデルサービングランタイムを追加して有効にすることができます。その場合は、シングルモデルサービングプラットフォームにモデルをデプロイする際に、カスタムランタイムを選択できます。

注記

Red Hat はカスタムランタイムのサポートを提供しません。追加したカスタムランタイムを使用するライセンスがあることを確認し、お客様の責任で正しく設定および保守するようにしてください。

前提条件

  • OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。
  • カスタムランタイムをビルドし、イメージを Quay などのコンテナーイメージリポジトリーに追加している。

手順

  1. OpenShift AI ダッシュボードから、Settings Serving runtimes をクリックします。

    Serving runtimes ページが開き、すでにインストールされ有効になっているモデルサービングランタイムが表示されます。

  2. カスタムランタイムを追加するには、次のオプションのいずれかを選択します。

    • 既存のランタイム (たとえば、vLLM NVIDIA GPU ServingRuntime for KServe) から開始するには、既存のランタイムの横にあるアクションメニュー (⋮) をクリックし、Duplicate をクリックします。
    • 新しいカスタムランタイムを追加するには、Add serving runtime をクリックします。
  3. Select the model serving platforms this runtime supports リストで、Single-model serving platform を選択します。
  4. Select the API protocol this runtime supports リストで、REST または gRPC を選択します。
  5. オプション: (既存のランタイムを複製するのではなく) 新しいランタイムを開始した場合は、次のオプションのいずれかを選択してコードを追加します。

    • YAML ファイルをアップロードする

      1. Upload files をクリックします。
      2. ファイルブラウザーで、コンピューター上の YAML ファイルを選択します。

        埋め込み YAML エディターが開き、アップロードしたファイルの内容が表示されます。

    • エディターに YAML コードを直接入力する

      1. Start from scratch をクリックします。
      2. 埋め込みエディターに YAML コードを直接入力または貼り付けます。
    注記

    多くの場合、カスタムランタイムを作成するには、ServingRuntime 仕様の env セクションに新しいパラメーターまたはカスタムパラメーターを追加する必要があります。

  6. Add をクリックします。

    Serving runtimes ページが開き、インストールされているランタイムの更新されたリストが表示されます。追加したカスタムランタイムが自動的に有効になることを確認します。ランタイム作成時に指定した API プロトコルが表示されます。

  7. オプション: カスタムランタイムを編集するには、アクションメニュー (⋮) をクリックし、Edit を選択します。

検証

  • 追加したカスタムモデルサービングランタイムは、Serving runtimes ページに有効な状態で表示されます。

プリインストールされたカスタムのモデルサービングランタイムに加えて、NVIDIA Triton Inference Server などの Red Hat でテストおよび検証されたモデルサービングランタイムを使用して要件に対応することもできます。Red Hat のテスト済みおよび検証済みのランタイムの詳細は、Red Hat OpenShift AI のテスト済みおよび検証済みのランタイム を参照してください。

Red Hat OpenShift AI ダッシュボードを使用して、シングルモデルサービングプラットフォーム用の NVIDIA Triton Inference Server または Seldon MLServer ランタイムを追加して有効にできます。その場合は、シングルモデルサービングプラットフォームにモデルをデプロイする際に、ランタイムを選択できます。

前提条件

  • OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。

手順

  1. OpenShift AI ダッシュボードから、Settings Serving runtimes をクリックします。

    Serving runtimes ページが開き、すでにインストールされ有効になっているモデルサービングランタイムが表示されます。

  2. Add serving runtime をクリックします。
  3. Select the model serving platforms this runtime supports リストで、Single-model serving platform を選択します。
  4. Select the API protocol this runtime supports リストで、REST または gRPC を選択します。
  5. Start from scratch をクリックします。
  6. NVIDIA Triton Inference Server ランタイムを追加するには、次の手順に従います。

    1. 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"
      Copy to Clipboard Toggle word wrap
    2. 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
      Copy to Clipboard Toggle word wrap
  7. Seldon MLServer ランタイムを追加するには、次の手順に従います。

    1. REST API プロトコルを選択した場合は、埋め込みエディターに次の YAML コードを直接入力または貼り付けます。

      apiVersion: serving.kserve.io/v1alpha1
      kind: ServingRuntime
      metadata:
        name: mlserver-kserve-rest
        labels:
          opendatahub.io/dashboard: "true"
      spec:
        annotations:
          openshift.io/display-name: Seldon MLServer
          prometheus.kserve.io/port: "8080"
          prometheus.kserve.io/path: /metrics
        containers:
          - name: kserve-container
            image: 'docker.io/seldonio/mlserver@sha256:07890828601515d48c0fb73842aaf197cbcf245a5c855c789e890282b15ce390'
            env:
              - name: MLSERVER_HTTP_PORT
                value: "8080"
              - name: MLSERVER_GRPC_PORT
                value: "9000"
              - name: MODELS_DIR
                value: /mnt/models
            resources:
              requests:
                cpu: "1"
                memory: 2Gi
              limits:
                cpu: "1"
                memory: 2Gi
            ports:
              - containerPort: 8080
                protocol: TCP
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                  - ALL
              privileged: false
              runAsNonRoot: true
        protocolVersions:
          - v2
        multiModel: false
        supportedModelFormats:
          - name: sklearn
            version: "0"
            autoSelect: true
            priority: 2
          - name: sklearn
            version: "1"
            autoSelect: true
            priority: 2
          - name: xgboost
            version: "1"
            autoSelect: true
            priority: 2
          - name: xgboost
            version: "2"
            autoSelect: true
            priority: 2
          - name: lightgbm
            version: "3"
            autoSelect: true
            priority: 2
          - name: lightgbm
            version: "4"
            autoSelect: true
            priority: 2
          - name: mlflow
            version: "1"
            autoSelect: true
            priority: 1
          - name: mlflow
            version: "2"
            autoSelect: true
            priority: 1
          - name: catboost
            version: "1"
            autoSelect: true
            priority: 1
          - name: huggingface
            version: "1"
            autoSelect: true
            priority: 1
      Copy to Clipboard Toggle word wrap
    2. gRPC API プロトコルを選択した場合は、埋め込みエディターで次の YAML コードを直接入力または貼り付けます。

      apiVersion: serving.kserve.io/v1alpha1
      kind: ServingRuntime
      metadata:
        name: mlserver-kserve-grpc
        labels:
          opendatahub.io/dashboard: "true"
      spec:
        annotations:
          openshift.io/display-name: Seldon MLServer
          prometheus.kserve.io/port: "8080"
          prometheus.kserve.io/path: /metrics
        containers:
          - name: kserve-container
            image: 'docker.io/seldonio/mlserver@sha256:07890828601515d48c0fb73842aaf197cbcf245a5c855c789e890282b15ce390'
            env:
              - name: MLSERVER_HTTP_PORT
                value: "8080"
              - name: MLSERVER_GRPC_PORT
                value: "9000"
              - name: MODELS_DIR
                value: /mnt/models
            resources:
              requests:
                cpu: "1"
                memory: 2Gi
              limits:
                cpu: "1"
                memory: 2Gi
            ports:
              - containerPort: 9000
                name: h2c
                protocol: TCP
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                  - ALL
              privileged: false
              runAsNonRoot: true
        protocolVersions:
          - v2
        multiModel: false
        supportedModelFormats:
          - name: sklearn
            version: "0"
            autoSelect: true
            priority: 2
          - name: sklearn
            version: "1"
            autoSelect: true
            priority: 2
          - name: xgboost
            version: "1"
            autoSelect: true
            priority: 2
          - name: xgboost
            version: "2"
            autoSelect: true
            priority: 2
          - name: lightgbm
            version: "3"
            autoSelect: true
            priority: 2
          - name: lightgbm
            version: "4"
            autoSelect: true
            priority: 2
          - name: mlflow
            version: "1"
            autoSelect: true
            priority: 1
          - name: mlflow
            version: "2"
            autoSelect: true
            priority: 1
          - name: catboost
            version: "1"
            autoSelect: true
            priority: 1
          - name: huggingface
            version: "1"
            autoSelect: true
            priority: 1
      Copy to Clipboard Toggle word wrap
  8. metadata.name フィールドで、追加するランタイムの値が、すでに追加されているランタイムと同じでないことを確認します。
  9. オプション: 追加するランタイムのカスタム表示名を使用するには、次の例に示すように、metadata.annotations.openshift.io/display-name フィールドを追加し、値を指定します。

    apiVersion: serving.kserve.io/v1alpha1
    kind: ServingRuntime
    metadata:
      name: kserve-triton
      annotations:
        openshift.io/display-name: Triton ServingRuntime
    Copy to Clipboard Toggle word wrap
    注記

    ランタイムのカスタム表示名を設定しないと、OpenShift AI には metadata.name フィールドの値が表示されます。

  10. Create をクリックします。

    Serving runtimes ページが開き、インストールされているランタイムの更新されたリストが表示されます。追加したランタイムが自動的に有効になっていることを確認します。ランタイム作成時に指定した API プロトコルが表示されます。

  11. オプション: ランタイムを編集するには、アクションメニュー (⋮) をクリックし、Edit を選択します。

検証

  • 追加したモデルサービスランタイムは、Serving runtimes ページに有効な状態で表示されます。

2.11.4. シングルモデルサービングプラットフォームへのモデルのデプロイ

シングルモデルサービングプラットフォームを有効にすると、プリインストールまたはカスタムのモデルサービングランタイムを有効にして、モデルをプラットフォームへデプロイできます。

プリインストールされたモデルサービングランタイムを使用すると、ランタイムを自分で変更したり定義したりすることなく、モデルの提供を開始できます。カスタムランタイムの追加については、単一モデルサービングプラットフォーム用のカスタムモデルサービングランタイムの追加を 参照してください。

前提条件

  • Red Hat OpenShift AI にログインしている。
  • KServe がインストールされている。
  • シングルモデルサービングプラットフォームを有効にした。
  • (advanced デプロイメントのみ) デプロイされたモデルのトークン認証と外部モデルルートを有効にするために、Authorino を認可プロバイダーとして追加した。詳細は、単一モデルサービングプラットフォームの認可プロバイダーの追加を 参照してください。
  • データサイエンスプロジェクトを作成した。
  • S3 互換オブジェクトストレージにアクセスできる。
  • デプロイするモデルについて、S3 互換のオブジェクトストレージバケットまたは Open Container Initiative (OCI) コンテナー内の関連付けられた URI を把握している。
  • 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 オペレータのインストール および NVIDIA GPU の有効化を 参照してください。
  • IBM Z および IBM Power で VLLM ランタイムを使用するには、KServe 用の vLLM CPU ServingRuntime を使用します。IBM Z および IBM Power アーキテクチャーでは GPU アクセラレーターは使用できません。詳細は、Red Hat OpenShift Multi Architecture Component Availability Matrix を参照してください。
  • vLLM Intel Gaudi Accelerator ServingRuntime for KServe ランタイムを使用するために、OpenShift AI でハイブリッドプロセッシングユニット (HPU) のサポートを有効にした。これには、Intel Gaudi AI アクセラレーター Operator のインストールとハードウェアプロファイルの設定が含まれます。詳細は、AMD ドキュメントの OpenShift 用 Gaudi のセットアップ および ハードウェアプロファイルの操作 を参照してください。
  • vLLM AMD GPU ServingRuntime for KServe ランタイムを使用するために、OpenShift AI で AMD グラフィックプロセッシングユニット (GPU) のサポートを有効にした。これには、AMD GPU Operator のインストールとハードウェアプロファイルの設定が含まれます。詳細は、OpenShift への AMD GPU オペレーターのデプロイ および ハードウェアプロファイルの操作 を参照してください。

    注記

    OpenShift AI 2.23 では、Red Hat はモデルの提供に NVIDIA GPU、Intel Gaudi、および AMD GPU アクセラレーターをサポートしています。

  • RHEL AI モデルをデプロイするために、以下を実行した。

    • vLLM NVIDIA GPU ServingRuntime for KServe ランタイムを有効にした。
    • Red Hat コンテナーレジストリーからモデルをダウンロードし、S3 互換オブジェクトストレージにアップロードした。

手順

  1. 左側のメニューで、Data science projects をクリックします。

    Data science projects のページが開きます。

  2. モデルをデプロイするプロジェクトの名前をクリックします。

    プロジェクトの詳細ページが開きます。

  3. Models タブをクリックします。
  4. 次のいずれかの操作を実行します。

    • ​​Single-model serving platform タイルが表示された場合は、タイル上の Deploy model をクリックします。
    • タイルが表示されない場合は、Deploy model ボタンをクリックします。

    Deploy model ダイアログが開きます。

  5. Model deployment name フィールドに、デプロイするモデルの一意の名前を入力します。
  6. Serving runtime フィールドで、有効なランタイムを選択します。プロジェクトスコープのランタイムが存在する場合、Serving runtime リストには、グローバルランタイムとプロジェクトスコープのランタイムを区別するためのサブ見出しが含まれます。
  7. Model framework (name - version) リストから値を選択します。
  8. Deployment mode リストから、standard または advanced を選択します。デプロイメントモードの詳細は、KServe デプロイメントモードについてを 参照してください。
  9. Number of model server replicas to deploy フィールドに値を指定します。
  10. 次のオプションは、ハードウェアプロファイルを作成した場合にのみ使用できます。

    1. Hardware profile リストから、ハードウェアプロファイルを選択します。プロジェクトスコープのハードウェアプロファイルが存在する場合、Hardware profile リストには、グローバルハードウェアプロファイルとプロジェクトスコープのハードウェアプロファイルを区別するためのサブ見出しが含まれます。

      重要

      デフォルトでは、ハードウェアプロファイルはダッシュボードのナビゲーションメニューとユーザーインターフェイスに表示されませんが、アクセラレータープロファイルは表示されます。非推奨となったアクセラレータープロファイル機能に関連付けられたユーザーインターフェイスコンポーネントは、引き続き表示されます。ハードウェアプロファイルを有効にすると、Accelerator profiles リストの代わりに Hardware profiles リストが表示されます。ダッシュボードのナビゲーションメニューの Settings Hardware profiles オプションと、ハードウェアプロファイルに関連付けられたユーザーインターフェイスコンポーネントを表示するには、OpenShift の OdhDashboardConfig カスタムリソース (CR) で、disableHardwareProfiles 値を false に設定します。ダッシュボード設定オプションの設定の詳細は、ダッシュボードのカスタマイズを 参照してください。

    2. オプション: これらのデフォルト値を変更するには、Customize resource requests and limit をクリックし、新しい最小値 (要求) と最大値 (制限) を入力します。ハードウェアプロファイルは、コンテナーに割り当てられる CPU の数とメモリーの量を指定し、両方に対して保証される最小値 (要求) と最大値 (制限) を設定します。
  11. オプション: Model route セクションで、Make deployed models available through an external route チェックボックスをオンにして、デプロイされたモデルを外部クライアントが利用できるようにします。
  12. デプロイされたモデルに対する推論リクエストにトークン認証を要求するには、次のアクションを実行します。

    1. Require token authentication を選択します。
    2. Service account name フィールドに、トークンが生成されるサービスアカウント名を入力します。
    3. 追加のサービスアカウントを追加するには、Add a service account をクリックし、別のサービスアカウント名を入力します。
  13. モデルの場所を指定するには、次の一連のアクションのいずれかを実行します。

    • 既存の接続を使用します

      1. Existing connection を選択します。
      2. Name リストから、以前に定義した接続を選択します。

        1. S3 互換オブジェクトストレージの場合: Path フィールドに、指定したデータソース内のモデルが含まれるフォルダーパスを入力します。

          重要

          OpenVINO Model Server ランタイムには、モデルパスの指定方法に関する特定の要件があります。詳細は、OpenShift AI リリースノートの既知の問題 RHOAIENG-3025 を 参照してください。

        2. Open Container Image 接続の場合: OCI storage location フィールドに、モデルが配置されているモデル URI を入力します。

          注記

          既存の S3、URI、または OCI データ接続を使用して登録済みのモデルバージョンをデプロイする場合は、接続に関する詳細の一部が自動入力されることがあります。これは、データ接続の種類と、データサイエンスプロジェクトで使用できる一致する接続の数によって異なります。たとえば、一致する接続が 1 つだけ存在する場合、パス、URI、エンドポイント、モデル URI、バケット、リージョンなどのフィールドが自動的に入力されることがあります。一致する接続には Recommended というラベルが付けられます。

    • 新しい接続を使用します

      1. モデルがアクセスできる新しい接続を定義するには、New connection を選択します。

        1. Add connection モーダルで、Connection type を選択します。OCI-compliant registryS3 compatible object storageURI オプションは、事前にインストールされた接続タイプです。OpenShift AI 管理者が追加した場合は、追加のオプションが利用できる場合があります。

          選択した接続タイプに固有のフィールドを含む Add connection フォームが開きます。

      2. 接続の詳細フィールドに入力します。

        重要

        接続タイプが S3 互換オブジェクトストレージの場合は、データファイルが含まれるフォルダーパスを指定する必要があります。OpenVINO Model Server ランタイムには、モデルパスの指定方法に関する特定の要件があります。詳細は、OpenShift AI リリースノートの既知の問題 RHOAIENG-3025 を 参照してください。

  14. (オプション) Configuration parameters セクションでランタイムパラメーターをカスタマイズします。

    1. Additional serving runtime arguments の値を変更して、デプロイされるモデルの動作を定義します。
    2. モデルの環境内の変数を定義するには、Additional environment variables の値を変更します。

      Configuration parameters セクションに、事前定義されたサービングランタイムパラメーターが表示されます (利用可能な場合)。

      注記

      ポートまたはモデルサービングランタイムの引数は変更しないでください。これらの引数には、特定の値を設定する必要があるためです。これらのパラメーターを上書きすると、デプロイが失敗する可能性があります。

  15. Deploy をクリックします。

検証

  • デプロイされたモデルがプロジェクトの Models タブに表示され、ダッシュボードの Model deployments ページで Status 列にチェックマークが付いて表示されていることを確認します。

2.11.5. デプロイされたモデルの停止と起動

クラスターリソースを消費したり再デプロイメントをトリガーしたりせずに、デプロイされたモデルを停止して編集を実行できます。モデルを停止すると、関連付けられているすべてのオブジェクトが終了し、モデルは推論リクエストに使用できなくなります。モデルを再度起動すると、保留中の設定の変更が適用されます。

前提条件

  • Red Hat OpenShift AI にログインしている。
  • データサイエンスプロジェクトにモデルをデプロイしている。

手順

  1. OpenShift AI ダッシュボードから、モデル > モデルのデプロイメント をクリックします。
  2. 停止または開始するモデルを見つけます。
  3. モデルの ステータス 列で、[停止] または [開始] を クリックします。

    モデルを停止すると、Pod が終了するためステータスが Stopping に変わり、その後 Stopped に変わります。モデルを開始すると、新しい Pod が作成され、ステータスが 開始中 に変わり、その後 実行中 に変わります。

2.11.6. 複数の 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 のインストール を参照してください。
  • Node Feature Discovery Operator、NVIDIA GPU Operator など、お使いの GPU タイプ用の Operator を有効にした。アクセラレーターの有効化の詳細は、アクセラレーターの有効化を 参照してください。

    • NVIDIA GPU (nvidia.com/gpu) を使用している。
    • ServingRuntime または InferenceService のいずれかを使用して GPU タイプを指定した。ServingRuntime で指定された GPU タイプが InferenceService で設定されたものと異なる場合、両方の GPU タイプがリソースに割り当てられ、エラーが発生する可能性があります。
  • クラスターで KServe を有効にした。
  • 環境にヘッド Pod が 1 つだけある。InferenceServicemin_replicas または max_replicas 設定を使用してレプリカ数を調整しないでください。追加のヘッド Pod を作成すると、それらが Ray クラスターから除外される可能性があります。
  • PVC からデプロイする場合: 永続ボリューム要求 (PVC) がセットアップされ、ReadWriteMany (RWX) アクセスモード用に設定されている。
  • OCI コンテナーイメージからデプロイする場合:

    • モデルを OCI コンテナーイメージに保存した。
    • モデルがプライベート OCI リポジトリーに保存されている場合は、イメージプルシークレットを設定した。

手順

  1. ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
    Copy to Clipboard Toggle word wrap
  2. モデルをデプロイするための namespace を選択または作成します。たとえば、kserve-demo namespace を作成するには、次のコマンドを実行します。

    oc new-project kserve-demo
    Copy to Clipboard Toggle word wrap
  3. (PVC からモデルをデプロイする場合のみ) モデルをデプロイする namespace に、モデルストレージ用の PVC を作成します。Filesystem volumeMode を使用してストレージクラスを作成し、このストレージクラスを PVC に使用します。ストレージサイズは、ディスク上のモデルファイルのサイズよりも大きくする必要があります。以下に例を示します。

    注記

    PVC がすでに設定済みの場合、または OCI コンテナーイメージからモデルをデプロイする場合は、このステップをスキップできます。

    kubectl apply -f -
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: granite-8b-code-base-pvc
    spec:
      accessModes:
        - ReadWriteMany
      volumeMode: Filesystem
      resources:
        requests:
          storage: <model size>
      storageClassName: <storage class>
    Copy to Clipboard Toggle word wrap
    1. 作成した PVC にモデルをダウンロードするための Pod を作成します。バケット名、モデルパス、および認証情報を使用してサンプル YAML を更新します。

      apiVersion: v1
      kind: Pod
      metadata:
        name: download-granite-8b-code
        labels:
          name: download-granite-8b-code
      spec:
        volumes:
          - name: model-volume
            persistentVolumeClaim:
              claimName: granite-8b-code-base-pvc
        restartPolicy: Never
        initContainers:
          - name: fix-volume-permissions
            image: quay.io/quay/busybox@sha256:92f3298bf80a1ba949140d77987f5de081f010337880cd771f7e7fc928f8c74d
            command: ["sh"]
            args: ["-c", "mkdir -p /mnt/models/$(MODEL_PATH) && chmod -R 777 /mnt/models"] 
      1
      
            volumeMounts:
              - mountPath: "/mnt/models/"
                name: model-volume
            env:
              - name: MODEL_PATH
                value: <model path> 
      2
      
        containers:
          - resources:
              requests:
                memory: 40Gi
            name: download-model
            imagePullPolicy: IfNotPresent
            image: quay.io/opendatahub/kserve-storage-initializer:v0.14 
      3
      
            args:
              - 's3://$(BUCKET_NAME)/$(MODEL_PATH)/'
              - /mnt/models/$(MODEL_PATH)
            env:
              - name: AWS_ACCESS_KEY_ID
                value: <id> 
      4
      
              - name: AWS_SECRET_ACCESS_KEY
                value: <secret> 
      5
      
              - name: BUCKET_NAME
                value: <bucket_name> 
      6
      
              - name: MODEL_PATH
                value: <model path> 
      7
      
              - name: S3_USE_HTTPS
                value: "1"
              - name: AWS_ENDPOINT_URL
                value: <AWS endpoint> 
      8
      
              - name: awsAnonymousCredential
                value: 'false'
              - name: AWS_DEFAULT_REGION
                value: <region> 
      9
      
              - name: S3_VERIFY_SSL
                value: 'true' 
      10
      
            volumeMounts:
              - mountPath: "/mnt/models/"
                name: model-volume
      Copy to Clipboard Toggle word wrap
      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_SSLfalse に変更します。
  4. プロジェクト namespace に vllm-multinode-runtime カスタムランタイムを作成します。

    oc process vllm-multinode-runtime-template -n redhat-ods-applications|oc apply -n kserve-demo -f -
    Copy to Clipboard Toggle word wrap
  5. 次の InferenceService 設定を使用してモデルをデプロイします。

    apiVersion: serving.kserve.io/v1beta1
    kind: InferenceService
    metadata:
      annotations:
        serving.kserve.io/deploymentMode: RawDeployment
        serving.kserve.io/autoscalerClass: external
      name: <inference service name>
    spec:
      predictor:
        model:
          modelFormat:
            name: vLLM
          runtime: vllm-multinode-runtime
          storageUri: <storage_uri_path> 
    1
    
        workerSpec: {} 
    2
    Copy to Clipboard Toggle word wrap
    1
    デプロイ方法に応じてモデルへのパスを指定します。
    • PVC の場合: pvc://<pvc_name>/<model_path>
    • OCI コンテナーイメージの場合: oci://<registry_host>/<org_or_username>/<repository_name><tag_or_digest>
    2
    InferenceService には次の設定を追加できます。
    • workerSpec.tensorParallelSize: ノードごとに使用される GPU の数を決定します。ヘッドノードとワーカーノードのデプロイメントリソースの GPU タイプ数は、どちらも自動的に更新されます。workerSpec.tensorParallelSize の値は、必ず 1 以上にしてください。
    • workerSpec.pipelineParallelSize: デプロイメントでモデルのバランスをとるために使用されるノードの数を決定します。この変数は、ヘッドノードとワーカーノードの両方を含むノードの合計数を表します。workerSpec.pipelineParallelSize の値は、必ず 2 以上にしてください。実稼働環境では、この値は変更しないでください。

      注記

      お使いの環境およびモデルサイズに応じて、追加の引数を指定する必要がある場合があります。

  6. InferenceService 設定を適用してモデルをデプロイします。

    oc apply -f <inference-service-file.yaml>
    Copy to Clipboard Toggle word wrap

検証

複数の GPU ノードにモデルをデプロイするように環境を設定したことを確認するには、GPU リソースのステータス、InferenceService のステータス、Ray クラスターのステータスを確認し、モデルにリクエストを送信します。

  • GPU リソースのステータスを確認します。

    • ヘッドノードとワーカーノードの Pod 名を取得します。

      # Get pod name
      podName=$(oc get pod -l app=isvc.granite-8b-code-base-pvc-predictor --no-headers|cut -d' ' -f1)
      workerPodName=$(oc get pod -l app=isvc.granite-8b-code-base-pvc-predictor-worker --no-headers|cut -d' ' -f1)
      
      oc wait --for=condition=ready pod/${podName} --timeout=300s
      # Check the GPU memory size for both the head and worker pods:
      echo "### HEAD NODE GPU Memory Size"
      kubectl exec $podName -- nvidia-smi
      echo "### Worker NODE GPU Memory Size"
      kubectl exec $workerPodName -- nvidia-smi
      Copy to Clipboard Toggle word wrap

      応答の例

      +-----------------------------------------------------------------------------------------+
      | NVIDIA-SMI 550.90.07              Driver Version: 550.90.07      CUDA Version: 12.4     |
      |-----------------------------------------+------------------------+----------------------+
      | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
      | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
      |                                         |                        |               MIG M. |
      |=========================================+========================+======================|
      |   0  NVIDIA A10G                    On  |   00000000:00:1E.0 Off |                    0 |
      |  0%   33C    P0             71W /  300W |19031MiB /  23028MiB <1>|      0%      Default |
      |                                         |                        |                  N/A |
      +-----------------------------------------+------------------------+----------------------+
               ...
      +-----------------------------------------------------------------------------------------+
      | NVIDIA-SMI 550.90.07              Driver Version: 550.90.07      CUDA Version: 12.4     |
      |-----------------------------------------+------------------------+----------------------+
      | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
      | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
      |                                         |                        |               MIG M. |
      |=========================================+========================+======================|
      |   0  NVIDIA A10G                    On  |   00000000:00:1E.0 Off |                    0 |
      |  0%   30C    P0             69W /  300W |18959MiB /  23028MiB <2>|      0%      Default |
      |                                         |                        |                  N/A |
      +-----------------------------------------+------------------------+----------------------+
      Copy to Clipboard Toggle word wrap

      <1> と <2> の値をチェックして、モデルが適切にロードされたことを確認します。モデルがロードされなかった場合、これらのフィールドの値は 0MiB になります。

  • 次のコマンドを使用して、InferenceService のステータスを確認します。注記: テクノロジープレビューでは、推論にポート転送のみを使用できます。

    oc wait --for=condition=ready pod/${podName} -n $DEMO_NAMESPACE --timeout=300s
    export MODEL_NAME=granite-8b-code-base-pvc
    Copy to Clipboard Toggle word wrap

    応答の例

       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 Toggle word wrap

  • モデルが推論に使用できることを確認するために、モデルにリクエストを送信します。

    oc wait --for=condition=ready pod/${podName} -n vllm-multinode --timeout=300s
    
    oc port-forward $podName 8080:8080 &
    
    curl http://localhost:8080/v1/completions \
           -H "Content-Type: application/json" \
           -d "{
                'model': "$MODEL_NAME",
                'prompt': 'At what temperature does Nitrogen boil?',
                'max_tokens': 100,
                'temperature': 0
            }"
    Copy to Clipboard Toggle word wrap

2.11.7. KServe のタイムアウトの設定

大規模なモデルをデプロイする場合、または KServe でノードの自動スケーリングを使用する場合、モデルがデプロイされる前に操作がタイムアウトすることがあります。KNative Serving が設定するデフォルトの progress-deadline が 10 分であるためです。

KNative Serving を使用した Pod のデプロイに 10 分以上かかる場合、Pod が自動的に失敗とマークされる可能性があります。これは、S3 互換のオブジェクトストレージからプルするのに 10 分以上かかる大規模なモデルをデプロイしている場合、またはノードの自動スケーリングを使用して GPU ノードの消費を削減している場合に発生する可能性があります。

この問題を解決するには、アプリケーションに合わせて KServe の InferenceService でカスタムの progress-deadline を設定できます。

前提条件

  • OpenShift クラスターの namespace 編集アクセス権がある。

手順

  1. OpenShift コンソールにクラスター管理者としてログインします。
  2. モデルをデプロイしたプロジェクトを選択します。
  3. Administrator パースペクティブで、Home Search をクリックします。
  4. Resources ドロップダウンメニューから、InferenceService を検索します。
  5. 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
    Copy to Clipboard Toggle word wrap
    注記

    必ず spec.predictor.annotations レベルで progress-deadline を設定して、KServe の InferenceServiceprogress-deadline を KNative Service オブジェクトにコピーできるようにしてください。

2.11.8. デプロイされたモデルサービングランタイムのパラメーターのカスタマイズ

特定のモデルをデプロイしたり、既存のモデルのデプロイメントを拡張したりするには、デフォルトのパラメーター以外に追加のパラメーターが必要になる場合があります。このような場合、デプロイメントのニーズに合わせて既存のランタイムのパラメーターを変更できます。

注記

ランタイムのパラメーターのカスタマイズは、選択したモデルのデプロイメントにのみ影響します。

前提条件

  • OpenShift AI 管理者権限を持つユーザーとして OpenShift AI にログインしている。
  • シングルモデルサービングプラットフォームにモデルをデプロイした。

手順

  1. OpenShift AI ダッシュボードで、Models Model deployments をクリックします。

    Model deployments ページが開きます。

  2. カスタマイズするモデルの名前の横に表示される Stop をクリックします。
  3. アクションメニュー (⋮) をクリックし、Edit を選択します。

    Configuration parameters セクションに、事前定義されたサービングランタイムパラメーターが表示されます (利用可能な場合)。

  4. Configuration parameters セクションでランタイムパラメーターをカスタマイズします。

    1. Additional serving runtime arguments の値を変更して、デプロイされるモデルの動作を定義します。
    2. モデルの環境内の変数を定義するには、Additional environment variables の値を変更します。

      注記

      ポートまたはモデルサービングランタイムの引数は変更しないでください。これらの引数には、特定の値を設定する必要があるためです。これらのパラメーターを上書きすると、デプロイが失敗する可能性があります。

  5. ランタイムパラメーターのカスタマイズが完了したら、Redeploy をクリックして保存します。
  6. Start をクリックして、変更を加えたモデルをデプロイします。

検証

  • デプロイされたモデルがプロジェクトの Models タブに表示され、ダッシュボードの Model deployments ページで Status 列にチェックマークが付いて表示されていることを確認します。
  • 次のいずれかの方法で、設定した引数と変数が spec.predictor.model.argsspec.predictor.model.env に表示されることを確認します。

    • OpenShift コンソールから InferenceService YAML を確認します。
    • OpenShift CLI で次のコマンドを使用します。

      oc get -o json inferenceservice <inferenceservicename/modelname> -n <projectname>
      Copy to Clipboard Toggle word wrap

2.11.9. カスタマイズ可能なモデルサービングランタイムのパラメーター

デプロイメントのニーズに合わせて、既存のモデルサービングランタイムのパラメーターを変更できます。

サポートされている各サービングランタイムのパラメーターの詳細は、次の表を参照してください。

Expand
サービングランタイムリソース

Caikit Text Generation Inference Server (Caikit-TGIS) ServingRuntime for KServe

Caikit NLP: Configuration
TGIS: Model configuration

Caikit Standalone ServingRuntime for KServe

Caikit NLP: Configuration

NVIDIA Triton Inference Server

NVIDIA Triton Inference Server: Model Parameters

OpenVINO Model Server

OpenVINO Model Server Features: Dynamic Input Parameters

Seldon MLServer

MLServer Documentation: Model Settings

[非推奨] Text Generation Inference Server (TGIS) Standalone ServingRuntime for KServe

TGIS: Model configuration

vLLM NVIDIA GPU ServingRuntime for KServe

vLLM: Engine Arguments
OpenAI-Compatible Server

vLLM AMD GPU ServingRuntime for KServe

vLLM: Engine Arguments
OpenAI-Compatible Server

vLLM Intel Gaudi Accelerator ServingRuntime for KServe

vLLM: Engine Arguments
OpenAI-Compatible Server

2.11.10. モデル保存用の OCI コンテナーの使用

モデルを S3 バケットまたは URI に保存する代わりに、モデルを Open Container Initiative (OCI) コンテナーにアップロードできます。OCI コンテナーからモデルをデプロイすることは、KServe では modelcar とも呼ばれます。

モデルの保存に OCI コンテナーを使用すると、次のことが可能になります。

  • 同じモデルを複数回ダウンロードすることを回避し、起動時間を短縮します。
  • ローカルにダウンロードされるモデルの数を減らすことで、ディスク領域の使用量を削減します。
  • 事前に取得したイメージを許可することで、モデルのパフォーマンスが向上します。

モデルの保存に OCI コンテナーを使用する場合、次のタスクを実行します。

2.11.10.1. OCI イメージへのモデルの保存

モデルを OCI イメージに保存できます。次の手順では、MobileNet v2-7 モデルを ONNX 形式で保存する例を使用します。

前提条件

  • ONNX 形式のモデルがある。この手順の例では、ONNX 形式の MobileNet v2-7 モデルを使用します。
  • Podman ツールがインストールされている。

手順

  1. ローカルマシンのターミナルウィンドウで、OCI イメージの作成に必要なモデルファイルとサポートファイルの両方を保存するための一時ディレクトリーを作成します。

    cd $(mktemp -d)
    Copy to Clipboard Toggle word wrap
  2. 一時ディレクトリー内に models フォルダーを作成します。

    mkdir -p models/1
    Copy to Clipboard Toggle word wrap
    注記

    この例のコマンドでは、サブディレクトリー 1 を指定します。これは、OpenVINO がモデルのバージョン管理に番号付きのサブディレクトリーを必要とするためです。OpenVINO を使用していない場合は、OCI コンテナーイメージを使用するために 1 サブディレクトリーを作成する必要はありません。

  3. モデルとサポートファイルをダウンロードします。

    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/
    Copy to Clipboard Toggle word wrap
  4. tree コマンドを使用して、モデルファイルが期待どおりにディレクトリー構造内に配置されていることを確認します。

    tree
    Copy to Clipboard Toggle word wrap

    tree コマンドで、次の例のようなディレクトリー構造が返されるはずです。

    .
    ├── Containerfile
    └── models
        └── 1
            └── mobilenetv2-7.onnx
    Copy to Clipboard Toggle word wrap
  5. 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
    Copy to Clipboard Toggle word wrap
  6. 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>
    Copy to Clipboard Toggle word wrap

2.11.10.2. CLI を使用して OCI イメージに保存されたモデルをデプロイする

OCI イメージに保存されているモデルをコマンドラインインターフェイスからデプロイできます。

次の手順では、OpenVINO モデルサーバー上の OCI イメージに保存されている ONNX 形式の MobileNet v2-7 モデルをデプロイする例を使用します。

注記

KServe では、デフォルトでモデルはクラスター外部に公開され、認証によって保護されません。

前提条件

手順

  1. モデルをデプロイするためのプロジェクトを作成します。

    oc new-project oci-model-example
    Copy to Clipboard Toggle word wrap
  2. OpenShift AI アプリケーションプロジェクトの kserve-ovms テンプレートを使用して ServingRuntime リソースを作成し、新しいプロジェクトで OpenVINO モデルサーバーを設定します。

    oc process -n redhat-ods-applications -o yaml kserve-ovms | oc apply -f -
    Copy to Clipboard Toggle word wrap
  3. kserve-ovms という名前の ServingRuntime が作成されていることを確認します。

    oc get servingruntimes
    Copy to Clipboard Toggle word wrap

    このコマンドは、次のような出力を返すはずです。

    NAME          DISABLED   MODELTYPE     CONTAINERS         AGE
    kserve-ovms              openvino_ir   kserve-container   1m
    Copy to Clipboard Toggle word wrap
  4. モデルがプライベート 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
      Copy to Clipboard Toggle word wrap
    • プライベート 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>
      Copy to Clipboard Toggle word wrap

      InferenceService リソースを作成すると、KServe は storageUri フィールドによって参照される OCI イメージに保存されているモデルをデプロイします。

検証

デプロイメントのステータスを確認します。

oc get inferenceservice
Copy to Clipboard Toggle word wrap

このコマンドで、デプロイしたモデルの URL やその準備状態などの情報を含む出力が返されるはずです。

2.11.11. vLLM でのアクセラレーターの使用

OpenShift AI では、NVIDIA、AMD、および Intel Gaudi アクセラレーターがサポートされています。また、OpenShift AI には、アクセラレーターのサポートを提供するモデルサービングランタイムがプリインストールされています。

2.11.11.1. NVIDIA GPU

vLLM NVIDIA GPU ServingRuntime for KServe ランタイムを使用すると、NVIDIA グラフィックスプロセッシングユニット (GPU) を使用するモデルを提供できます。このランタイムを使用するには、OpenShift AI で GPU サポートを有効にする必要があります。これには、クラスターへの Node Feature Discovery Operator のインストールと設定が含まれます。詳細は、Node Feature Discovery オペレーターのインストール および NVIDIA GPU の有効化を 参照してください。

2.11.11.2. Intel Gaudi アクセラレーター

vLLM Intel Gaudi Accelerator ServingRuntime for KServe ランタイムを使用すると、Intel Gaudi アクセラレーターを搭載したモデルを提供できます。このランタイムを使用するには、OpenShift AI でハイブリッドプロセッシングユニット (HPU) のサポートを有効にする必要があります。これには、Intel Gaudi AI アクセラレーター Operator のインストールとハードウェアプロファイルの設定が含まれます。詳細は、OpenShift 用の Gaudi の設定 および ハードウェアプロファイルの操作 を参照してください。

推奨される vLLM パラメーター、環境変数、サポートされる設定などの詳細は、vLLM with Intel® Gaudi® AI Accelerators を参照してください。

注記

ウォームアップは、モデルの初期化およびパフォーマンスの最適化手順であり、コールドスタートの遅延や最初の推論の待ち時間を短縮するのに役立ちます。モデルのサイズによっては、ウォームアップによりモデルのロード時間が長くなる可能性があります。

パフォーマンスの制限を回避するために実稼働環境において強く推奨されますが、非実稼働環境ではウォームアップをスキップすることで、モデルのロード時間を短縮し、モデル開発とテストサイクルを加速できます。ウォームアップをスキップするには、デプロイされたモデルサービングランタイムのパラメーターのカスタマイズ で説明されている手順に従って、モデルデプロイメントの [設定パラメーター] セクションに次の環境変数を追加します。

`VLLM_SKIP_WARMUP="true"`
Copy to Clipboard Toggle word wrap

2.11.11.3. AMD GPU

vLLM AMD GPU ServingRuntime for KServe を使用すると、AMD GPU を使用するモデルを提供できます。このランタイムを使用するには、OpenShift AI で AMD グラフィックプロセッシングユニット (GPU) のサポートを有効にする必要があります。これには、AMD GPU Operator のインストールとハードウェアプロファイルの設定が含まれます。詳細は、AMD ドキュメントの OpenShift への AMD GPU オペレーターのデプロイ および ハードウェアプロファイルの操作を 参照してください。

2.11.12. 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 オペレータのインストール および NVIDIA GPU の有効化を 参照してください。

手順

  1. 単一モデルサービングプラットフォームへのモデルのデプロイ で説明されている手順に従って、モデルをデプロイします。
  2. Serving runtime フィールドで、vLLM ServingRuntime for KServe を選択します。
  3. meta-llama-3 モデルをデプロイする場合は、Configuration parameters セクションの Additional serving runtime arguments に次の引数を追加します。

    –-distributed-executor-backend=mp 
    1
    
    --max-model-len=6144 
    2
    Copy to Clipboard Toggle word wrap
    1
    分散モデルワーカーのバックエンドをマルチプロセッシングに設定します。
    2
    モデルの最大コンテキスト長を 6144 トークンに設定します。
  4. granite-7B-instruct モデルをデプロイする場合は、Configuration parameters セクションの Additional serving runtime arguments に次の引数を追加します。

    --distributed-executor-backend=mp 
    1
    Copy to Clipboard Toggle word wrap
    1
    分散モデルワーカーのバックエンドをマルチプロセッシングに設定します。
  5. 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
    Copy to Clipboard Toggle word wrap
    1
    分散モデルワーカーのバックエンドをマルチプロセッシングに設定します。
    2
    シングルノード内の 4 つの GPU に推論を分散します。
    3
    モデルの最大コンテキスト長を 6448 トークンに設定します。
  6. mistral-7B-Instruct-v0.3 model モデルをデプロイする場合は、Configuration parameters セクションの Additional serving runtime arguments に次の引数を追加します。

    --distributed-executor-backend=mp 
    1
    
    --max-model-len=15344 
    2
    Copy to Clipboard Toggle word wrap
    1
    分散モデルワーカーのバックエンドをマルチプロセッシングに設定します。
    2
    モデルの最大コンテキスト長を 15344 トークンに設定します。
  7. Deploy をクリックします。

検証

  • デプロイされたモデルがプロジェクトの Models タブに表示され、ダッシュボードの Model deployments ページで 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>
        }"
    Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat