마구잡

Kubernetes Nvidia Gpu Component의 상관관계 본문

Kubernetes

Kubernetes Nvidia Gpu Component의 상관관계

MAGUJOB 2024. 10. 24. 22:19
728x90

Kubernetes와 Nvidia GPU Component의 상관관계

IT 업계 더 나아가 전반적인 모든 기업들이 AI로 뜨거운 지금, 당연하게도 kubernetes또한 GPU 자원 사용을 지원하고 kube-flow, air-flow, Ollama등 많은 오픈소스들을 사용 할 수 있게 되었다.

 

이 중 시장을 독점하고 있는 Nvidia의 GPU 자원을 사용하기 위한 Component들이 어느 순서로 어떤 동작을 어떻게 진행하는지 간한하게 알아본다.

 

( 공식 사이트에서 발췌한 내용을 기반으로 작성하였으나, 명확하지 않은 부분은 경험을 토대로 작성하였습니다.

이는 명확한 정보가 아닐 수 있음을 알려드립니다. )


공식 사이트

728x90

( 광고 클릭은 큰 힘이 됩니다! )

 

Architecture Overview — NVIDIA Container Toolkit 1.16.2 documentation

where version is used to represent the NVIDIA Container Toolkit version. Note In the past the nvidia-docker2 and nvidia-container-runtime packages were also discussed as part of the NVIDIA container stack. These packages should be considered deprecated as

docs.nvidia.com


영역과 컴포넌트

 

Kubernets 클러스터(이하 클러스터)에서 GPU를 사용하기 위해선 각 Compnent(이하 컴포넌트)들이 두 가지 영역 위에서 동작한다.

이번 글에서는 호스트 영역에서의 요소들에 대해 다루도록 한다.



추가적으로 클러스터 영역에서는 GFD 등 정보가 빈약한게 너무 많아 대부분을 직접 GPU를 운영하여 더듬거리며 파악했다.

호스트 영역에서의 컴포넌트

호스트 영역에서는 다양한 컴포넌트들이 있다.

당연히 실장된 GPU가 있을것이며 그 위로 OS와 장치를 연결시켜주는 Driver및 개발을 위한 CUDA가 있을것이다.

 

다만 클러스터에서 GPU 자원을 사용하기 위해선 기존에 사용하던 kubelet, containerd, runc만으로 한계가 있다.아래 기존 container 생성 방식과 GPU 컴포넌트를 거쳐 진행되는 두 이미지를 보자

단순화한 기존 방식의 로직

 

GPU 컴포넌트가 추가된 로직 출처: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/arch-overview.html

 


위 이미지 처럼 기존 로직 사이에 GPU 컴포넌트가 추가 된것을 확인 할 수 있다.

위 이미지가 시사하는 바는 Containerd만으로는 RunC에게 GPU 자원을 전달할 수 없음을 뜻 하고 RunC 또한

마지막 nvidia-container-runtime-hook을 통해 GPU관련 라이브러리, 장치 정보등을 생성된 컨테이너로 넘긴다.

 

사실 기존 로직또한 위 이미지보다 훨씬 복잡하다.

ETCD와 API서버가 통신해서 일련의 과정을 거치고 난 뒤 Kubelet을 통해 POD(container)가 생성되는 방식이나 이 글에서 다루려는 내용과 약간 벗어나기에 간소화 시켰다.

컴포넌트의 역할

아래 이미지는 호출 순서에 따라 어떠한 동작이 실행되는지 정리한다.

 

 

그림이 잘 와닿지 않는거 같아 표로 정리하자면 아래와 같다.

공식 Docs 또한 설명이 그리 친절하진 않다.
아마 이를 알기 위해선 코드 단 혹은 LOG 분석이 필요해 보인다.
컴포넌트 수행
Contianerd 컨테이너의 생명주기를 관리하는 고수준 런타임

GPU 자원을 필요로 하는 컨테이너의 경우 RunC를 바로 호출하지 않고 OCI 표준을 준수하는
nvidia-container-runtime을 호출한다.
nvidia-container-runtime RunC 스펙을 받아 nvidia-container-runtime-hookprestart hook으로 주입한 후, 수정된 RunC 스펙을 호스트에 구성되어있는 RunC에 전달한다. 

( 말이 어려운데 GPU 관련 설정을 추가해 RunC 스펙을 전달하는 듯 보임 )
RunC 기본적인 저수준 런타임으로 OCI 표준을 준수하는 런타임과 통신한다.
컨테이너 스펙을 전달받아 컨테이너를 생성, 시작한다.

이때 컨테이너가 시작하기 전 상위 런타임에서 전달 받은 prestart hook에 의해 nvidia-container-runtime-hook을 호출한다.
nvidia-container-runtime-hook RunC의 prestart hook 인터페이스를 구현하는 실행 파일이 포함되어 있다.

이 스크립트는 컨테이너가 생성된 후, 시작되기 전에 RunC에 의해 호출되며, 컨테이너와 연관된 config.json 파일에 접근할 수 있다.

스크립트는 config.json의 정보를 사용하여, 적절한 플래그와 함께 nvidia-container-cli를 호출한다 (라이브러리 호출).

가장 중요한 요소는(플래그) 어떤 특정 GPU 장치가 컨테이너에 주입될지를 결정하는 역할을 한다.
nvidia-container-library and CLI 이 구성 요소들은 NVIDIA GPU를 활용하여 GNU/Linux 컨테이너를 자동으로 설정하는 라이브러리와 간단한 CLI 유틸리티를 제공한다. 커널의 기본 기능을 사용하며, 컨테이너 런타임과는 독립적으로 설계되었다.

libnvidia-container는 다양한 런타임에서 NVIDIA GPU 지원을 컨테이너에 주입할 수 있도록 하는 API랩퍼 CLI(nvidia-container-cli라고 불리는)를 제공한다.

 

패키지 명 포함 요소
libnvidia-container1
nvidia-container-cli
nvidia-container-cli
nvidia-container-toolkit nvidia-container-runtime-hook
nvidia-container-toolkit-base nvidia-container-runtime
nvidia-container-toolkit nvidia-container-runtime-hook
nvidia-container-toolkit CLI

중요 - 치명적 보안 취약점

더보기

 

NVIDIA Container Toolkit 보안 취약점 (2024년 9월)

https://nvidia.custhelp.com/app/answers/detail/a_id/5582

 

NVIDIA Support

Details This section provides a summary of potential vulnerabilities that this security update addresses and their impact. Descriptions use CWE™, and base scores and vectors use CVSS v3.1 standards. CVE ID Description Vector Base Score Severity CWE Impac

nvidia.custhelp.com

 

NVIDIA는 NVIDIA Container Toolkit  NVIDIA GPU Operator의 보안 업데이트를 발표했으며, 아래의 두 가지 주요 취약점을 수정했다. 

 

CVE ID 설명 점수 심각도 CWE 영향
CVE-2024-0132 TOCTOU(Time-of-check Time-of-Use) 취약점으로, 기본 설정에서 특수하게 제작된 컨테이너 이미지가 호스트 파일 시스템에 접근할 수 있음. 성공적인 공격은 코드 실행, 서비스 거부, 권한 상승, 정보 유출, 데이터 변조를 초래할 수 있음. 9 Critical CWE-367 코드 실행, 서비스 거부, 권한 상승, 정보 유출, 데이터 변조
CVE-2024-0133 기본 동작 모드에서 특정 컨테이너 이미지가 호스트 파일 시스템에 빈 파일을 생성할 수 있는 취약점. 성공적인 공격은 데이터 변조로 이어질 수 있음. 4.1 Medium CWE-367 데이터 변조

 

취약점에 대한 영향

 

 CVE-2024-0132: 이 취약점은 시간 검사와 시간 사용의 불일치(TOCTOU) 문제로, 특정 조건에서 공격자가 호스트 파일 시스템에 접근할 수 있습니다. 성공적으로 악용될 경우 시스템에 심각한 보안 위협을 가할 수 있으며, 코드 실행, 정보 유출, 권한 상승, 데이터 변조 등의 심각한 영향을 미칠 수 있음.

 CVE-2024-0133: 이 취약점은 특수 제작된 컨테이너 이미지가 호스트 파일 시스템에 빈 파일을 생성할 수 있게 하는 문제입니다. 이로 인해 데이터 변조가 발생할 가능성이 있음.

 

영향 받는 제품 및 업데이트된 버전

 

CVE ID 영향 받는 제품 플랫폼/OS 영향 받는 버전 업데이트된 버전

CVE‑2024-0132CVE-2024-0133 NVIDIA Container Toolkit Linux v1.16.1 이하 v1.16.2

CVE‑2024-0132CVE-2024-0133 NVIDIA GPU Operator Linux 24.6.1 이하 24.6.2

 

NVIDIA의 권장 사항

 

 시스템 보호를 위해 NVIDIA Container Toolkit  NVIDIA GPU Operator의 보안 업데이트를 설치해야 한다.

 해당 보안 업데이트는 NVIDIA Container Toolkit  NVIDIA GPU Operator 문서의 설치 섹션에 설명된 대로 설치할 수 있다.

 

이 정보는 NVIDIA 보안 공지를 기반으로 하며, 시스템 관리자는 이 취약점이 자신들의 환경에 미치는 영향을 평가한 후, 즉시 패치를

적용하는 것이 권장됨.

 

잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.

728x90