Kubeflow는 Kubernetes를 기반으로 구축된 오픈소스 플랫폼으로, 데이터 준비, 모델 훈련, 하이퍼파라미터 튜닝, 모델 배포 및 모니터링 등 각 단계를 포괄하는 표준화되고 통합된 도구 세트를 제공함으로써 AI 모델의 실제 적용 과정을 크게 간소화합니다. 현재 많은 데이터 과학자와 머신러닝 엔지니어가 자주 사용하는 플랫폼으로 자리 잡았습니다.
그러나 많은 개발자가 Kubeflow 사용 시 GPU 리소스 분할이 불가능한 문제를 겪습니다. 플랫폼 특성상 단일 컨테이너가 전체 GPU 리소스를 점유하기 때문에, 프로젝트에 필요한 리소스가 적을 경우 일부 GPU 컴퓨팅 자원이 유휴 상태로 방치되어 효율적으로 활용되지 못합니다. 본 글에서는 인피니틱스의 ixGPU 모듈을 활용해 Kubeflow에서 GPU 분할을 구현하는 방법을 단계별로 안내합니다.
Kubeflow 플랫폼에서 ixGPU 모듈을 활용한 GPU 탄력적 분할
맞춤형 YAML PodDefault 구성
Tesla P4 GPU를 예시로 GPU 분할을 시연합니다. ixGPU 모듈을 Kubeflow에 적용하기 전에 YAML 파일을 준비해야 합니다. poddefault1.yaml과 poddefault2.yaml 두 개의 YAML 파일을 준비했습니다.
그림과 같이 아래 두 명령어를 통해 두 YAML 파일에 정의된 PodDefault 리소스의 상세 구성을 확인할 수 있습니다.
cat poddefault1.yaml
cat poddefault2.yaml
이 두 yaml 파일은 서로 다른 PodDefault 구성을 정의하며, Kubeflow 환경에서 특정 레이블이 지정된 Pod에 대해 기본적으로 다른 크기를 할당하여 Tesla P4 GPU 메모리 리소스를 1GB와 3GB로 분할합니다.

다음으로 apply yaml 명령어를 실행하여 yaml 파일에서 정의된 PodDefault 구성, 즉 GPU 분할 구성 정보를 읽어와 Kubernetes 클러스터에 적용합니다.
kubectl apply -f poddefault1.yaml
kubectl apply -f poddefault2.yaml
이제 kubectl get poddefault -A 명령어를 입력하면 현재 Kubernetes 클러스터 내 모든 네임스페이스에 존재하는 모든 PodDefault 리소스의 상세 정보를 조회할 수 있습니다.

Kubeflow Notebooks GPU 분할
사전 작업 준비가 완료되면 Kubeflow 플랫폼으로 이동하여 새로운 노트북 컨테이너를 생성합니다.

아래의 Advanced Options를 클릭하면 Configurations 옵션에서 방금 추가한 두 개의 GPU 리소스 사양인 Tesla P4 1GB와 Tesla P4 3GB를 확인할 수 있습니다.

두 개의 컨테이너(notebook1의 1GB와 notebook2의 3GB)를 각각 생성한 후, 컨테이너의 리소스 할당이 실제로 분리되었는지 확인할 수 있습니다. CONNECT를 눌러 notebook1의 Jupyter Lab을 엽니다.

이어서 !nvidia-smi 명령어를 통해 현재 컨테이너의 리소스를 확인할 수 있습니다. 그림에서 보듯이, notebook 1의 메모리 리소스는 1GB입니다.

notebook 2도 동일한 단계로, CONNECT를 눌러 Jupyter Lab을 시작합니다.
!nvidia-smi 명령어를 입력하면 해당 컨테이너에 3GB의 메모리 리소스가 할당된 것을 확인할 수 있습니다.

이렇게 하면 Kubeflow 단일 GPU 리소스 탄력적 분할이 완료됩니다! 아주 간단하지 않나요?
다음으로, Kubeflow Pipeline 기능에 ixGPU 모듈을 적용하는 방법을 실제 시연해 보겠습니다. 이를 통해 전체 프로세스 내 다양한 작업 목표 요구사항에 맞춰 필요한 GPU 메모리 리소스를 할당함으로써, 보다 정밀하고 효율적인 탄력적 분배를 실현하여 컴퓨팅 효율을 극대화할 수 있습니다.
ixGPU 모듈을 Kubeflow Pipeline에 통합하여 GPU 리소스를 효율적으로 할당합니다.
이 예제에서는 파이프라인에 모델 훈련(Training)과 테스트(Testing)라는 두 가지 프로세스를 간단히 설정합니다.
머신러닝 파이프라인 GPU 리소스 할당 사전 설정
pipeline.py 파일은 Kubeflow Pipeline을 정의하는 Python 스크립트로, 트레이닝(Training)과 테스트(Testing) 두 단계에 대해 GPU 리소스 할당을 먼저 정의합니다. 트레이닝 단계는 컴퓨팅 파워 요구량이 크기 때문에 3GB의 GPU 메모리를 할당했으며, 테스트 단계는 컴퓨팅 파워 요구량이 낮아 1GB의 리소스를 할당했습니다. 관련 코드는 아래 그림을 참조하십시오.

다음으로 TERMINAL에서 python pipeline.py를 입력하여 전체 워크플로우를 컴파일합니다. 실행 후 왼쪽 목록에 mnist-pipeline.yaml 파일이 표시되면, 이는 Python 스크립트가 실행되어 Python 코드에서 정의한 전체 머신러닝 워크플로우가 Kubeflow Pipeline 규격에 맞는 YAML 파일로 컴파일되었음을 의미합니다.
Kubeflow 플랫폼 파이프라인 구성
이제 Kubeflow의 파이프라인 페이지로 이동하여 오른쪽 상단의 ‘+ 파이프라인 업로드’를 클릭하여 새로운 파이프라인 버전을 생성할 수 있습니다.

Upload a file 옵션을 선택하고 방금 컴파일한 mnist-pipeline.yaml 파일을 업로드합니다. 이는 로컬에서 개발 및 정의된 머신러닝 워크플로를 Kubeflow 클러스터에 배포하여 실행 및 관리하기 위한 핵심 단계입니다.

생성 후 Kubeflow Pipelines 사용자 인터페이스에는 성공적으로 업로드된 mnist-pipeline의 개요 페이지가 표시됩니다. + Create run을 눌러 머신러닝 파이프라인 실행을 시작할 수 있습니다.

훈련 프로세스 실행이 완료된 후, 로그를 확인해 볼 수 있습니다.

이 머신러닝 모델 훈련 워크플로우에서 우리는 3GB의 GPU 메모리 리소스만을 사용해 훈련 작업을 성공적으로 완료했습니다.

다음으로 테스트 작업의 실행 로그를 확인할 수 있습니다.

우리는 GPU를 성공적으로 분할하고 테스트 작업에 1GB의 리소스를 할당했습니다.

결론
이상으로 Kubeflow 플랫폼에서 ixGPU 모듈을 활용하는 전체 가이드를 마치겠습니다!
동영상 강의를 보시려면 아래 영상을 참고해 주세요.
인피니틱스의 ixGPU 모듈은 기업이 GPU 컴퓨팅 자원을 더욱 유연하게 활용할 수 있도록 지원합니다. ixGPU 모듈과 Kubeflow의 GPU 분할 적용 사례를 살펴보신 후, 이 기능에 관심이 생기셨나요? 더 많은 정보를 원하시면 저희에게 연락 주세요!
ixGPU 모듈의 핵심 장점을 자세히 알고 싶으시다면 해당 글을 참고하세요: Kubeflow의 한계를 뛰어넘다: 디지털 무한 (인피니틱스) ixGPU 모듈로 GPU 유연한 분할과 효율적 활용 실현!