RBLN 쿠버네티스 디바이스 플러그인
BREAKING CHANGE
디바이스 플러그인의 v0.4.0 버전부터는 useGenericResourceName 옵션이 기본적으로 true로 설정됩니다. 이는 기존 리소스 이름인 rebellions.ai/ATOM이 아닌 rebellions.ai/npu로 변경된다는 것을 의미합니다. 기존 리소스 이름을 사용하고 싶다면, useGenericResourceName 옵션을 false로 설정하여 사용할 수 있습니다.
RBLN SDK는 쿠버네티스 클러스터에서 RBLN NPU를 사용할 수 있도록 쿠버네티스 디바이스 플러그인(Device Plugin)을 제공합니다.
1단계. NPU 노드 준비
먼저 RBLN NPU 및 RBLN 드라이버가 설치 된 쿠버네티스 노드(Kubernetes node)를 준비합니다. 보통은 사용 중인 클라우드 서버에 안정적으로 동작하는 최신 RBLN 드라이버가 이미 설치되어 있습니다. 커맨드라인에서 rbln-smi 명령어로 RBLN NPU를 조회할 수 있다면 RBLN 드라이버가 이미 설치되어있는 상태이므로 드라이버 설치를 생략할 수 있습니다. 드라이버 설치와 관련된 정보는 설치 가이드를 참고하시기 바랍니다.
| $ rbln-smi
Mon May 27 03:28:44 2024
+-------------------------------------------------------------------------------------------------+
| Device Infomation KMD ver: 0.12.37-6eed3e9-release |
+-----+-----------+-----------+---------------+------+---------+--------------------------+-------+
| NPU | Name | Device | PCI BUS ID | Temp | Power | Memory(used/total) | Util |
+-----+-----------+-----------+---------------+------+---------+--------------------------+-------+
| 0 | RBLN-CA02 | rbln0 | 0000:b6:00.0 | 25C | 6.2W | 0.0B / 15.7GiB | 0.0 |
+-----+-----------+-----------+---------------+------+---------+--------------------------+-------+
+-------------------------------------------------------------------------------------------------+
| Context Infomation |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
| NPU | Process | PID | CTX | Priority | PTID | Memalloc | Status |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
|
CDI 설정 (필수)
디바이스 플러그인은 컨테이너 런타임에서 CDI가 활성화되어 있어야 동작합니다. containerd를 직접 설정하고 재시작하거나, Container Toolkit이 CDI 설정을 수행하도록 할 수 있습니다.
containerd v1.7.x (/etc/containerd/config.toml)
| [plugins]
[plugins."io.containerd.grpc.v1.cri"]
enable_cdi = true
cdi_spec_dirs = ["/etc/cdi", "/var/run/cdi"]
|
containerd v2.x.x (/etc/containerd/config.toml)
| [plugins]
[plugins."io.containerd.cri.v1.runtime"]
enable_cdi = true
cdi_spec_dirs = ["/etc/cdi", "/var/run/cdi"]
|
CDI가 활성화되면 디바이스 플러그인은 rebellions.ai/npu=runtime CDI 어노테이션을 추가합니다. 이를 통해 워크로드가 NPU 리소스(예: rebellions.ai/npu)를 요청할 때 필요한 라이브러리와 rbln-smi 같은 도구가 자동으로 마운트됩니다.
2단계. 디바이스 플러그인 설치
디바이스 플러그인은 NPU Operator를 사용하여 설치하는 것을 권장합니다. 다만, 단독 설치가 필요한 경우에는 다음 명령어를 사용하여 설치할 수 있습니다.
| $ git clone https://github.com/RBLN-SW/k8s-device-plugin
$ cd k8s-device-plugin/deployments/helm/rbln-device-plugin
$ helm install rbln-device-plugin . -n kube-system
|
디바이스 플러그인 설치를 완료하면 kube-system 네임스페이스에서 rbln-device-plugin 데몬셋(DaemonSet)과 데몬셋으로부터 생성된 파드(Pod)를 확인할 수 있습니다:
| $ kubectl get ds -n kube-system rbln-device-plugin
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
rbln-device-plugin 4 4 4 4 4 kubernetes.io/arch=amd64 26s
$ kubectl get pod -n kube-system -l name=rbln-device-plugin -o wide
NAME READY STATUS RESTARTS AGE
rbln-device-plugin-5tj4z 1/1 Running 0 41s
rbln-device-plugin-7zqgh 1/1 Running 0 41s
rbln-device-plugin-ddtts 1/1 Running 0 41s
rbln-device-plugin-zrw8s 1/1 Running 0 41s
|
추가로 kubectl describe 명령어를 통해 RBLN NPU 자원(여기서는 rebellions.ai/npu 자원)을 확인 할 수 있습니다:
| $ kubectl describe node <your-node-name>
...
Capacity:
...
rebellions.ai/npu: 1
Allocatable:
...
rebellions.ai/npu: 1
...
|
3단계. NPU 파드 생성
파드스펙(Pod sepc)에 spec.containers[].resources.limits을 추가하여 NPU 자원을 포함하는 파드를 생성할 수 있도록 합니다:
| apiVersion: v1
kind: Pod
metadata:
name: rbln-device-plugin-testpod
spec:
containers:
- name: ubuntu
image: ubuntu:latest
imagePullPolicy: IfNotPresent
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 300000; done;"]
resources:
requests:
rebellions.ai/npu: 1
limits:
rebellions.ai/npu: 1
|
정의된 파드스펙을 기반으로 kubectl create 명령어를 사용하여 파드를 생성할 수 있습니다:
| $ kubectl create -f https://raw.githubusercontent.com/rebellions-sw/rbln-k8s-device-plugin/master/deployments/rbln/pod-tc.yaml
|
kubectl describe 명령어를 통해 1개의 rebellions.ai/npu 자원이 할당 된 파드를 확인할 수 있습니다:
| $ kubectl describe pod rbln-device-plugin-testpod
Name: rbln-device-plugin-testpod
Namespace: default
...
Containers:
ubuntu:
...
Limits:
rebellions.ai/npu: 1
Requests:
rebellions.ai/npu: 1
...
|
디바이스 플러그인은 호스트 머신의 rbln-smi 유틸리티를 파드 컨테이너로 자동으로 마운트하기 때문에, 생성된 컨테이너에서 아래와 같이 rbln-smi 유틸리티를 사용할 수 있습니다:
| $ kubectl exec -it rbln-device-plugin-testpod -- bash
root@rbln-device-plugin-testpod:/# rbln-smi
Mon May 27 08:44:05 2024
+-------------------------------------------------------------------------------------------------+
| Device Infomation KMD ver: 0.12.37-6eed3e9-release |
+-----+-----------+-----------+---------------+------+---------+--------------------------+-------+
| NPU | Name | Device | PCI BUS ID | Temp | Power | Memory(used/total) | Util |
+-----+-----------+-----------+---------------+------+---------+--------------------------+-------+
| 0 | RBLN-CA02 | rbln0 | 0000:b6:00.0 | 25C | 6.2W | 0.0B / 15.7GiB | 0.0 |
+-----+-----------+-----------+---------------+------+---------+--------------------------+-------+
+-------------------------------------------------------------------------------------------------+
| Context Infomation |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
| NPU | Process | PID | CTX | Priority | PTID | Memalloc | Status |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
|