보람찬 코기의 개발자 블로그
article thumbnail
반응형

두개의 PC를 통해 클러스터 구축과정에서 작성한 게시글입니다.

 

구축에 있어 원문 정독은 필수 입니다.

 

직접 읽고 모르는 단어는 번역기를 사용하여 해석하기 때문에 의역 및 오역은 피드백 주시면 수정하겠습니다.

 

https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/

 

Schedule GPUs

Configure and schedule GPUs for use as a resource by nodes in a cluster.

kubernetes.io

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 배포할 수 있습니다.

https://papago.naver.net/apis/site/proxy?url=https%3A%2F%2Fgithub.com%2FRadeonOpenCompute%2Fk8s-device-plugin%2Ftree%2Fmaster%2Fcmd%2Fk8s-node-labeller

노드 레이블러는 GPU 장치 속성으로 노드에 레이블을 자동으로 지정하는 컨트롤러다.

 

비슷한 기능으로 NVIDIA 에서도 GPU 탐색 기능을 제공한다.

https://papago.naver.net/apis/site/proxy?url=https%3A%2F%2Fgithub.com%2FNVIDIA%2Fgpu-feature-discovery%2Fblob%2Fmain%2FREADME.md 

 

 

 

 

 

 
반응형
profile

보람찬 코기의 개발자 블로그

@BoChan

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!