쿠버네티스 지원
RBLN SDK는 쿠버네티스 클러스터에서 RBLN NPU를 사용할 수 있도록 쿠버네티스 장치 플러그인(Device Plugin)을 제공합니다.
1단계. NPU 노드 준비
먼저 RBLN NPU 및 RBLN 드라이버가 설치 된 쿠버네티스 노드(Kubernetes node)를 준비합니다. 보통은 사용 중인 클라우드 서버에 안정적으로 동작하는 최신 RBLN 드라이버가 이미 설치되어 있습니다. rbln-stat 명령어로 RBLN NPU를 조회할 수 있다면 RBLN 드라이버가 이미 설치되어있는 상태이므로 드라이버 설치를 생략할 수 있습니다. 드라이버 설치와 관련된 정보는 설치 가이드를 참고하시기 바랍니다.
| $ rbln-stat
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 |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
|
2단계. 장치 플러그인 설치
kubectl apply
명령어를 사용하여 장치 플러그인을 설치할 수 있습니다:
| $ kubectl apply -f https://raw.githubusercontent.com/rebellions-sw/rebel-k8s-device-plugin/master/deployments/rebel/configmap.yaml
$ kubectl apply -f https://raw.githubusercontent.com/rebellions-sw/rebel-k8s-device-plugin/master/deployments/rebel/daemonset.yaml
|
장치 플러그인 설치를 완료하면 kube-system
네임스페이스에서 rebel-device-plugin
데몬셋(DaemonSet)과 데몬셋으로부터 생성된 파드(Pod)를 확인할 수 있습니다:
| $ kubectl get ds -n kube-system rebel-device-plugin
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
rebel-device-plugin 4 4 4 4 4 kubernetes.io/arch=amd64 26s
$ kubectl get pod -n kube-system -l name=rebel-device-plugin -o wide
NAME READY STATUS RESTARTS AGE
rebel-device-plugin-5tj4z 1/1 Running 0 41s
rebel-device-plugin-7zqgh 1/1 Running 0 41s
rebel-device-plugin-ddtts 1/1 Running 0 41s
rebel-device-plugin-zrw8s 1/1 Running 0 41s
|
추가로 kubectl describe
명령어를 통해 RBLN NPU 자원(여기서는 rebellions.ai/ATOM
자원)을 확인 할 수 있습니다:
| $ kubectl describe node <your-node-name>
...
Capacity:
...
rebellions.ai/ATOM: 1
Allocatable:
...
rebellions.ai/ATOM: 1
...
|
장치 플러그인 설정
장치 플러그인의 자원 설정(여기서는 rebellions.ai/ATOM
자원)을 위해 ConfigMap
이 필요합니다. 다음은 기본 설정 된 ConfigMap
입니다:
| apiVersion: v1
kind: ConfigMap
metadata:
name: rebel-device-plugin-config
namespace: kube-system
data:
config.json: |
{
"resourceList": [
{
"resourceName": "ATOM",
"resourcePrefix": "rebellions.ai",
"deviceType": "accelerator",
"selectors": {
"vendors": ["1eff"],
"devices": [
"0010",
"0011",
"1020",
"1021",
"1120",
"1121",
"1220",
"1221"
],
"drivers": ["rebellions"]
}
}
]
}
|
장치 플러그인은 ConfigMap
설정을 기반으로 모든 노드에서 해당 자원을 탐색 합니다. 만일 heterogeneous 클러스터 환경에서 노드 단위로 다른 설정을 구성하고 싶다면, ConfigMap
과 DaemonSet
을 수정해야 합니다. 이와 관련된 자세한 내용은 링크를 참고하시기 바랍니다.
3단계. NPU 파드 생성
파드스펙(Pod sepc)에 spec.containers[].resources.limits
을 추가하여 NPU 자원을 포함하는 파드를 생성할 수 있도록 합니다:
| apiVersion: v1
kind: Pod
metadata:
name: rebel-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/ATOM: 1
limits:
rebellions.ai/ATOM: 1
|
정의된 파드스펙을 기반으로 kubectl create
명령어를 사용하여 파드를 생성할 수 있습니다:
| $ kubectl create -f https://raw.githubusercontent.com/rebellions-sw/rebel-k8s-device-plugin/master/deployments/rebel/pod-tc.yaml
|
kubectl describe
명령어를 통해 1개의 rebellions.ai/ATOM
자원이 할당 된 파드를 확인할 수 있습니다:
| $ kubectl describe pod rebel-device-plugin-testpod
Name: rebel-device-plugin-testpod
Namespace: default
...
Containers:
ubuntu:
...
Limits:
rebellions.ai/ATOM: 1
Requests:
rebellions.ai/ATOM: 1
...
|
장치 플러그인은 호스트 머신의 rbln-stat
유틸리티를 파드 컨테이너로 자동으로 마운트하기 때문에, 생성된 컨테이너에서 아래와 같이 rbln-stat
유틸리티를 사용할 수 있습니다:
| $ kubectl exec -it rebel-device-plugin-testpod -- bash
root@rebel-device-plugin-testpod:/# rbln-stat
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 |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
|