IBM Cloud Pak for Dataで使用する Red Hat OpenShift AI のインストール

IBM Cloud Pak for Data (CP4D) 5.0.x では、Inference 基盤モデルを使用するサービスをインストールする場合、モデルを開始してサービスを提供するために Red Hat OpenShift AI のインストールが前提となりました。

https://www.ibm.com/docs/ja/cloud-paks/cp-data/5.0.x?topic=software-installing-operators-services-that-require-gpus

この記事は、CP4D 5.0.2 用にRed Hat OpenShift AI バージョン 2.8.3 をインストールした際の記録です。以下のドキュメントを参照して実施しました。

https://docs.redhat.com/ja/documentation/red_hat_openshift_ai_self-managed/2.8/html/installing_and_uninstalling_openshift_ai_self-managed/preparing-openshift-ai-for-ibm-cpd_prepare-openshift-ai-ibm-cpd#installing-openshift-data-science-operator-using-cli-ibm-cpd_prepare-openshift-ai-ibm-cpd

:::note info
CP4D 5.0.3では、Red Hat OpenShift AI バージョン 2.11が前提となっています。インストールの概要はバージョン 2.8.3と同様ですが、設定値など詳細に変更があるため、[バージョン 2.11のドキュメント](https://docs.redhat.com/ja/documentation/red_hat_openshift_ai_self-managed/2.11/html/installing_and_uninstalling_openshift_ai_self-managed/preparing-openshift-ai-for-ibm-cpd_prepare-openshift-ai-ibm-cpd)をご参照ください。 
:::

## 環境
- OCP 4.14
- Red Hat OpenShift AI 2.8.3
- CP4D 5.0.2

## 1. CLIを使用したRed Hat OpenShift AI Operatorのインストール
1. OpenShift コマンドラインインターフェイス (CLI) で、クラスター管理者として OpenShift Container Platform クラスターにログインします。 
    ```
    oc login <openshift_cluster_url> -u <admin_username> -p <password>
    ```
1. 次の内容で新しい YAML ファイルを作成します。ファイル名は任意ですが、ここでは `redhat-ods.yaml` としています。
    ```text:redhat-ods.yaml
    apiVersion: v1
    kind: Namespace 
    metadata:
      name: redhat-ods-operator
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup 
    metadata:
      name: rhods-operator
      namespace: redhat-ods-operator
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription 
    metadata:
      name: rhods-operator
      namespace: redhat-ods-operator
    spec:
      name: rhods-operator
      channel: eus-2.8  
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      config:
         env:
            - name: "DISABLE_DSC_CONFIG"
    ```
1. YAML ファイルをデプロイして、定義した namespace、Operator グループ、サブスクリプションを作成します。 
    ```
    $ oc create -f redhat-ods.yaml
    namespace/redhat-ods-operator created
    operatorgroup.operators.coreos.com/rhods-operator created
    subscription.operators.coreos.com/rhods-operator created
    ```

1. 次の内容で、別の新しい YAML ファイルを作成します。ファイル名は任意ですが、ここでは `default-dsci.yaml` としています。
    ```text:default-dsci.yaml
    apiVersion: dscinitialization.opendatahub.io/v1
    kind: DSCInitialization 
    metadata:
      name: default-dsci
    spec:
      applicationsNamespace: redhat-ods-applications
      monitoring:
        managementState: Managed
        namespace: redhat-ods-monitoring
      serviceMesh:
        managementState: Removed 
      trustedCABundle:
        managementState: Managed
        customCABundle: ""
    ```
1. YAML ファイルをデプロイして、default-dsci という DSCInitialization オブジェクトを作成します。
    ```
    $ oc create -f default-dsci.yaml
    dscinitialization.dscinitialization.opendatahub.io/default-dsci created
    ```

検証
- Running ステータスの rhods-operator-* Pod があることを確認します。 
- Ready ステータスの default-dsci オブジェクトがあることを確認します。 
```
$ oc get pods -n redhat-ods-operator
NAME                              READY   STATUS    RESTARTS   AGE
rhods-operator-58b8585597-j22bd   1/1     Running   0          3m6s

$ oc get dscinitialization
NAME           AGE   PHASE   CREATED AT
default-dsci   4s    Ready   2024-09-06T05:51:01Z
```

## 2. CLIを使用したRed Hat OpenShift AIコンポーネントの管理

1. OpenShift コマンドラインインターフェイス (CLI) で、クラスター管理者として OpenShift Container Platform クラスターにログインします。 
    ```
    oc login <openshift_cluster_url> -u <admin_username> -p <password>
    ```

1. 次の内容で新しい YAML ファイルを作成します。ファイル名は任意ですが、ここでは `default-dsc.yaml` としています。
    ```text:default-dsc.yaml
    kind: DataScienceCluster 
    apiVersion: datasciencecluster.opendatahub.io/v1
    metadata:
      name: default-dsc
      labels:
        app.kubernetes.io/name: datasciencecluster
        app.kubernetes.io/instance: default-dsc
        app.kubernetes.io/part-of: rhods-operator
        app.kubernetes.io/managed-by: kustomize
        app.kubernetes.io/created-by: rhods-operator
    spec:
      components:
        codeflare:
          managementState: Removed
        dashboard:
          managementState: Removed
        datasciencepipelines:
          managementState: Removed
        kserve:
          managementState: Managed
          defaultDeploymentMode: RawDeployment 
          serving:
            managementState: Removed 
            name: knative-serving
        kueue:
          managementState: Removed
        modelmeshserving:
          managementState: Removed
        ray:
          managementState: Removed
        workbenches:
          managementState: Removed
    ```

1. OpenShift クラスターに DataScienceCluster オブジェクトを作成します。    
    ```
    $ oc create -f default-dsc.yaml
    datasciencecluster.datasciencecluster.opendatahub.io/default-dsc created
    ```

検証
- Running ステータスの kserve-controller-manager-* Pod があることを確認します。 
```
$ oc get pods -n redhat-ods-applications
NAME                                         READY   STATUS      RESTARTS   AGE
kserve-controller-manager-749f946878-jzm4h   1/1     Running     0          15s
odh-model-controller-69dcd7db65-g7m72        1/1     Running     0          38s
odh-model-controller-69dcd7db65-m22nn        1/1     Running     0          38s
odh-model-controller-69dcd7db65-sk96t        1/1     Running     0          38s
remove-deprecated-monitoring-ss97w           0/1     Completed   0          38s
```

## 3. モデル推論設定の編集
IBM Cloud Pak for Data バージョン 5.0 以降 (watsonx.ai を含む) の特定のユースケースでは、Red Hat OpenShift AI で使用されるモデル推論設定のカスタマイズが必要になる場合があります。このようなカスタマイズを行う前に、推論設定ファイルを編集可能な状態にする必要があります。さらに、Cloud Pak for Data および watsonx.ai で OpenShift AI を使用するときにエラーが発生しないように、特定の設定の更新を行う必要があります。 

1. クラスター管理者として OpenShift Container Platform Web コンソールにログインします。
2. Web コンソールで、Workloads > ConfigMaps をクリックします。
3. Project リストで、redhat-ods-applications をクリックします。
4. ConfigMap リソースのリストで、inferenceservice-config リソースをクリックし、YAML タブをクリックします。 
5. 次の3か所を変更します。
    a. ファイルの metadata.annotations セクションで、赤枠で囲んだように `opendatahub.io/managed: 'false'` を追加します。 

    このアノテーションを追加すると、推論設定ファイルが編集可能になります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/63e20b50-61da-b64f-8fd1-801ceb3716ed.png)
    b. Cloud Pak for Data (watsonx.ai を含む) で OpenShift AI を使用するときにエラーが発生しないように、次のように`domainTemplate` フィールドの値を更新します。
    ```
    ### 変更前
    "domainTemplate": "{{ .Name }}-{{ .Namespace }}.{{ .IngressDomain }}
    ### 変更後
    "domainTemplate": "example.com"
    ```
        
    この新しく明示的に指定した値により、エラーの原因となる、最大長を超える `domainTemplate` フィールドの値を OpenShift AI が生成できなくなります。`domainTemplate` フィールドは、OpenShift AI を Cloud Pak for Data で使用するために準備するときに KServe コンポーネント用に設定した raw デプロイメントモードでは使用されません。
        
        
    c. ボリュームを直接マウントし、モデルのコピーを回避するには、`enableDirectPvcVolumeMount` フィールドの値を次のように更新します。 
    ```
    ### 変更前
    "enableDirectPvcVolumeMount": false
    
    ### 変更後
    "enableDirectPvcVolumeMount": true
    ```

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