더듬이

[kubernetes] gpu 노드에 gpu 없이 없이 pods 생성하기 본문

Kubernetes

[kubernetes] gpu 노드에 gpu 없이 없이 pods 생성하기

dbhang 2021. 7. 1. 21:35

 

실제로 gpu 노드를 gpu가 필요없는 pods 를 생성할때 사용 못하는 것은 너무나 비효율 적인것 같다.

실제로 https://github.com/NVIDIA/k8s-device-plugin 문서에 보면 아래와 같이 나와있습니다.

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
    - name: cuda-container
      image: nvcr.io/nvidia/cuda:9.0-devel
      resources:
        limits:
          nvidia.com/gpu: 2 # requesting 2 GPUs
    - name: digits-container
      image: nvcr.io/nvidia/digits:20.12-tensorflow-py3
      resources:
        limits:
          nvidia.com/gpu: 2 # requesting 2 GPUs

 

WARNING: if you don't request GPUs when using the device plugin with NVIDIA images all the GPUs on the machine will be exposed inside your container.

위 내용은 nvidia.com/gpu 설정을 해놓지 않으면 노드에 모든 gpu가 컨테이너 내부에 노출된다는 내용인데.

방법 

docker 버전이 --gpus를 사용하는 버전에도 가능한지는 모르겠지만 아래와 같은 환경 변수를 추가로 설정해주면

nvidia-smi등을 통해서 카드 안잡힌다~

containers:
    env: 
        - name: NVIDIA_VISIBLE_DEVICES
          value: none

아래 경우 처럼 변수를 추가해주면 노드 안에 2,3번 gpu 카드만  잡힌다. 물론 컨테이너 내부에서 확인하면 gpu 0, gpu1 로 표기된다.

 

containers:
    env: 
        - name: NVIDIA_VISIBLE_DEVICES
          value: "2,3"

 

 

 

사실 위에 k8s-driver-plugin을 사용해 nvidia.com/gpu 설정을 통하는건 자동으로 gpu 를 선택하고 필요한 카드 갯수만큼 배포해줄 수있기 때문인데,  가끔. gpu 카드 번호당으로 할당해야할 일이 있는 경우에는 참고해도 될 것 같다.