쿠버네티스에서 GPU를 사용하는 원리와 설정방법
- 쿠버네티스에서 GPU를 사용하려면 OS 설정과 쿠버네티스 설정 두 가지가 필수적입니다. ⚙️
- 운영체제와 프로세스는 GPU를 직접 제어할 수 없으므로, GPU 드라이버와 GPU 디바이스 파일이 중간 매개체 역할을 합니다. 🌉
- GPU 드라이버는 OS 커널이 GPU를 제어하도록 돕는 소프트웨어이며, 밴더사별로 설치 방법이 다릅니다. 💾
- 리눅스에서 GPU 하드웨어에 접근하려면
/dev 디렉토리 내에 GPU를 대표하는 디바이스 파일이 필요합니다. 📁
- GPU 라이브러리(예: PyTorch, TensorFlow)는 개발자가 저수준 시스템 호출 없이 고수준 함수로 GPU를 쉽게 사용할 수 있도록 돕는 필수적인 추상화 계층입니다. 📚
- 프로세스는 유저 모드에서 실행되고 커널은 커널 모드에서 실행되므로, GPU 라이브러리는 내부적으로 시스템 호출을 통해 GPU 드라이버에 요청을 전달합니다. 🚀
- 쿠버네티스 컨트롤 플레인이 노드의 GPU 존재를 인식하고 파드 스케줄링을 가능하게 하려면 디바이스 플러그인(예: NVIDIA Device Plugin) 설치가 필수적입니다. 🔌
- 파드 내 컨테이너는 격리되어 있으므로, GPU 라이브러리와 GPU 디바이스 파일은 컨테이너 내부로 마운트되어야 합니다. (GPU 드라이버는 커널에 있어 공유됨) 🔗
- GPU 컨테이너 툴킷(예: NVIDIA Container Toolkit)은 GPU 라이브러리와 디바이스 파일을 컨테이너 시작 전에 자동으로 주입(inject)하여 수동 마운트의 번거로움을 없애줍니다. 🛠️
- 컨테이너 툴킷은
prestart 훅을 사용하여 컨테이너 런타임(예: nvidia-container-runtime)이 컨테이너 시작 전 필요한 파일들을 자동으로 찾아 주입하는 방식으로 작동합니다. 🎣
- 전체 GPU 설정 과정을 자동화하고 간소화하기 위해 밴더사에서 제공하는 쿠버네티스 오퍼레이터(예: NVIDIA GPU Operator)를 사용하는 것이 일반적입니다. 🤖
- AWS EKS 환경에서는 EKS 최적화 AMI(NVIDIA 타입)를 사용하여 GPU 드라이버와 컨테이너 툴킷을 미리 설치할 수 있어 운영 편의성을 높일 수 있습니다. ☁️
데브허브 | DEVHUB | 쿠버네티스에서 GPU를 사용하는 원리와 설정방법