클레온 MLOps팀 소개 — (1) Infra 파트

Daeyang Cho
KLleon
Published in
10 min readSep 2, 2022

안녕하세요! 딥러닝 영상 생성 기술을 기반으로 한, 글로벌 AI 커뮤니케이션 기업 KLleon 클레온입니다.

오늘은 최근 클레온 연구센터에 신설된 MLOps 팀에 대해서 소개하도록 하겠습니다.

클레온의 연구 센터에서는 자동화를 통해 긴 시간이 소요되는 딥러닝 모델의 라이프 사이클을 단축시키고자 MLOps를 도입했는데요.
MLOps를 제대로 이해하고 잘 활용하고자 사내 세미나 등을 진행하며 함께 공부하고 있습니다.

Kubernetes로 진행한 두 번째 MLOps 세미나

MLOps팀 소개

클레온 연구 센터의 MLOps 팀은 두 가지 파트로 나뉘어 있습니다. Infra 파트와 Data 파트인데요.

오늘 글에서는 Infra 파트에 대해서 설명드리도록 하겠습니다. Data 파트는 2편에서 설명드릴 예정이니 2 편도 기대해 주세요!

KLleon의 MLOps팀

Infra 파트

Infra 파트는 두 가지 목표를 가지고 있는 파트입니다.

첫째는 사내에 필요한 HW/SW 인프라를 구축하는 일이고, 둘째는 사내에 있는 자원들 (e.g., GPU)을 최적화하여 효율적으로 사용하도록 관리하는 일을 합니다.

각 목표에 대한 로드맵, 지금까지 해온 일, 앞으로 할 일에 대해서 설명하고자 하니 클레온 연구 센터의 MLOps 팀에 함께 하시고 싶으신 분들은 끝까지 읽어주시면 좋을 듯합니다!

업무 1. HW/SW 인프라 구축

딥러닝 인프라 부재 시의 문제점

딥러닝을 연구하는 회사라면 갖고 있는 두 가지 고민이 있을 것입니다.

하나는 효율적으로 GPU 자원을 사용하는 것이고, 다른 하나는 길고 복잡한 딥러닝 모델 라이프 사이클을 단축시키는 것입니다.
클레온 역시 회사가 점점 커지고, 연구가 고도화되며 두 가지 문제점이 두드러지기 시작했습니다.

연구원분들의 원활한 딥러닝 학습을 위해 GPU를 많이 구매해두었는데, 항상 GPU를 사용하고 있는 것은 아니기에 전체적인 GPU utilization이 떨어지는 현상을 보였습니다.
GPU는 고가의 장비이기 때문에, 어떻게 하면 적은 수의 GPU로 많은 연구원분들이 모두 만족하며 사용할 수 있을지 고민하였습니다.

또한 클레온이 다루는 딥러닝 모델의 수가 늘어나고 학습해야 하는 데이터의 양이 늘어나면서 딥러닝 모델 라이프 사이클의 복잡도가 증가하고 관리가 어려워지는 문제점들이 생겼습니다.
딥러닝 모델의 학습 담당 연구원과 배포 및 서비스를 담당자 간의 소통도 더 많이 필요해졌습니다.

저희는 이 두 가지 문제를 해결하고자 kuberneteskubeflow를 도입하기로 했습니다.

kubernetes 클러스터를 통해 idle하게 사용되고 있지 않은 GPU들을 찾아서 활용하고, kubeflow의 파이프라인을 활용하여 딥러닝 모델 라이프 사이클을 자동화하고 단축시키는 것입니다.

로드맵

HW/SW 인프라 구축과 관련된 현재 저희의 로드맵은 자동 딥러닝 파이프라인을 구축하는 것입니다.
저희가 생각하는 자동 딥러닝 파이프라인은 사내의 모든 서버들을 kubernetes 클러스터로 구성하고, kubeflow와 같은 딥러닝 파이프라인 프레임워크를 사용하여, 데이터 수집 및 검수부터 모델 학습, 검증, 최적화, 배포까지 자동화되는 파이프라인입니다.

Kubeflow 파이프라인 예시 — data extract부터 serve model까지

해온 일

클레온 연구 센터에서는 MLOps 팀이 만들어지기 전부터 kubernetes를 통해 딥러닝 서비스를 제공하고 있었습니다.
Bare-metal 서버들을 묶어서도 사용하고, AWS의 EKS (Elastic Kubernetes Service)도 사용하였습니다.

이렇게 kubernetes를 구축 및 사용한 경험을 바탕으로, 현재 클레온 데이터 센터에도 kubernetes를 적용할 준비를 하고 있습니다.
딥러닝 서비스뿐만이 아니라, 딥러닝 학습에도 kubernetes를 적용하고자 합니다.
이를 위해 데이터 센터에 랙, 서버, 라우터, NAS 등을 어떻게 배치할지도 고민하고, 추후에 scale-up 했을 때 bottleneck이 될 부분을 미리 예상해서 scalable한 데이터 센터 구축에 힘쓰고 있습니다.

kubeflow도 구축하여 현재 테스트 및 간단하게 사용 중에 있습니다.
반복되는 데이터 전처리 부분들을 모듈화하였으며, 이를 통해 다양한 데이터 셋으로 딥러닝 학습하는 것을 자동화하였습니다.
이는 데이터 셋의 차이가 딥러닝 모델의 성능에 어떠한 영향을 끼치는지 분석하는데 굉장히 큰 시간 절약을 가능하게 했습니다.

앞으로 할 일

저희는 자동 딥러닝 파이프라인이라는 목표를 향해 열심히 달려나가고 있습니다.

안정적으로, 그리고 효율적으로 kubernetes 클러스터를 운영하기 위해서 어떠한 방법들을 적용하면 좋을지 끊임없이 고민하고 있습니다.
라벨링, GPU 자원 공유 및 스케줄링, 모니터링, Caching 등 여러 방면에서 고민하고 해결해야 할 부분들이 있습니다.

또한 어떻게 딥러닝 파이프라인을 구성하고 겹치는 부분들을 모듈화할지, GPU 자원과 storage 저장 공간을 어떻게 효율적으로 쓸지에 대해서도 고민해야 합니다.

구축 후에는 보안에도 신경 써야 하며 계속해서 크고 복잡해지는 회사 비즈니스 상황에 맞추어, 더 scalable한 프레임워크들을 적용하거나 visualize를 잘 해주는 프레임워크를 지속적으로 고도화하고 적용해야 합니다.

업무2. 자원 최적화

자원 최적화 부재 시의 문제점

Infra 파트는 사내 서버들의 자원 사용량을 모니터링하고 개선점을 찾아 최적화하는 일도 맡고 있습니다.
딥러닝 서비스나 딥러닝 학습 시에 자원적으로 bottleneck이 되는 부분을 찾아서 HW적으로 해결하기도 하고 SW적으로 해결하기도 합니다.

SW적으로 해결하는 대표적인 사례는, 딥러닝 코드가 GPU보다 CPU를 더 많이 사용하여 속도가 느린 경우가 있습니다.
이럴 때는, GPU utilization이 떨어지는 것을 확인하여, GPU를 더 잘 활용할 수 있는 코드 작성을 제안하거나 구현합니다.
또, GPU가 여러 장 들어있는 서버임에도 불구하고, GPU를 하나만 사용하는 경우 등에도 여러 GPU 사용하는 것을 권장하는 역할을 합니다.

또한 딥러닝 서비스의 작업 처리 스케줄러를 구현하는 역할도 합니다.
Priority 기반의 스케줄러를 구현하여, 사용자들의 SLO (Service-Level Objective)를 만족시키도록 딥러닝 서비스를 적절한 자원에 배치합니다.

클라우드 kubernetes의 오토 스케일링을 고도화하여 작업 요청량에 따라 GPU instance의 개수를 조절하는 역할도 합니다.
이는 고가의 GPU instance를 필요할 때만 사용하여, 큰 비용 절감 효과를 가져옵니다.

로드맵

자원 최적화 관련해서 저희의 현재 로드맵은 효율적인 GPU 자원 분배를 통한 50% 비용 절감입니다.
GPU 자원의 사용량을 모니터링하는 툴을 개발 및 고도화하여 항시 상태를 측정할 수 있어야 합니다.

또한, 모니터링한 결과에 대해 dynamic하게 대응할 수 있어야 하며, 지속적으로 전체적인 시스템을 분석하고 개선하여 자원 최적화를 이루어 냅니다.

해온 일

클레온 연구 센터에서는 Bare-metal 딥러닝 서버와 EKS 딥러닝 서버를 둘 다 사용합니다.
Bare-metal 서버의 경우 저희가 구매한 서버이기에 추가적으로 비용이 들지 않지만, 클라우드 딥러닝 서버의 경우 사용 시간에 대해 비용을 지불하고 있습니다.

저희는 EKS의 오토 스케일링 부분을 고도화하여, 작업 요청이 없을 때는 GPU insatnce를 모두 내리고, 작업 요청량에 따라 GPU instance를 띄우도록 구현하였습니다.
Bare-metal 딥러닝 서버에서 우선적으로 작업을 처리하고, 그럼에도 불구하고 작업이 계속 쌓이는 경우에 EKS를 사용하도록 하였습니다.

이를 위해 kubernetes의 hpa (Horizontal Pod Autoscaling)를 기본적으로 사용하였으며, 딥러닝 작업 요청 queue에 쌓인 작업의 수를 지속적으로 tracking하는 부분도 prometheus를 활용하여 구현하였습니다.

추가적으로 AWS의 Cluster AutoscalerKEDA (Kubernetes Event-driven Autoscaling)를 이용해, GPU instance 수를 저희가 원하는 대로 조절하여 비용을 절감하였습니다.

앞으로 할 일

저희는 지속적으로 클레온의 GPU 사용량을 모니터링하여 조금이라도 bottleneck이 있거나 resource bin-packing을 통해 최적화할 수 있는 부분을 찾아 개선하고자 합니다.

자원 최적화는 Tetris와 유사한 것 같습니다 @.@

현재 클레온에서 겪는 문제 중 하나로는, 딥러닝 서비스가 돌아가고 있는 서버가 multi-GPU를 가지고 있음에도, GPU들이 serial하게 작동하여 utilization이 떨어지는 경우가 있습니다.
이러한 부분도 Infra 팀에서 담당하여 딥러닝 서비스를 처리하는 코드가 multi-GPU inference를 하여 multi-GPU의 utilization을 극대화하도록 코드를 제공할 것입니다.

추가적으로 위에서 말씀드렸던 Priority 기반의 스케줄러를 구현할 예정이고, 이는 사용자들의 만족도를 높여줄 것이라 기대하고 있습니다.
Worklaod에 따라서 latency가 중요한 작업은 빠르게 처리하고, 그렇지 않은 작업들은 throughput을 높이는 전략을 취하고자 합니다.

이러한 과정을 통해 결과적으로는 같은 자원으로도 훨씬 많은 작업들을 빠르고 많이 처리할 수 있으리라 기대하고 있습니다.

Infra 파트 소개를 마치며

클레온 MLOps 팀의 Infra 파트는 HW/SW 인프라를 구축하며, 자원 최적화를 위해 열심히 공부, 테스트 및 구축을 진행합니다.
클레온의 Swiss Army knife가 되어서 모든 부분이 자연스럽게 흘러가도록 만드는 일에 최선을 다하고 있습니다.

할 일이 적은 팀은 아니지만, 저희가 구축한 것들을 통해 여러 사람들이 행복함을 느끼고 회사의 성장에 기여하는 모습을 보면 큰 보람을 느낍니다.
아직은 Infra팀의 팀원이 두 명뿐이라, 함께 MLOps 파이프라인을 구축하고 운영하며 성장해나갈 열정 넘치는 분들을 기다리고 있습니다 :)

화목한 Infra 파트 팀원들 (많은 분들의 지원 부탁 드립니다 ㅎㅎ)

채용공고

Infra 파트는 함께 할 다양한 인재를 기다리고 있어요:)
자격요건, 우대사항 등의 자세한 내용은 채용 페이지에서 확인하실 수 있으며, 이메일(Joinus@klleon.io)로 지원서를 받고 있으니 많은 지원 부탁드립니다!

또, LinkedIn을 통해 R&D Center의 소식을 올리고 있어요!
앞으로 MLOps Infra 파트의 활동도 자주 올릴 예정이니 많이 찾아와주세요:)

궁금하신 것이 있으실 경우 댓글이나 이메일(Joinus@klleon.io)로 연락주세요!

--

--