메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

쿠버네티스는 아는데, 쿠브플로는 뭐죠?

한빛미디어

|

2022-02-07

|

by 조시 패터슨 외

17,824

쿠브플로는 확장 가능하고 포터블(portable)한 머신러닝 작업 워크로드를 개발, 오케스트레이션, 배포, 운영하기 위한 오픈소스 쿠버네티스 네이티브 플랫폼입니다. 쿠버네티스처럼 새롭게 등장한 플랫폼에서 머신러닝 툴을 만들기 위해 등장했습니다. 구글의 내부 ML 파이프라인에 기초한 클라우드 네이티브 플랫폼이기도 합니다. 

 

"

2016년 구글 넥스트에서 구글 클라우드 플랫폼(GCP)에 기반한 클라우드 머신러닝(클라우드 ML)이 세상에 소개됐다. 

이때 발표된 구글의 클라우드 ML이 쿠브플로의 전신이다. 

이후 2017년 12월, 쿠브콘에서 데이비드 아론칙과 제러미 루이가 쿠브플로의 첫 번째 버전을 발표한다. 

2018년에는 v0.1, v0.2가 차례로 발표되었다. 

초기에 3명이었던 프로젝트의 엔지니어는 100명을 넘어섰고, 

22개 회원 조직이 참여할 만큼 프로젝트는 지속적으로 성장하고 있다.

"

 

쿠브플로 프로젝트는 쿠버네티스에 ML(머신러닝) 워크플로를 배포하는 것을 단순하고, 포터블하게 하며, 확장 가능하도록 하는 데 전념합니다. 그래서 멀티 클라우드, 하이브리드 클라우드화되는 세상에서 쿠브플로를 운영하는 것은 점점 더 중요해지고 있습니다. 시장이 성장하면서 쿠버네티스를 채택하는 사례도 많아졌죠. 

 

쿠브플로는 쿠버네티스에서 머신러닝 인프라스트럭처를 실행하기 위한 기본적인 방법으로 시작되었습니다. 

 

쿠브플로를 이야기하자면 쿠버네티스를 빼 놓을 수 없습니다. 쿠버네티스의 개발과 채택에는 두 가지 원동력이 있는데요. 하나는 산업에서 머신러닝이 진화하고 있다는 것이고, 나머지는 쿠버네티스가 실질적 인프라스트럭처로 부상했다는 것입니다.

 

docker_kubenetes.jpg

 

쿠버네티스와 도커

쿠버네티스는 효과적인 방식으로 프로덕션에서 노드들의 클러스터를 조직화하도록 만들어진 컨테이너들을 위한 오케스트레이션 시스템입니다. 쿠버네티스는 스케줄링 장치인 파드(pod, 각 파드는 하나 이상의 컨테이너를 포함)라는 아이디어를 기반으로 동작합니다. 

 

이런 파드는 높은 접근성을 제공하기 위해 클러스터의 호스트들에 분산되어 있습니다. 쿠버네티스 그 자체는 완성된 솔루션이 아니고 인기 있는 컨테이너 기술인 도커와 같은 툴과 통합되어 사용합니다.

 

컨테이너 이미지는 가볍고 독립되어 있으며 코드, 런타임, 시스템 도구, 시스템 라이브러리, 세팅 등 실행을 위한 모든 것이 포함된 소프트웨어 조각의 실행 가능한 패키지입니다. 

 

도커 컨테이너를 사용하면 로컬, 테스팅, 스테이징, 프로덕션 환경들 사이의 동등성을 누리기 쉽습니다. 컨테이너는 팀들이 같은 소프트웨어 아티팩트나 이미지를 주피터 노트북과 클라우드 환경을 포함한 모든 환경에서 실행하도록 해줍니다. 

 

컨테이너(예를 들면 도커)나 쿠버네티스를 채택하는 주요 이유는 결합성, 이식성, 확장성에 내재된 문제들을 해결할 우수한 인프라스트럭처 솔루션이기 때문입니다. 특히 쿠버네티스는 여러 머신(온프레미스, 클라우드, 그 둘의 조합 등) 사이에서 관리되어야 하는 컨테이너가 많을 때 빛을 발합니다.

 

도커와 쿠버네티스는 경쟁자가 아니라 상호보완적인 기술입니다. 도커는 이미지와 각각의 컨테이너를 관리하기 위한 것이고, 쿠버네티스는 컨테이너들의 파드들을 관리하는 용도입니다. 

 

도커는 패키징, 컨테이너화된 애플리케이션 배포에 대한 공개적인 표준을 제공했지만 컨테이너 오케스트레이션의 문제를 해결하지 못했습니다. 이 분야의 쿠버네티스 경쟁자로는 메소스(Mesos)나 도커 스웜(Docker Swarm) 등이 있지만 산업에서 쿠버네티스가 컨테이너 오케스트레이션을 위한 표준이 되었습니다.

 

 

kubeflow_380.jpg

 

쿠브플로는 언제 써요?

쿠브플로는 쿠버네티스에 머신러닝 워크플로를 사용하기 위한 방법으로 다음과 같은 경우에 사용합니다.

 

● 머신러닝 모델을 다른 환경(로컬, 온프레미스, 클라우드 등)에서 트레인(train)하고, 서빙(serve)하고 싶은 경우 

● 머신러닝 트레이닝 잡(텐서플로 잡 이외에도)을 주피터 노트북을 이용해 관리하는 경우 

● 개인 컴퓨터에서 접근이 불가능한 추가 CPU, GPU 같은 리소스를 이용해 트레이닝 잡을 시작하는 경우

● 머신러닝 코드를 다른 라이브러리로부터 합치려고 하는 경우

 

때로는 마지막 이유처럼 텐서플로 코드를 다른 프로세스들과 합치길 원할 수 있습니다. 예를 들어 텐서플로와 에이전트를 사용해 강화 학습 모델 트레이닝 데이터를 만들어내기 위한 시뮬레이션을 실행할 수 있습니다. 쿠브플로 파이프라인을 이용하면 이러한 머신러닝 워크플로 두 개의 다른 부분을 함께 연결할 수 있습니다.

 

보통 머신러닝 플랫폼을 이용해서 ‘랩 및 팩토리’와 비슷한 운영 패턴을 가지길 원합니다. 이 방식에서 데이터 사이언티스트는 ‘랩’에서 새로운 아이디어를 탐색할 수 있고, 원하는 체제를 찾으면 그것을 ‘팩토리’로 옮깁니다. 그렇게하면 모델을 만드는 워크플로가 일관적이고 지속적으로 운영될 수 있습니다. 머신러닝 워크플로의 일반화된 설명은 다음 그림을 통해 보다 명확하게 그려볼 수 있습니다

 

2022-02-07 AM 11-27-06.jpg

[일반화된 머신러닝 워크플로]

 

 

쿠브플로는 어떤 문제를 해결할까?

쿠브플로의 목표는 머신러닝 워크플로를 쿠버네티스에 배포하는 것을 단순화하는 것입니다. 

 

데이터 사이언티스트가 쿠버네티스 API를 직접 사용하기에 쿠버네티스는 너무 로 레벨(low-level) 시스템입니다. 데이터 사이언티스트들에게는 쿠버네티스 API의 복잡성 말고도 알아야 할 기술이 너무 많습니다. 

 

최근 시장 흐름을 보면, 컨테이너에 파이썬 머신러닝 모델을 넣을 때 컨테이너를 쿠버네티스 파드에 배포하는 것이 자연스러운 단계입니다. 많은 머신러닝 애플리케이션이 쿠버네티스에 배포되고, 그럴수록 중력 효과처럼 더 많은 머신러닝 업무가 쿠버네티스로 옮겨가게 됩니다. 

 

주피터 노트북 서버나 파이프라인 등이 일관되고 안전한 분산 시스템으로 동작하게 만들기 위해서는 모든 ‘연결’ 코드와 함께, 여러 가지 염두에 두어야 할 세부 사항이 많습니다. 많은 경우에 데이터 사이언스 일은 완전한 애플리케이션이 아닌 스크립트로 이루어져 있습니다. 따라서 처음부터 이 스크립트를 프로덕션 워크플로로 배포하는 것이 힘듭니다. 

 

쿠버네티스 API 외에도 다른 실행 요소를 통합하기 위한 코드와 워크플로 오케스트레이션 같은 요소를 오케스트레이션하기 위한 코드를 직접 만들어야 합니다. 단순히 쿠버네티스에 노드를 더하고 유기적인 플랫폼으로 동작하기를 기대하는 것은 쉽지 않습니다. 

 

조직들이 빠르게 클라우드 환경에 사용자를 셋업하는 자동화 스크립트를 만들고, 잡의 집합이나 잡들을 실행하고, 환경을 재설정하는 것은 일반적인 일입니다. 그러나 통합 이슈가 복잡할 때는 그 모든 일들이 아주 성가시게 합니다.

 

데이터 사이언티스트가 쿠버네티스 API 사용을 익히는 데 집중하는 대신 모델을 개발, 트레이닝, 테스팅, 배포하는 것에 집중할 수 있도록 지원해줄 필요가 있습니다. 쿠버네티스의 핵심적인 API 이상으로 쿠브플로로 해결할 수 있는 문제는 다음과 같습니다.

 

● 더 빠르고 일관적인 배포 

● 안전한 보안을 위해 포트나 컴포넌트 접근에 대한 더 나은 통제

● 리소스 공급과잉에 대한 보호로 비용 절감

● 완성된 일이 할당 해지되는 것을 보호하여 비용 절감

● 워크플로 오케스트레이션과 메타데이터 수집

● 중앙화된 모니터링과 로깅

● 모델을 안전하고 확장이 가능하도록 프로덕션으로 옮기는 인프라스트럭처

 

쿠브플로는 쿠버네티스와 텐서플로의 합성어입니다. 세 프로젝트 모두 구글에 있는 팀에서 오픈소스 프로젝트로 시작되었습니다. 쿠브플로가 단순히 텐서플로 워크플로나 모델을 프로덕션에 넣기 위해 시작되었지만 현재는 그 이상으로 진화했습니다

 

(그렇다고 쿠브플로가 텐서플로만 사용하는 것은 아닙니다. 사용자는 주피터 노트북이나 워크플로에 맞추어 원하는 머신러닝 프레임워크를 선택할 수 있습니다.) 

 

오늘날 쿠브플로는 다양한 종류의 머신러닝 프레임워크(XGBoost, 파이토치 등)를 실행하는 컨테이너를 위한 워크플로를 오케스트레이션할 수 있습니다. 어떤 경우에는 머신러닝이 아닌 멀티테넌트 환경을 위한 주피터 노트북 서버를 관리하는 데 쿠브플로를 사용할 수도 있습니다.

 

쿠브플로 잡은 주피터 노트북일 수도 있고, 여러 개의 파이프라인이 순서대로 연결된 파이썬 스크립트 잡일 수도 있습니다. 쿠브플로 잡은 파드에 있는 컨테이너에서 kubectl을 이용해 파이썬 스크립트를 실행하는 것처럼 단순할 수도 있습니다. 

 

보통 머신러닝 모델을 만들기 위한 잡이나 순차적인 여러 개의 잡 실행을 위한 머신러닝 워크플로를 셋업하기 위해 주피터 노트북, 커맨드라인 인터페이스(CLI), 파이프라인 등을 사용합니다. 

 

이러한 워크플로는 로 레벨 쿠버네티스 API를 넘어 쿠버네티스를 인프라로 사용합니다. 쿠버네티스로 관리하고, 스케줄링한 서로 다른 하드웨어의 서로 다른 머신러닝 플랫폼을 안전하게 오케스트레이션하기 위해 쿠브플로를 인프라스트럭처로 사용합니다. 

 

쿠브플로는 쿠버네티스 API와 사용자 사이의 레이어이고, 확장 가능한 멀티테넌트 머신러닝 플랫폼으로 이들을 지속적으로 운영하는 것을 가능하게 합니다. 

 

 


 

이 글은 <쿠브플로 운영 가이드> 도서 내용 일부를 편집하여 작성되었습니다. 머신러닝 애플리케이션을 보다 쉽게 운영 관리하는 데 사용하는 'Kubeflow'에 대한 자세한 정보는 하기 책에서 만나볼 수 있습니다.  

 

표지_쿠브플로 운영 가이드_300.jpg


『쿠브플로 운영 가이드』

댓글 입력
자료실

최근 본 상품0