클레온 MLOps 세미나

Daeyang Cho
KLleon
Published in
9 min readJul 18, 2022

DevOps를 넘어 MLOps로

들어가며

클레온에서는 어떻게 하면 좋은 딥러닝 모델을 빠르고 안정적으로 고객들에게 제공할 수 있을지 고민합니다.

더 좋은 시스템을 만들기 위해 세미나를 진행하여 MLOps에 대해 함께 공부하고 있고, 사내 시스템에도 적용하고 있습니다.

클레온의 MLOps 세미나는 총 4번의 세션으로 구성되었으며,

  • Docker란 무엇인가
  • Kubernetes란 무엇인가
  • Kubeflow란 무엇인가
  • NAS와 DVC란 무엇인가

라는 내용으로 진행하고 있습니다.

지금까지 세 번의 세미나가 진행되었으며, 마지막 세미나만 남아있습니다.

이번 포스트에서는 앞서 있었던 세 번의 세미나에서 어떤 재미난 이야기들이 나왔는지 공유하겠습니다.

MLOps seminar in KLleon with Deep Learning Engineer and Deep Learning scientists
Kubernetes로 진행한 두 번째 MLOps 세미나

MLOps introduction

가장 처음 나온 이야기는 ‘MLOps란 무엇인가’ 그리고 ‘왜 MLOps를 도입해야 하는가’에 대한 것이었고, 가장 핵심적으로 다룬 키워드는 자동화였습니다.

MLOps가 제공하는 다양한 가치가 있지만, 저희가 MLOps를 도입하는 가장 큰 이유는 자동화를 통해 긴 시간이 소요되는 딥러닝 모델의 라이프 사이클을 단축시키는 것입니다. 이를 통해 저희의 고객들이 더 빠르고 안정적으로 새로운 딥러닝 모델들을 만나볼 수 있을 것이라 기대하고 있습니다.

MLOps life cycle and pipeline image
MLOps 라이프사이클

Docker란 무엇인가

그다음으로 나온 이야기는 도커였습니다. 클레온은 앞으로 쿠버네티스를, 나아가서는 쿠브플로우를 활용할 예정에 있기 때문에 컨테이너와 이미지에 대해 알아야 했습니다.

‘도커가 왜 나오게 됐는지’ 역사에 대한 이야기부터 시작해 가상화 (Virtualization), 가상 머신 (Virtual machine)에 대한 이야기가 나왔습니다. 우선 가상 머신의 문제점인 무거운 Guest OS에 대해 이야기한 후 ’도커란 무엇인지’ 알아보는 시간을 가졌습니다.

Docker pycon first presentation
PyCon’13 Docker “The future of Linux Containers”

도커가 처음 세상에 알려졌었던 PyCon’13 영상을 보았는데요. 발표 제목은 “The future of Linux Containers”였습니다. 도커로 띄운 터미널에서 ‘Hello world’가 나오는 순간 컨퍼런스에 있는 사람들이 박수를 치는 모습이 참 인상적이었습니다.

이후에는 Docker의 동작 방식에 대해서 이야기를 나누었는데요! 도커의 경우 VM과 달리 Host Linux에 있는 namespace와 cgroups를 활용하여 가볍고 빠르게 컨테이너를 배포 및 관리한다는 것을 알 수 있었습니다.

나아가서 도커 명령어를 입력하면 컨테이너에 최종적으로 어떻게 전달되는지에 대해서도 이야기를 나누었습니다. dockerd, containerd, containerd-shim, runC에 대해 배웠으며 저희가 도커라고 부르는 것 안에 이렇게 많은 컴포넌트들이 있다는 것을 알 수 있었습니다.

추가적으로 Docker 이미지가 무엇인지, layer는 무엇인지, 이미지는 어떻게 만들 수 있는 것인지에 대해서 이야기를 나누고, 자주 사용되는 도커 커맨드를 공유했습니다.

마지막에는 각자 자리에서 해 볼 수 있는 실습 자료를 받아 진행해 보았는데요! MNIST GAN을 docker 안에서 돌려보는 것으로서, 도커 안에서 GPU를 사용했습니다. ‘도커란 무엇인지’에 자세히 알아보고 실습까지 해보는 알찬 시간이었습니다!

Kubernetes란 무엇인가

두 번째 세미나에서는 쿠버네티스에 대해 이야기를 나누었습니다.

여러 머신들에서 컨테이너를 사용하기 위해서는 컨테이너 오케스트레이션 시스템이 꼭 필요합니다. 컨테이너 오케스트레이션 시스템은 컨테이너 배포 및 오토 스케일링, 자원 관리 등의 자동화를 제공합니다. 컨테이너 오케스트레이션 시스템에는 여러 종류가 있지만, 저희는 가장 많이 쓰이고 안정적인 쿠버네티스를 사용하기로 결정했습니다.

먼저 쿠버네티스가 무엇이고 왜 필요한지에 대해서 이야기를 나누었는데요! 컨테이너 오케스트레이션의 정의 및 범위에 대해 알아보고, 어떤 것을 제공해 주는지 알아보았습니다.

이후에는 클레온에서 쿠버네티스를 사용해야 하는지에 대해 이야기를 나누었습니다.

기술팀과 개발팀의 경우

  • Agile하고 안정적으로 코드를 배포할 수 있습니다.
  • 오토 스케일링, 오토 힐링이 가능해집니다.
  • 여러 자원들을 bin-packing 하여 효율적으로 서버들을 활용할 수 있습니다

연구팀의 경우

  • 딥러닝 파이프라인을 자동화할 수 있습니다.
  • 딥러닝 학습 데이터의 전/후처리 들을 모듈화하여 컨테이너로 만들 수 있습니다.
  • 하이퍼 파라미터 튜닝에 활용할 수 있습니다.
  • 새로 만든 모델을 다른 팀에서도 쉽게 사용해 볼 수 있도록 컨테이너로 만들어서 제공할 수 있습니다.

다음으로는 쿠버네티스 하면 함께 나오는 단어인 마이크로 서비스에 대해 이야기를 나누었습니다. Netflix의 마이크로 서비스 아키텍처와 fault injection testing, 그리고 클레온에서는 어떻게 적용해 볼 수 있을지까지 이야기해 보았습니다.

이후에는 6개의 쿠버네티스 기본 모듈을 이론으로도 배우고 터미널에서 실제로 돌아가는 것도 함께 보았는데요. 쿠버네티스의 Node, Pod, Deployment, Service 등에 대해 배우고, 여러 명령어들과 오토 스케일링, 롤링 업데이트에 대해서 배웠습니다. 사용되는 자원을 측정하여 컨테이너가 오토 스케일링 되는 것을 보았을 때의 짜릿함은 아직도 잊을 수 없습니다.

Kubernetes cluster node pod
Kubernetes 모듈들

이후 시간에는 조금 더 심화 모듈인 Persistent Volume과 Persistent Volume Claim, 그리고 k8s-device-plugin을 통한 GPU adapter daemonset에 대해서 배웠습니다. 이번 세미나에서도 역시 배운 내용들을 실습해 보는 시간을 가졌습니다.

Kubeflow란 무엇인가

세 번째 세미나의 주제는 쿠브플로우였습니다.

우선 쿠브플로우라는 것이 무엇이고, 왜 필요한지에 대해 이야기를 나누었습니다.

머신러닝의 경우 긴 라이프 사이클을 가지고 있습니다. 데이터 수집부터 시작하여 데이터 전처리, 모델 학습, 검증, 배포까지 거쳐야 할 순서가 많습니다. 이러한 머신러닝의 긴 워크플로우를 자동화하는 것이 MLOps의 핵심이라고 볼 수 있으며, 이것을 해주는 플랫폼이 쿠브플로우라는 것을 알 수 있었습니다.

쿠브플로우는 머신러닝의 워크플로우를 간결하고 재사용이 가능하며, 좋은 확장성을 가질 수 있도록 만들어 주는 플랫폼입니다. 쿠브플로우를 통해 딥러닝 워크플로우를 여러 컴포넌트로 나누고, 각각을 재사용 가능한 형태로 만들 수 있습니다. 또, 워크플로우 프로세스를 시각화해주어, 현재 워크플로우의 어느 부분이 작업 진행 중인지 GUI를 통해 확인할 수 있다는 것을 알 수 있었습니다.

kubeflow dag pipeline
쿠브플로우 파이프라인 예시

쿠브플로우는 이름에서 알 수 있듯이 쿠버네티스 위에서 동작하여, 각각의 작업들을 컨테이너에서 실행시킵니다. 따라서 쿠버네티스가 가지는 장점들을 모두 활용할 수 있습니다. 작업이 컨테이너 이미지를 통해 실행되기 때문에, 이는 동일한 환경에서 재실행이 가능하도록 만들어줍니다. 또한, 컴포넌트를 실행시킬 때, 쿠버네티스 클러스터에 있는 자원을 활용할 수 있습니다.

쿠브플로우에서 사용되는 구성 요소들에 대해서도 배웠습니다. 우선 가장 핵심적이고 기본적인 개념인 컴포넌트와 파이프라인에 대해 먼저 배웠습니다.

파이썬에서는 kfp를 사용하여 원하는 함수를 컴포넌트화 할 수 있는데요. 나아가 어떻게 컴포넌트를 나누어야 재사용성이 증가하는지, 그리고 어떻게 해야 기존 파이썬 코드를 컴포넌트로 바꾸는 데에 비용을 최소화할 수 있는지에 대해서도 이야기를 나누었습니다. 또, 컴포넌트들을 합쳐서 파이프라인을 만들고, 만들어진 파이프라인을 yaml 파일로 저장하고 불러오는 것도 배웠습니다.

이후 Experiment, Run, Artifact에 대해서 이야기를 나누었습니다. 쿠브플로우 GUI를 통해 실제로 experiment와 run을 실행시키는 것을 볼 수 있었는데요. Run 과정에서 컴포넌트 하나하나가 실행되며 파이프라인이 진행되는 모습이 인상적이었으며, 학습이 진행되는 과정 중에 시각화를 통해 loss 그래프를 볼 수 있는 것도 매우 편리해 보였습니다. 마지막으로는 워크플로우 완료 후에 필요한 데이터를 artifact 형태로 저장하는 것도 확인할 수 있었습니다.

이번 세미나의 실습은 첫 번째 세미나에서 사용했었던 MNIST GAN을 쿠브플로우에 올려보는 것이었습니다. 실습을 통해 워크플로우를 고민하고 생성해 볼 수 있었으며, 쿠브플로우를 활용하면 기존에 하던 딥러닝 작업들을 편하게 쿠버네티스 위에서 할 수 있을 거라는 생각이 들었습니다.

마치며

이번 포스트에서는 클레온에서 진행한 MLOps 세미나에 대해서 함께 이야기를 나눠보았습니다.

클레온에서는 MLOps를 도입함으로써 좋은 딥러닝 모델을 빠르고 안정적으로 고객들에게 제공할 수 있을 것이라고 기대하고 있습니다.

앞으로도 클레온에서 어떻게 MLOps 시스템을 구축해 나가는지 공유드리도록 하겠습니다.

항상 많은 관심 부탁드립니다! 🙂

--

--