K3s Nvidia GPU 연동 및 워크로드 설정 가이드
K3s Nvidia GPU 세팅 방법 K3s 클러스터에 GPU 를 사용하기 위한 Nvidia GPU 세팅 방법 정리 K3s 설치 K3s 가 설치되어 있지 않을 경우 K3s 설치 K3s 설치는 K3s 공식 문서를 참고하여 진행 Nvidia GPU 드라이버 설치 그래픽 카드 확인과 드라이버 설치 그래픽 카드 확인 lspci | grep -i nvidia # Nvidia 그래픽 카드가 설치되어 있는 경우 01:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti] (rev a1) 01:00.1 Audio device: NVIDIA Corporation TU102 High Definition Audio Controller (rev a1) 01:00.2 USB controller: NVIDIA Corporation TU102 USB 3.1 Host Controller (rev a1) 01:00.3 Serial bus controller: NVIDIA Corporation TU102 USB Type-C UCSI Controller (rev a1 # Nvidia 그래픽 카드가 설치되어 있지 않은 경우(예시) 00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04) 설치 가능한 Nvidia 그래픽 카드 드라이버 확인 ubuntu-drivers devices # 설치 가능한 Nvidia 그래픽 카드 드라이버 목록(예시) == /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 == modalias : pci:v000010DEd00001E04sv000010DEsd000012AEbc03sc00i00 vendor : NVIDIA Corporation model : TU102 [GeForce RTX 2080 Ti] driver : nvidia-driver-525-server - distro non-free driver : nvidia-driver-535-open - distro non-free driver : nvidia-driver-535-server - distro non-free driver : nvidia-driver-525-open - distro non-free driver : nvidia-driver-535-server-open - distro non-free driver : nvidia-driver-418-server - distro non-free driver : nvidia-driver-470-server - distro non-free driver : nvidia-driver-470 - distro non-free driver : nvidia-driver-535 - distro non-free driver : nvidia-driver-525 - distro non-free driver : nvidia-driver-545 - third-party non-free recommended driver : nvidia-driver-450-server - distro non-free driver : nvidia-driver-545-open - third-party non-free driver : xserver-xorg-video-nouveau - distro free builtin 그래픽 카드 드라이버 설치(recommended 설치 권장) # recommended 드라이버 설치 sudo ubuntu-drivers autoinstall # recommended 드라이버 설치 후 재부팅 sudo reboot Nvidia Container Toolkit 설치 Nvidia Container Toolkit 설치는 Nvidia 공식 문서를 참고하여 진행 Nvidia Container Toolkit 과 관련된 패키지 설치 패키지 저장소 추가 # 패키지 저장소 추가 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 패키지 업데이트 및 Nvidia Container Toolkit 설치 sudo apt update sudo apt install -y nvidia-container-toolkit sudo apt install -y nvidia-container-runtime docker config 파일 수정 // /etc/docker/daemon.json 파일 수정 { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } } docker 재시작 sudo systemctl restart docker 정상 설치 확인 nvidia-smi K3s 설정 K3s GPU 설정을 위한 K3s 설정 파일 수정 K3s 설정 파일 수정 # K3s containerd 설정 파일 수정 # config.toml 파일은 K3s 시작 시 자동으로 생성되는 파일이므로 config.toml.tmpl 파일을 수정해야 함 sudo vi /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl K3s 설정 파일에 아래 내용 추가 version = 2 [plugins] [plugins."io.containerd.grpc.v1.cri"] stream_server_address = "127.0.0.1" stream_server_port = "10010" enable_selinux = false enable_unprivileged_ports = true enable_unprivileged_icmp = true sandbox_image = "rancher/mirrored-pause:3.6" [plugins."io.containerd.grpc.v1.cri".containerd] default_runtime_name = "nvidia" [plugins."io.containerd.grpc.v1.cri".cni] bin_dir = "/var/lib/rancher/k3s/data/dc43f496a0a9ac19d3b2444d390db38e0cfb38e672721f838b075422b8734994/bin" conf_dir = "/var/lib/rancher/k3s/agent/etc/cni/net.d" # 아래부터 nvidia runtime 설정을 위해 추가하는 내용 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] privileged_without_host_devices = false runtime_engine = "" runtime_root = "" runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options] BinaryName = "/usr/bin/nvidia-container-runtime" K3s 재시작 sudo systemctl restart k3s.service Nvidia device plugin 설치 Nvidia device plugin 설치는 Nvidia 공식 문서를 참고하여 진행 kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.3/nvidia-device-plugin.yml Nvidia device plugin 설치 확인 kubectl get pods -n kube-system | grep nvidia-device-plugin # Pod 확인(예시) nvidia-device-plugin-daemonset-xxxxx 1/1 Running 0 2m K3s GPU 세팅 테스트 GPU 사용 가능 여부 확인 GPU 사용 가능 여부 확인 클러스터에 테스트용 Pod 생성 $ cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: restartPolicy: Never containers: - name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2 resources: limits: nvidia.com/gpu: 1 # requesting 1 GPU tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule EOF Pod 생성 확인 kubectl logs gpu-pod # Pod 정상 로그 확인(예시) [Vector addition of 50000 elements] Copy input data from the host memory to the CUDA device CUDA kernel launch with 196 blocks of 256 threads Copy output data from the CUDA device to the host memory Test PASSED Done 추가 노드 GPU 세팅 추가 노드에 사용을 위해 그래픽 카드 드라이버 설치와 Nvidia Container Toolkit, K3s 설정 필요 추가 노드에도 동일하게 그래픽 카드 드라이버 설치 및 Nvidia Container Toolkit 설치 추가 노드에도 동일하게 K3s 설정 파일 수정 및 K3s 재시작 필요 참고 K3s 공식 문서 Nvidia 공식 문서 Nvidia device plugin