-
[K8S] Kubernetes에서 GPU 사용하기 (apt/yum)Kubernetes 2024. 3. 10. 23:06
0. 전제 조건
- Docker 설치 완료
- Nvidia Driver 설치 완료
- CentOS/Rocky : https://yrotsti.tistory.com/149
- Ubuntu : https://yrotsti.tistory.com/150
- GPU 노드에서 아래 순서 진행
1. NVIDIA Conatainer Toolkit 설치
nvidia-container-toolkit : NVIDIA GPU를 사용하는 컨테이너를 빌드하고 실행하기 위한 도구 모음
- 저장소 및 GPG키 설정
# ubuntu curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list # centos curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \ sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
- nvidia-container-toolkit 패키지 설치
# ubuntu sudo apt-get update sudo apt-get install -y nvidia-container-toolkit # centos sudo yum install -y nvidia-container-toolkit
- 컨테이너 런타임 구성
sudo nvidia-ctk runtime configure --runtime=docker
# vi /etc/docker/daemon.json { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } }
- 적용
systemctl daemon-reload systemctl restart docker
- 확인 테스트
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
2. NVIDIA GPU 디바이스 플러그인 설치
Kubernetes는 device-plugin을 사용하여 Pod가 GPU와 같이 특별한 하드웨어 기능에 접근할 수 있게 합니다.
- 설치
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml
- 확인
kubectl get daemonset -n kube-system
3. POD 테스트
GPU 리소스 할당 X
- Test POD 배포
# vi ubuntu-test.yaml apiVersion: v1 kind: Pod metadata: name: ubuntu-test spec: containers: - name: os-ubuntu image: ubuntu:18.04 imagePullPolicy: IfNotPresent command: - "/bin/sleep" - "3650d" resources: limits: cpu: "5" memory: "8G"
kubectl apply -f ubuntu-test.yaml
- POD 내부로 shell 진입하여 확인
→ nvdia-smi 명령어가 실행되지 않음
kubectl exec -it ubuntu-test /bin/bash nvidia-smi
GPU 리소스 할당 O
- Test POD 배포
- GPU 리소스 할당 추가 : nvidia.com/gpu: "1"
vi ubuntu-test-gpu.yaml apiVersion: v1 kind: Pod metadata: name: ubuntu-test-gpu spec: containers: - name: os-ubuntu image: ubuntu:18.04 imagePullPolicy: IfNotPresent command: - "/bin/sleep" - "3650d" resources: limits: cpu: "5" memory: "8G" nvidia.com/gpu: "1"
kubectl apply -f ubuntu-test-gpu.yaml
- POD 내부로 shell 진입하여 확인
→ nvdia-smi 명령어 실행됨 (= GPU 사용 O)kubectl exec -it ubuntu-test-gpu /bin/bash nvidia-smi
Reference
'Kubernetes' 카테고리의 다른 글
[K8S] Kubespray 설정 파일 변경하기 (0) 2024.03.09 [K8S] Reserve Compute Resources (0) 2024.03.07 [K8S] Kubespray를 이용한 Cluster초기화, Node 추가/제거 (0) 2024.03.07 [K8S] Kubespray로 Kubernetes 설치하기 - CentOS7/Rocky8 (0) 2024.03.01 Kubespray 분석 (0) 2023.08.25