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 카드 번호당으로 할당해야할 일이 있는 경우에는 참고해도 될 것 같다.