はじめに
こんにちはサイオステクノロジーの小野です。前回はOpenShiftにGPUを追加する方法について解説しました。今回はそのGPUをクラスタ内で利用する設定の方法を解説します。
また、GPUはいくつかの会社が作成していますが、多くのAI開発ライブラリが対応しているNVIDIA製のGPUの設定を行います。
OpenshiftでGPUを利用するためのオペレータ
Node Feature Discovery (NFD) オペレータ
クラスター内のノードのハードウェア機能やカーネル機能を自動的に検出し、それらの機能をラベルとしてノードに追加するオペレータです。これによりノードにGPUがあることを検出できます。NVIDIA GPUオペレータを利用するために必要なオペレータです。
NVIDIA GPU オペレータ
NVIDIA GPUを搭載したサーバーでGPUリソースを管理し、活用できるようにするためのオペレータです。
Intel Device Plugins オペレータ
Intelのハードウェア機能をOpenshiftクラスタに認識させるために使用されるオペレータです。IntelのGPUを利用する際はこのオペレータを使用してください。
AWSにおけるGPU利用設定手順
設定手順概要
これからAWSに構築したOpenshiftでNVIDIAのGPUを利用する方法を解説します。手順は以下の流れで進んでいきます。
- NFDオペレータの設定
- NFDオペレータの正常性確認
- NVIDIA GPU オペレータの設定
- NVIDIA GPU オペレータの正常性確認
- GPUモニタリングの設定
前提条件
- OpenShift:4.17
- 構築する環境:AWS(amd64)
- リージョン:us-east-2
- クラスター名:ocp-test
- AWSにNVIDIAのGPUノードを追加済み
NFDオペレータの設定
NodeFeatureDiscoveryオペレータのインストール
最初にOperator > OperatorHubでNFDと検索します。
Node Feature Discovery Operatorが2つ存在するのでRed Hatと書かれている方を選択して、インストールを押します。
インストール時の設定は何も変更せず、インストールを押します。
インストールが完了するまで待ちます。
ステータスがSucceededになったらインストール完了です。
CRの設定 (NodeFeatureDiscovery)
続いてカスタムリソースの設定を行います。インストール済みOperatorの画面からNFDオペレータをクリックします。
NFDオペレータの詳細画面に遷移するので、提供されるAPIからNodeFeatureDiscoveryのインスタンスの作成を押します。
NFDの設定は何も変更せず、作成を押します。
作成が完了するまで待ちます。
ステータスが「Conditions: Available Upgradeable」となっていれば作成完了です。
NFDオペレータ正常性確認
NFDオペレータの導入によって、GPUノードにGPUのラベルが付与されていることを確認します。
以下のコマンドを入力します。
$ oc describe node | egrep 'Roles|pci' | grep -v master
Roles: worker
feature.node.kubernetes.io/pci-1d0f.present=true
Roles: worker
feature.node.kubernetes.io/pci-10de.present=true
feature.node.kubernetes.io/pci-1d0f.present=true
Roles: worker
feature.node.kubernetes.io/pci-1d0f.present=true
Roles: worker
feature.node.kubernetes.io/pci-1d0f.present=true
NFDオペレータの導入が正常に行われたら、GPUが搭載されたノードに「pci-10de」というラベルが付与されていることが確認できます。
NVIDIA GPU オペレータの設定
NVIDIA GPU オペレータのインストール
次にNVIDIA GPU オペレータのインストールを行います。Operator > OperatorHubでNVIDIAと検索します。
NVIDIA GPU Operatorを選択してインストールを押します。
インストール時の設定は何も変更せず、インストールを押します。
インストールが完了するまで待ちます。
ステータスがSucceededになったらインストール完了です。
CRの設定 (ClusterPolicy)
続いてカスタムリソースの設定を行います。インストール済みOperatorの画面からNVIDIA GPU オペレータをクリックします。
NVIDIA GPUオペレータの詳細画面に遷移するので、提供されるAPIからClusterPolicyのインスタンスの作成を押します。
ClusterPolicyの設定は何も変更せず、作成を押します。
作成が完了するまで待ちます。少し時間がかかるので注意してください(10分前後)。
ステータスが「State: ready」となっていれば作成完了です。
NVIDIA GPU オペレータの正常性確認
GPUが動作するかの正常性の確認を行います。今回は2種類の正常性確認を行います。
サンプルアプリ実行
GPUを利用してベクトルの加算を行うサンプルアプリを実行します。(参考:https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/install-gpu-ocp.html#running-a-sample-gpu-application)
以下のコマンドを実行してpodを作成します。
$ cat << EOF | oc create -f -
apiVersion: v1
kind: Pod
metadata:
name: cuda-vectoradd
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vectoradd
image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0-ubi8"
resources:
limits:
nvidia.com/gpu: 1
EOF
pod/cuda-vectoradd created
コンテナのログでサンプルアプリが動作していることを確認します。
$ oc logs cuda-vectoradd
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
GPUの状態確認
GPUの状態を表示するコマンドを実行します。(参考:https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/install-gpu-ocp.html#getting-information-about-the-gpu)
nvidia-gpu-operator プロジェクトに変更します。
$ oc project nvidia-gpu-operator
Now using project "nvidia-gpu-operator" on server "https://api.ocp-test.cpawstest.ps.staging-test.sios.jp:6443".
pod名を取得します。
$ oc get pod -owide -lopenshift.driver-toolkit=true
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nvidia-driver-daemonset-417.94.202410090854-0-n7xjw 2/2 Running 0 28m 10.130.2.9 ip-10-0-18-161.us-east-2.compute.internal <none> <none>
取得したpod内でnvidia-smiコマンドを実行します。GPUのメモリ使用量、使用率、温度が確認できます。
$ oc exec -it nvidia-driver-daemonset-417.94.202410090854-0-n7xjw -- nvidia-smi
Mon Oct 28 08:36:36 2024
+-----------------------------------------------------------------------------------------+
| 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 26C P8 14W / 70W | 1MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
GPU のモニタリング設定
GPUの管理に必要なモニタリングの設定方法について説明します(参考:https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/enable-gpu-monitoring-dashboard.html)。
GitHub の DCGM エクスポーター リポジトリから最新の NVIDIA DCGM エクスポーター ダッシュボードをダウンロードします。
$ curl -LfO https://github.com/NVIDIA/dcgm-exporter/raw/main/grafana/dcgm-exporter-dashboard.json
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 18114 100 18114 0 0 19498 0 --:--:-- --:--:-- --:--:-- 19498
namespaceにダウンロードしたファイルからconfigmapを作成します。
$ oc create configmap nvidia-dcgm-exporter-dashboard -n openshift-config-managed --from-file=dcgm-exporter-dashboard.json
configmap/nvidia-dcgm-exporter-dashboard created
configmapにラベルをつけて、管理者のコンソールでGPUのダッシュボードを確認できるようにします。
$ oc label configmap nvidia-dcgm-exporter-dashboard -n openshift-config-managed "console.openshift.io/dashboard=true"
configmap/nvidia-dcgm-exporter-dashboard labeled
同様に開発者のコンソールでGPUのダッシュボードを確認できるようにします。
$ oc label configmap nvidia-dcgm-exporter-dashboard -n openshift-config-managed "console.openshift.io/odc-dashboard=true"
configmap/nvidia-dcgm-exporter-dashboard labeled
作成されたリソースを表示し、ラベルがつけられていることを確認します。
$ oc -n openshift-config-managed get cm nvidia-dcgm-exporter-dashboard --show-labels
NAME DATA AGE LABELS
nvidia-dcgm-exporter-dashboard 1 90s console.openshift.io/dashboard=true,console.openshift.io/odc-dashboard=true
コンソール画面のモニタリング > ダッシュボードに移動し、ダッシュボードのリストから「NVIDIA DCGM Exporter Dashboard」を選択します。
GPUの各種情報をコンソール画面でモニタリングできるようになりました。
最後に
NFDオペレータとNVIDIAオペレータを導入することで、OpenShiftでGPUを取り扱えるようになりました。
これでようやくOpenShift AIを導入するための準備が完了しました。次回はいよいよOpenShift AIを導入する方法について解説したいと思います。