はじめに
本記事は、watsonx.ai ソフトウェアを IBM Cloud 上のRed Hat OpenShift コンテナプラットフォームにインストールして利用する際の環境構築の手順について簡潔に紹介しています。
免責事項
本記事は、2025年9月18日時点の公開資料をもとに筆者がインストールに成功した手順を紹介した内容です。本記事の内容をもとに意思決定を行う場合は、ご自身の責任において実施してください。本記事の利用によるいかなる損害や不利益についても一切の責任を負いません。
前提
- IBM Software Hub のドキュメントで事前にプランニング済み
- Red Hat OpenSfift: 4.17_361550
- Worker pools
- (48vCPU, 240GB) * 2 nodes for GPU
- GPU: gx3.48x240.2l40s
- 2nd Storage:300GB/5iops-tier
- OS: RHCOS
- (16 VCPUs, 64 GB) * 3 nodes for ODF
- RHCOS
- (48vCPU, 240GB) * 2 nodes for GPU
- IBM Software Hub: 5.2.1
- Red Hat OpenShift AI: 2.19.1
- Worker Zone: jp-tok-1
- watsonx.ai: lightweight engine
- 基盤モデル: llama-3-2-11b-vision-instruct (2xL40S supported)
- 埋め込みモデル: multilingual-e5-large
0. IBM Cloud 上でのいくつかの予備的な設定作業
- Resourece Group
- Access Group
- VPC
- Subnets
- Floating IP
- Virtual Network Interface
- Key
- VSI
1. クライアント・ワークステーション(踏み台サーバー)のセットアップ
1.1. IBM Software Hub CLI のインストール
ドキュメントの手順に従います。
1.2. OpenShift CLI のインストール
ドキュメントの手順に従います。
1.3. IBM Cloud CLI のインストール
ご参考:https://cloud.ibm.com/docs/cli?topic=cli-getting-started
2. IBM Software Hub のためのクラスターのセットアップ
2.1. IBM Software Hub のための Red Hat OpenShift Container Platform のインストール
まず最初に、クラスターを作ります:
- IBM Cloudにログインします。
- 左上部にあるハンバーガーメニューから、Containers を選びます。
- 左側のペーンで, Cluster management をクリックし、さらに Cluster をクリックします。
- Create Cluster ボタンを押します。
- 下にオプションを選択し、Create ボタンを押します:
- Orchetrator: Red Hat OpenShift
- Infrastructure: VPC
- Virtual private cloud: (select a predefined VPC)
- Location: jo-tok-1 (with a predifined public gateway applied)
- OpenShift version: 4.17.36
- OpenShift Container Platform (OCP) license: Apply my OCP entitlement
- Worker pool:
- (fill in a workerpool name)
- worker node per zone:2
- Change flavor:
- gx3.48x240.2l40s - 48 vCPU 240GB RAM
- Virtual - shared
- x86-64
- RHCOS
- 2nd storage: 300gb.5iops-tier
- Worker pool encryption:On
- Netowrk settings: both private and public endpoints
- Internal Registry: (select a predifined COS)
- Security:
- Outbound trafic protection: On
- Cluster encryption: On (with a predefined route key applided)
- Ingress secrets management: On
- VPC security group: Off
- Cluster details
- (fill in a cluster name)
- Resource Group: (select a predefined resource group)
- Integrations
- Activity Tracking: On
- Logging: On
- Monitoring: On
- Workload Protection: On
- クラスターが作成されるのをしばらく待ちます。
次に、ODF用のワーカー・プールをクラスターに追加します:
- クラスターのWebページの左側ペーンで、Worker pools を選択します。
- ODF 用の worker pool を追加するため、Add+ ボタンを押します。
- 以下のオプションを選択した後に、Create ボタンを押します:
- Worker pool name: (ODF 用 worker pool の名前を入力)
- Worker zones and subnets: jp-tok-1 (事前に定義しておいた public gateway を適用)
- Worker nodes:
- Worker nodes per zone:3
- Change flavor:
- bx2.16x64 - 16 vCPUs 64GB RAM
- Virtual - shared
- x86-64
- RHCOS
- Worker pool encryption: On
- OpenShift Container Platform (OCP) license: OCP エンタイトルメントを適用
- ODF 用 worker pool が作られるのを待ちます。
2.2. Installing the Red Hat OpenShift AI add-on 手順にある Before-you-begin 手順を適用
- IBM Cloud のクラスターの Web ページにあるボタンをクリックして、OpenShift の Web コンソールを開きます。
- OpenShift の web コンソールの左側ペーンで、Operators > OperatorHub へとクリックして進むと、Operators が見られるかどうか確認する。
- もし、Operatorが一つもみられない場合は、次の手順に進む。
- アウトバウンド・トラフィック保護を無効にする:
ibmcloud oc vpc outbound-traffic-protection disable --cluster CLUSTER - あなたのクラスター上の OperatorHub を有効にする:
oc patch operatorhub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": false}]' - しばらく時間をおくかWebページをリロードすると、OperatorHub 内に多くの operators が見えるようになります。
2.3. Red Hat OpenShift Container Platform cert-manager Operator のインストール
ドキュメントの手順に従います。
2.4. IBM Software Hub のための persistent storage のインストール
Red Hat OpenShift Data Foundation をインストールします。
- IBM CloudのWebコンソール内のクラスターウェブページで、ページ底部にある「Available to install」セクションのOpenShift Data Foundationタイルをクリックしてください。
- 以下のオプションを選択し、「Create」ボタンを押してください:
- Version: (default)
- Plan: 拡張
- Storage Type: Remote provisioning
- Backing storage
- NooBaa multicloud gateway deploy: チェックする
- Enable NooBaa public load balancer: チェックする
-Capacity and worker nodes - Worker pool: (ODF 用 worker pool 名を入力)
- Install をクリックする。
3. IBM Software Hub をインストールするのに必要な情報を集める
3.1. IBM Software Hub のための IBM エンタイトルメント API キーの取得
ドキュメントに従います。
3.2. インストールする components の決定
ドキュメントに従います。
- クラスター全体にまたがるコンポーネント:
- License Service
- Scheduling service
- IBM Software Hub インスタンスにインストールする予定のサービス:
- watsonx.ai
3.3. インストール環境変数のセットアップ
ドキュメントに従います。
例:
#===============================================================================
# IBM Software Hub installation variables
#===============================================================================
# ------------------------------------------------------------------------------
# Client workstation
# ------------------------------------------------------------------------------
# Set the following variables if you want to override the default behavior of the IBM Software Hub CLI.
#
# To export these variables, you must uncomment each command in this section.
export CPD_CLI_MANAGE_WORKSPACE=/root/cpd-cli-linux-EE-14.2.1-2542/cpd-cli-workspace/olm-utils-workspace/
# export OLM_UTILS_LAUNCH_ARGS=<enter launch arguments>
export PATH=/root/cpd-cli-linux-EE-14.2.1-2542/:$PATH
# ------------------------------------------------------------------------------
# Cluster
# ------------------------------------------------------------------------------
export OCP_URL=<MASKED>
export OPENSHIFT_TYPE=roks
export IMAGE_ARCH=amd64
# export OCP_USERNAME=<enter your username>
# export OCP_PASSWORD=<enter your password>
export OCP_TOKEN=<MASKED>
export SERVER_ARGUMENTS="--server=${OCP_URL}"
# export LOGIN_ARGUMENTS="--username=${OCP_USERNAME} --password=${OCP_PASSWORD}"
export LOGIN_ARGUMENTS="--token=${OCP_TOKEN}"
export CPDM_OC_LOGIN="cpd-cli manage login-to-ocp ${SERVER_ARGUMENTS} ${LOGIN_ARGUMENTS}"
export OC_LOGIN="oc login ${SERVER_ARGUMENTS} ${LOGIN_ARGUMENTS}"
# ------------------------------------------------------------------------------
# Proxy server
# ------------------------------------------------------------------------------
# export PROXY_HOST=<enter your proxy server hostname>
# export PROXY_PORT=<enter your proxy server port number>
# export PROXY_USER=<enter your proxy server username>
# export PROXY_PASSWORD=<enter your proxy server password>
# export NO_PROXY_LIST=<a comma-separated list of domain names>
# ------------------------------------------------------------------------------
# Projects
# ------------------------------------------------------------------------------
export PROJECT_CERT_MANAGER=ibm-cert-manager
export PROJECT_LICENSE_SERVICE=ibm-licensing
#export PROJECT_LICENSE_SERVICE=cpd-license
export PROJECT_SCHEDULING_SERVICE=ibm-cpd-scheduler
#export PROJECT_SCHEDULING_SERVICE=cpd-scheduling
# export PROJECT_IBM_EVENTS=<enter your IBM Events Operator project>
# export PROJECT_PRIVILEGED_MONITORING_SERVICE=<enter your privileged monitoring service project>
export PROJECT_CPD_INST_OPERATORS=cpd-operators
export PROJECT_CPD_INST_OPERANDS=cpd-watsonx
# export PROJECT_CPD_INSTANCE_TETHERED=<enter your tethered project>
# export PROJECT_CPD_INSTANCE_TETHERED_LIST=<a comma-separated list of tethered projects>
# ------------------------------------------------------------------------------
# Storage
# ------------------------------------------------------------------------------
export STG_CLASS_BLOCK=ocs-storagecluster-ceph-rbd
export STG_CLASS_FILE=ocs-storagecluster-cephfs
# ------------------------------------------------------------------------------
# IBM Entitled Registry
# ------------------------------------------------------------------------------
export IBM_ENTITLEMENT_KEY=<MASKED>
# ------------------------------------------------------------------------------
# Private container registry
# ------------------------------------------------------------------------------
# Set the following variables if you mirror images to a private container registry.
#
# To export these variables, you must uncomment each command in this section.
# export PRIVATE_REGISTRY_LOCATION=<enter the location of your private container registry>
# export PRIVATE_REGISTRY_PUSH_USER=<enter the username of a user that can push to the registry>
# export PRIVATE_REGISTRY_PUSH_PASSWORD=<enter the password of the user that can push to the registry>
# export PRIVATE_REGISTRY_PULL_USER=<enter the username of a user that can pull from the registry>
# export PRIVATE_REGISTRY_PULL_PASSWORD=<enter the password of the user that can pull from the registry>
# ------------------------------------------------------------------------------
# IBM Software Hub version
# ------------------------------------------------------------------------------
export VERSION=5.2.1
# ------------------------------------------------------------------------------
# Components
# ------------------------------------------------------------------------------
export COMPONENTS=ibm-licensing,cpfs,cpd_platform,watsonx_ai
# export COMPONENTS_TO_SKIP=<component-ID-1>,<component-ID-2>
# export IMAGE_GROUPS=<image-group-1>,<image-group-2>
# ------------------------------------------------------------------------------
# Red Hat OpenShift AI
# ------------------------------------------------------------------------------
export ODS_OPERATOR_NS=redhat-ods-operator
export CHANNEL_VERSION=stable-2.19
export DSC_INIT_NAME=default-dsci
export DS_CLUSTER_NAME=default-dsc
# ------------------------------------------------------------------------------
# CPD Information
# ------------------------------------------------------------------------------
export CPD_URL=<MASKED>
export CPDUSER=<MASKED>
export CPDUSER_PASSWORD=<MASKED>
4. IBM Software Hub のためのクラスターを準備する
4.1. IBM Software Hub のための global image pull secret の更新
-
ドキュメントに目を通してください。ただし、少しわかりにくいため、以下の手順で進めます。
-
cpd-cli で Red Hat® OpenShift® Container Platform クラスターにログインします。
${CPDM_OC_LOGIN} -
適切なコマンドを実行して、IBM Entitled Registry のための global image pull secret を更新します:
cpd-cli manage add-icr-cred-to-global-pull-secret \ --entitled_registry_key=${IBM_ENTITLEMENT_KEY} -
適切な daemonset を作成する
ご参考: Updating the global pull secretcat <<'EOF' | oc create -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: update-docker-config namespace: openshift-config labels: app: update-docker-config spec: selector: matchLabels: name: update-docker-config template: metadata: labels: name: update-docker-config spec: initContainers: - command: ["/bin/sh", "-c"] args: - > CONFIG_PATH=/var/lib/kubelet; echo "Backing up or restoring config.json"; [[ -s $CONFIG_PATH/config.json ]] && cp $CONFIG_PATH/config.json $CONFIG_PATH/config.json.bak || cp $CONFIG_PATH/config.json.bak $CONFIG_PATH/config.json; echo "Merging secret with config.json"; /host/usr/bin/jq -s '.[0] * .[1]' $CONFIG_PATH/config.json /auth/.dockerconfigjson > $CONFIG_PATH/config.tmp; mv $CONFIG_PATH/config.tmp $CONFIG_PATH/config.json; echo "Sending signal to reload crio config"; pidof crio; kill -1 $(pidof crio) image: icr.io/ibm/alpine:latest imagePullPolicy: IfNotPresent name: updater resources: {} securityContext: privileged: true volumeMounts: - name: docker-auth-secret mountPath: /auth - name: docker mountPath: /var/lib/kubelet # ← マウント先を kubelet 配下に - name: bin mountPath: /host/usr/bin - name: lib64 mountPath: /lib64 containers: - resources: requests: cpu: 0.01 image: icr.io/ibm/alpine:latest name: sleepforever command: ["/bin/sh", "-c"] args: - > while true; do sleep 100000; done hostPID: true volumes: - name: docker-auth-secret secret: secretName: pull-secret - name: docker hostPath: path: /var/lib/kubelet # ← kubelet 配下をマウント - name: bin hostPath: path: /usr/bin - name: lib64 hostPath: path: /lib64 hostPathType: Directory EOF -
結果をチェックする
oc get daemonset -n openshift-config update-docker-config
oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
- worker nodes の結果を確認する。
- worker node の名前を確認する。
ibmcloud oc worker ls -c <cluster name> - ある worker node の結果を確認する。
次に、以下を実行する。
oc debug node/<node name>sh-5.1# chroot /host sh-5.1# cat /var/lib/kubelet/config.json
- worker node の名前を確認する。
4.2. IBM Software Hub のための shared cluster components のインストール
ドキュメントに従います。
4.3. 前提条件ソフトウェアのインストール
- watsonx.ai
- Node Feature Discovery Operator
- NVIDIA GPU Operator
- Red Hat OpenShift AI Operator
4.3.1 GPUs を必要とする services のための operators のインストール
ドキュメントに従います。
インストール後、ポッドの状況を確認します。
4.3.2 Red Hat OpenShift AI のインストール
- IBM Cloud の Web コンソールで、クラスターのページにある「Available to install」セクションの Red Hat OpenShift AI タイルをクリックします。
- NFD および GPU Operator オプションがオフになっている状態で、Install をクリックしてください。
5. IBM Software Hub のインスタンスをインストールするための準備
5.1. IBM Software Hub をインストールする前に、クラスターの健康状態を確認する
ドキュメントに従います。
6. IBM Software Hub のインスタンスのインストール
6.1. IBM Software Hub のインスタンスのために必要な components をインストールする
ドキュメントに従います。
-
cpd-cli で、Red Hat® OpenShift® Container Platform クラスターにログインします:
${CPDM_OC_LOGIN} -
インストールする予定のソフトウェアのためのライセンス条項をレビューします。
- IBM watsonx.ai
cpd-cli manage get-license \ --release=${VERSION} \ --component=watsonx_ai \ --license-type=WXAI
- IBM watsonx.ai
-
IBM Software Hub のインスタンスのために必要なコンポーネントをインストールします:
- Red Hat OpenShift Data Foundation storage
- Instances without tethered projects
cpd-cli manage setup-instance \ --release=${VERSION} \ --license_acceptance=true \ --cpd_operator_ns=${PROJECT_CPD_INST_OPERATORS} \ --cpd_instance_ns=${PROJECT_CPD_INST_OPERANDS} \ --block_storage_class=${STG_CLASS_BLOCK} \ --file_storage_class=${STG_CLASS_FILE} \ --run_storage_tests=true- 注意:
- ROKS の storage IO では、失敗することが多いです。
- 作業を前に進めるには、
--run_storage_tests=falseオプションを選択する必要があるかもしれません。このオプションを選択しても、エラーが出る可能性があります。
- 注意:
- Instances without tethered projects
- Red Hat OpenShift Data Foundation storage
-
operands の状態が Completed であることを確認する:
cpd-cli manage get-cr-status \ --cpd_instance_ns=${PROJECT_CPD_INST_OPERANDS} -
operators プロジェクトのリソースの健康状態をチェックする:
cpd-cli health operators \ --operator_ns=${PROJECT_CPD_INST_OPERATORS} \ --control_plane_ns=${PROJECT_CPD_INST_OPERANDS} -
operands プロジェクトのリソースの健康状態をチェックする:
cpd-cli health operands \ --control_plane_ns=${PROJECT_CPD_INST_OPERANDS} -
Web クライアントのURLとデフォルトの認証情報を取得:
cpd-cli manage get-cpd-instance-details \ --cpd_instance_ns=${PROJECT_CPD_INST_OPERANDS} \ --get_admin_initial_credentials=true以下の情報を後で使用できるように保存しておきます:
CPD Url: <MASKED> CPD Username: cpadmin CPD Password: <MASKED>
7. クラスターの準備
7.1 必要な node 設定の変更
7.1.1. ロード・バランサーのタイムアウト設定の変更
- watsonx.ai のための最小限推奨タイムアウト
- クライアント側タイムアウト: 600s (10m)
- サーバー側タイムアウト: 600s (10m)
- 以下のコマンドを使ってHAProxy ルートのためのサーバー側タイムアウトを 600秒に設定します:
oc annotate route cpd --overwrite haproxy.router.openshift.io/timeout=600s - 環境に IBM Cloud Network Load Balancer for VPC が含まれている場合、IBM Cloud Network Load Balancer for VPC の設定が HA Proxy の設定を上書きします。IBM Cloud Network Load Balancer for VPC のタイムアウトを増やすには、次のコマンドを使用してください。:
oc patch svc router-default \ --namespace=openshift-ingress \ --type=merge \ --patch '{"metadata": {"annotations": {"service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout": "600"}}}'
8 IBM Software Hub のセットアップ
8.1. エンタイトルメントの適用
8.1.1 node pinning の無いエンタイトルメントの適用
ドキュメントに従います。
- IBM watsonx.ai
- Non-production license
9. solutions と services のインストール
9.1. Services のためのインストール・オプションの指定
ドキュメントに従います。
watsonx.ai (lightweight engine) のための install-options.yml サンプル:
########################################################################
# watsonx.ai parameters
########################################################################
custom_spec:
watsonx_ai:
tuning_disabled: true
lite_install: true
- 注意:必要に応じて、以下のコマンドも実行する。
chmod go+r /root/cpd-cli-linux-EE-14.2.0-2124/cpd-cli-workspace/olm-utils-workspace/work/install-options.yml
9.2. solutions and services のバッチ・インストールの実行
ドキュメントに従います。
- Red Hat OpenShift Data Foundation storage
10. platform と services のアンインストール
必要に応じて行います。
11. 全ての services
11.1. IBM watsonx.ai
ドキュメントに目を通しておきます。
11.1.1. IBM watsonx.ai のインストールの準備
ドキュメントに目を通しておきます。
11.1.2. IBM watsonx.ai のインストール
ドキュメントに従います。
- インストール・オプションの特定
- service のインストール
- インストールの検証
11.1.3 インストール後の設定
11.1.3.1. IBM watsonx.ai に基盤モデルを追加する
ドキュメントに従いますが、oc patch コマンドをインストールする際により詳細な指定を追加する必要があるかもしれません。
- 使用したいモデルを決定し、その model IDs をメモしてください。
- 本稿のケースでは、model ID は
llama-3-2-11b-vision-instructです。- なお、model ID は、以下で調べられます:https://www.ibm.com/docs/ja/watsonx/w-and-w/2.2.0?topic=solutions-supported-foundation-models
-
以下のオプションから、基盤モデルをインストールする方法を選択します。
- 本稿のケースでは、以下が適用可能です:
- Install with default configuration
- Shard the foundation models during installation
- 後者については、2種類のコマンドが可能です:
- Shard the foundation models
- Shard the foundation models on specific nodes
- 本稿のケースでは、こちらのコマンドを選んでいます。
- a. nodes のリストを取得します:
oc get nodes - b. 使いたい node のラベルをチェックします:
oc describe no <node-name> | grep kubernetes.io/hostname - c. 以下のコマンドを使うことにより、その node がGPUを持っていることを確かめます。基盤モデルは、GPU nodes のみに sharding 可能です。
oc describe node <node-hostname> | grep nvidia.com/gpu.product - d. custom resource をパッチするには、以下のコマンドを実行してください:
oc patch -n ${PROJECT_CPD_INST_OPERANDS} watsonxaiifm watsonxaiifm-cr \ --type merge \ --patch '{ "spec": { "install_model_list":["llama-3-2-11b-vision-instruct"], "llama_3_2_11b_vision_instruct_replicas": "1", "llama_3_2_11b_vision_instruct_resources": { "limits": { "cpu": "2", "ephemeral-storage": "1Gi", "memory": "96Gi", "nvidia.com/gpu": "2" }, "requests": { "cpu": "1", "ephemeral-storage": "10Mi", "memory": "4Gi", "nvidia.com/gpu": "2" } }, "model_install_parameters": { "llama_3_2_11b_vision_instruct": { "env": [ { "name": "MODEL_NAME", "value": "/mnt/models/llama-3-2-11b-vision-instruct" }, { "name": "SERVED_MODEL_NAME", "value": "meta-llama/llama-3-2-11b-vision-instruct" }, { "name": "MAX_SEQUENCE_LENGTH", "value": "16384" }, { "name": "MAX_NUM_SEQS", "value": "16" }, { "name": "MAX_NEW_TOKENS", "value": "8192" }, { "name": "DISABLE_PROMPT_LOGPROBS", "value": "true" }, { "name": "DEFAULT_INCLUDE_STOP_SEQS", "value": "false" }, { "name": "ENABLE_AUTO_TOOL_CHOICE", "value": "true" }, { "name": "ENFORCE_EAGER", "value": "true" }, { "name": "TOOL_CALL_PARSER", "value": "llama3_json" }, { "name": "CHAT_TEMPLATE", "value": "/mnt/models/llama-3-2-11b-vision-instruct/tool_chat_template_llama3.2_json.jinja" }, { "name": "NUM_GPUS", "value": "2" }, { "name": "CUDA_VISIBLE_DEVICES", "value": "0,1" }, { "name": "HUGGINGFACE_HUB_CACHE", "value": "/mnt/models/" }, { "name": "HF_MODULES_CACHE", "value": "/tmp/huggingface/modules" }, { "name": "PORT", "value": "3000" }, { "name": "MAX_LOG_LEN", "value": "100" }, { "name": "GPRC_PORT", "value": "8033" } ], "shard": "2", "nodeSelector":{"kubernetes.io/hostname": "kube-d30mc47t00u32raguqm0-nithandsono-workerp-000001cb"} } } } }'
- a. nodes のリストを取得します:
- 本稿のケースでは、こちらのコマンドを選んでいます。
- 本稿のケースでは、以下が適用可能です:
-
以下のコマンドを実行して、watsonxaiifm custom resource の spec セクションが更新されていることを確認する:
oc describe watsonxaiifm watsonxaiifm-cr -n ${PROJECT_CPD_INST_OPERANDS} -
operator が変更の調整を完了し、Completed ステータスを表示するまで待ってください。service の状態を確認するには、次のコマンドを使用できます:
oc get watsonxaiifm -n ${PROJECT_CPD_INST_OPERANDS} -
以下のコマンドを使用して、変更が正常に適用されたかどうかを確認してください。
- model predictor ポッドが稼働中かどうかを確認するには:
oc get po -n ${PROJECT_CPD_INST_OPERANDS} | grep predictor - predictor ポッドが正しいGPUプロセッサ数を示しているかどうかを確認します。node selector を指定した場合は、Node-Selectors フィールドの値も確認できます。
oc describe po <model-predictor-pod> -n ${PROJECT_CPD_INST_OPERANDS} - 基盤モデルがどの node を使用しているかをチェックするには:
oc get po -n ${PROJECT_CPD_INST_OPERANDS} -o wide | grep predictor
- model predictor ポッドが稼働中かどうかを確認するには:
注意:状況に応じて、以下のコマンドを実行する必要があるかもしれません。
- sharding 設定を削除する:
oc patch watsonxaiifm watsonxaiifm-cr \ --namespace=${PROJECT_CPD_INST_OPERANDS} \ --type json \ --patch '[{ "op": "remove", "path": "/spec/model_install_parameters" }]' - 全ての model を削除する:
oc patch watsonxaiifm watsonxaiifm-cr \ --namespace=${PROJECT_CPD_INST_OPERANDS} \ --type=merge \ --patch='{"spec":{"install_model_list":[]}}' - 失敗した model インストールに関連した services を削除する:
- この問題解決手順 が適用可能です。
11.1.3.2. GPUs に埋め込みモデルを追加的にインストールする
二つのやり方があります:
以下のコマンドは、本稿のケースでも適用された前者に当たります:
oc patch watsonxaiifm watsonxaiifm-cr \
--namespace=${PROJECT_CPD_INST_OPERANDS} \
--type=merge \
--patch='{
"spec":{
"install_model_list": ["llama_3_2_11b_vision_instruct","multilingual-e5-large"],
"multilingual_e5_large_replicas": 1,
"multilingual_e5_large_resources": {
"limits": {
"cpu": "4",
"memory": "8Gi",
"nvidia.com/gpu": 1
},
"requests": {
"cpu": "1",
"memory": "4Gi",
"nvidia.com/gpu": 1
}
}
}
}'
12. IBM watsonx.ai の始め方
12.1. watsonx.ai lightweight engine の始め方
12.1.1. API 資格情報の生成
ドキュメントに従いますが、例で与えられているコマンドには、トリビアルですがエディトリアルなエラーがありそのままではコマンドが通らず誤りを発見しにくいものが散見されたため、以下の例を参考にする。
-
以下のいずれかの方法で API キーを生成できます:
- Web クライアントのUIから生成する。より詳しい情報については、以下参照:認証のためのAPIキーの生成.
- プログラム的に、以下のステップを遂行して生成する。
本稿では後者を選びます。
- a. 先ほど取得した service の詳細を使用して bearer token を作成してください。詳細は、以下参照:認証 token の取得。
返された JSON から bearer token をコピーします。
curl --request POST \ --url "https://${CPD_URL}/icp4d-api/v1/authorize" \ --header "Content-Type: application/json" \ --data "{ \"username\":\"${CPDUSER}\", \"password\": \"${CPDUSER_PASSWORD}\" }" - b. 以下のリクエストで bearer token として使用するため、コピーした token で TOKEN を置き換えてください。詳細は以下参照:API キーの取得。
生成された API キーをコピーします。
TOKEN=<ABOVE OBTAINED BEARER TOKEN> curl -s -X GET --url "https://${CPD_URL}/usermgmt/v1/user/apiKey" --header "Authorization: Bearer ${TOKEN}"
-
watsonx.ai REST API では、API キーを使用して必要に応じて新しい bearer tokens をリクエストします。プログラム的にAPI キーを生成した場合、以前使用したのと同じ ${CPD_URL}/icp4d-api/v1/authorize エンドポイントを使用することに気付くかもしれませんが、今回はパスワードの代わりに API キーを提出して bearer token を生成します。詳細は以下参照:認証 token の取得。
APIKEY=<ABOVE OBTAINED API KEY> curl --request POST \ --url "https://${CPD_URL}/icp4d-api/v1/authorize" \ --header "Content-Type: application/json" \ --data "{ \"username\":\"${CPDUSER}\", \"api_key\": \"${APIKEY}\" }"JSON 応答の access_token セクションから bearer token をコピーします。
-
request を送信する際には、前のステップで取得した bearer token を含めてください。
- llama-3-2-11b-vision-instruct
TOKEN_2=<ABOVE OBTAINED BEARER TOKEN> curl -k -X POST \ --url "https://${CPD_URL}/ml/v1/text/chat?version=2024-07-23" \ --header "Authorization: Bearer ${TOKEN_2}" \ --header "Content-Type: application/json" \ --data '{ "model_id": "meta-llama/llama-3-2-11b-vision-instruct", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": [ { "type": "text", "text": "Who won the world series in 2020?" } ] }, { "role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020." }, { "role": "user", "content": [ { "type": "text", "text": "Where was it played?" } ] } ], "max_tokens": 100, "temperature": 0, "time_limit": 1000 }' -d '{ "model_id": "", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": [ { "type": "text", "text": "Who won the world series in 2020?" } ] }, { "role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020." }, { "role": "user", "content": [ { "type": "text", "text": "Where was it played?" } ] } ], "max_tokens": 100, "temperature": 0, "time_limit": 1000 }' - multilingual-e5-large
curl --request POST "https://${CPD_URL}/ml/v1/text/embeddings?version=2023-10-25" \ -H "Authorization: Bearer $TOKEN_2" \ -H 'Content-type: application/json' \ -d '{ "inputs": [ "Youth craves thrills while adulthood cherishes wisdom.", "Youth seeks ambition while adulthood finds contentment.", "Dreams chased in youth while goals pursued in adulthood." ], "model_id": "intfloat/multilingual-e5-large" }'
- llama-3-2-11b-vision-instruct
References
ドキュメント
The ibm-watsonx-ai library