두개의 PC를 통해 클러스터 구축과정에서 작성한 게시글입니다.
구축에 있어 원문 정독은 필수 입니다.
직접 읽고 모르는 단어는 번역기를 사용하여 해석하기 때문에 의역 및 오역은 피드백 주시면 수정하겠습니다.
https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/
Schedule GPUs [k8s v1.26]
Kubernetes는 디바이스 플러그인을 사용하여 클러스터의 서로 다른 노드에서 AMD 및 NVIDIA GPU(그래픽 처리 장치)를 안정적으로 관리할 수 있도록 지원합니다.
디바이스 플러그인 사용
Kubernetes는 Pods가 GPU 같은 특구한 하드웨어 기능에 접근할수 있도록 디바이스 플러그인을 구현한다.
관리자는 GPU를 해당 공급업체 (AMD,인텔,엔비디아 등)의 드라이버를 노드에 설치하고 GPU 공급업체에 맞는 플러그인을 노드에서 실행해야한다. 아래는
GPU 업체에 대한 몇 가지 링크이다.
플러그인을 설치하면, 클러스터가 'amd.com/gpu' 또는 'nvidia.com/gpu' 같은 사용자 스케줄링 가능한 리소스를 표시합니다.
CPU, Memory를 요청하는 방식과 동일하게 사용자 지정 GPU 자원 요청을 통하여 컨테이너들에서 GPU를 사용(소비)할수 있다.
그러나 사용자 지정 장치의 리소스(자원) 요구 사항을 지정하는 방법에는 몇 가지 제한이 있다.
GPU는 오직 'limits' 영역에서 지정해주어야 한다, 무슨 의미냐면
- Kubernetes는 기본적으로 제한을 요청 값으로 사용하므로 'requests'을 지정하지 않고 GPU 'limits'을 지정할 수 있습니다.
- 'limits'과 'requests' 모두에서 GPU를 지정할 수 있지만 이 두 값은 같아야 합니다.
- 'limits'을 지정하지 않고 GPU 'requests'을 지정할 수 없습니다
다음은 Pod에서 GPU를 요청하는 명백한 예시이다
apiVersion: v1
kind: Pod
metadata:
name: example-vector-add
spec:
restartPolicy: OnFailure
containers:
- name: example-vector-add
image: "registry.example/example-vector-add:v42"
resources:
limits:
gpu-vendor.example/example-gpu: 1 # requesting 1 GPU
##위는 원문 예시
##아래는 nvidia 예시
apiVersion: v1
kind: Pod
metadata:
name: example-vector-add
spec:
restartPolicy: OnFailure
containers:
- name: example-vector-add
image: "registry.example/example-vector-add:v42"
resources:
limits:
nvidia.com/gpu: 1 # requesting 1 Nvidia GPU
다양한 유형의 GPU를 포함하는 클러스터
만약 클러스터 안에 다른 노드들이 다른 유형의 GPU를 가지고 있다면, Node Labels , Node selector를 사용하여 포드를 적절한 노드로 스케줄링 할 수 있다.
예시
# Label your nodes with the accelerator type they have.
kubectl label nodes node1 accelerator=example-gpu-x100
kubectl label nodes node2 accelerator=other-gpu-k915
위에서는 key인 accelerator를 예시를 들었다. 원하는 경우 다른 레이블 키를 사용할 수 있다.
자동 노드 레이블링
AMD GPU 디바이스를 사용하는 경우 Node Labeller 를 배포할 수 있습니다.
노드 레이블러는 GPU 장치 속성으로 노드에 레이블을 자동으로 지정하는 컨트롤러다.
비슷한 기능으로 NVIDIA 에서도 GPU 탐색 기능을 제공한다.
'Kubernetes_쿠버네티스' 카테고리의 다른 글
[Kubetnetes/K8s] 쿠버네티스 Service(Cluster IP, NodePort, LoadBalancer) 개념 잡기 (0) | 2023.07.27 |
---|---|
[Kubernetes/K8s] 쿠버네티스란? (0) | 2023.07.25 |
[K8S] 쿠버네티스 특정 노드에 배포하기 (0) | 2023.07.21 |
[K8S] deployment 롤링 업데이트 하기 (0) | 2023.07.19 |
[쿠버네티스] 클러스터와 분산 시스템 정리 (0) | 2023.01.20 |