안녕하세요, 리디의 데이터사이언스 팀장 이유원입니다. 오늘은 리디의 데이터사이언스팀에서 사용하고 있는 머신러닝 파이프라인을 소개 드리려 합니다. 최근 MLOps(Machine Learning Operation)라는 이름으로 새로운 기술이 속속 발표되고 있는데요. 그만큼 머신러닝 기술이 다양한 산업군에 걸쳐 널리 사용되고 있는 것 같습니다.
하지만 이렇게 다양한 MLOps 기술들이 세상에 태어나고 있는 데 반해, 아직은 모든 사람들의 입맛에 맞는 기능들을 탑재하고 있는 도구는 보기 힘든 것 같습니다. 어찌 보면, 아직은 MLOps 기술들의 춘추전국 시대라고 할 수 있겠네요. Matt Turck의 2021년 ML, AI 및 데이터에 대한 보고서만 봐도 MLOps에 필요한 각 부분을 위해 지금 이 순간에도 정말 수많은 기술이 개발되고 있음을 알 수 있습니다.
리디에서도 머신러닝 기술이 쓰이는 곳이 많아짐에 따라 MLOps를 도입하기 위해 여러 도구들을 검토했습니다. 하지만, 회사의 요구사항에 맞게 커스터마이징 하기에는 개발 효율이 낮다는 결론에 도달했습니다.
아직 덜 성숙한 새로운 기술을 도입해 커스터마이징 하는 대신, 데이터사이언스팀은 리디 서비스를 뒤에서 지원하고 있는 듬직한 데이터 처리 파이프라인과 다양한 모니터링 시스템, DevOps 기능들을 적극 활용해 안정성 높은 시스템을 만들어 보기로 했습니다. 유사한 사례로서, Facebook, Netflix, Uber 등 세계 유수의 회사들도 MLOps를 위해 내부 시스템을 구축해 사용하고 있습니다.
잠깐! 리디에서는 머신러닝 기술을 어디에 활용하고 있나요?
데이터사이언스팀에서 개발하고 있는 머신러닝 기술은 리디의 곳곳에서 충실히 임무를 수행하고 있습니다. 몇 가지만 살짝 알려드릴게요! 😉
- 🎯마케팅: 사용자 세그멘테이션, 푸시 타게팅
리디의 수많은 프로모션과 행사가 맞춤형으로 제공된다는 사실 알고 계셨나요? 마케팅 비용을 효율적으로 사용하려면 고객들의 취향을 잘 분석해 관심을 보일 것 같은 고객에게 집중하는 것이 매우 중요합니다. 리디에서는 서비스 이용 행태에 따라 고객들을 분류하고, 타게팅하고 있는데요. 여기에도 머신러닝 기술들을 활용하고 있습니다.
- 😈어뷰징(abusing) 행위 감지
리디에도 이벤트에 당첨되기 위해 댓글을 반복적으로 달거나, 포인트를 쌓기 위해 선물하기 기능을 악용하는 고객들이 있습니다. 데이터사이언스팀에서는 모든 고객이 건강한 리디를 즐길 수 있도록 여러 가지 어뷰징 행위를 감지하는 기술을 개발하고 있습니다. 대표적인 사례로 그래프 마이닝 기술과 시계열 분석 기술을 들 수 있답니다. 어뷰저들과의 쫓고 쫓기는 끝없는 싸움이죠!
- 📚도서 추천
리디의 장르별 페이지나 작품 상세 페이지에서 머신러닝 기술로 추천하는 도서들을 만나보신 적 있으신가요? 데이터사이언스팀에서는 리디 고객들이 서비스를 사용하면서 만든 수많은 로그들을 딥러닝 기술로 분석해 취향에 맞는 도서들을 추천하고 있습니다.
- 🎨콘텐츠 제작을 위한 연구
바야흐로 AI가 그림도 그리는 시대가 되었습니다. 작화를 도와주는 조수 역할을 하는 AI. 생각만 해도 멋지지 않나요? 리디에서도 콘텐츠 제작을 위한 머신러닝 기술을 연구하고 있답니다. 작품을 그리는 데 드는 시간을 줄여 작품의 완성도를 높이는 데 집중할 수 있다면, 작가님들은 물론 고객들의 만족도도 높아지리라 믿습니다!
그럼 이제부터! 데이터사이언스팀에서는 머신러닝 파이프라인을 위해 팀에서 운영하고 있는 여러 기술 스택들을 어떻게 유기적으로 연동해 사용하는지 소개하겠습니다. 두둥! 🙌
데이터 처리 파이프라인
고객들이 리디에 접속해 서비스를 사용하면, 익명화된 행동 로그들이 데이터사이언스팀의 로그 저장소에 쌓입니다. 이런 귀한 데이터를 사용하기 쉽게 정리하고, 알찬 내용을 추출해야 정보로서 활용 가치가 생기는데요. 리디에서는 이런 작업을 위해 Amazon Web Service(AWS)의 EMR을 적극 활용하고 있습니다.
리디는 하루에도 수십만 명의 고객들이 방문하고 있어, 고객들이 남긴 로그의 규모도 굉장히 큽니다. EMR로 처리하고 있는 정기적인 파이프라인만 하루에 천 개가량 된답니다! 데이터사이언스팀은 이런 데이터를 수년간 안정적으로 운영하고 있고, 그동안 축적한 노하우를 바탕으로 EMR을 사용해 머신러닝 모델의 학습과 추론 결과 생성에 필요한 데이터를 만들고 있습니다.
데이터 처리 파이프라인에서는 수많은 작업들을 주기적으로 처리하는데, 이런 작업들은 Airflow를 사용해 스케줄링 하고 있습니다. 머신러닝에 필요한 데이터 생성과 모델 학습도 Airflow에서 주기적으로 스케줄링하고 있습니다. 장르별로 생성하는 추천이나 유사 작품을 추천하는 파이프라인이 오늘도 여러분의 취향을 저격하기 위해 열일하고 있답니다. 🥰
ML 모델링
머신러닝 모델 개발은 많은 실험을 통해 하이퍼 파라미터 튜닝이나 모델 구조를 개선해야 비로소 원하는 성능을 얻을 수 있습니다. 이 과정에는 “실험 환경 설정 > 모델 학습 > 성능 확인” 사이클이 여러 번 반복되는데요. 이런 과정을 자동화해야 실험에 집중하고 모델 성능을 높이는 데 필요한 시간을 충분히 마련할 수 있습니다.
데이터사이언스팀은 머신러닝 엔지니어가 여러 가지 실험들을 손쉽게 하도록 돕기 위해 Bazel이라는 빌드 툴을 코드 빌드와 모델 배포에 사용합니다. Bazel이 생소한 분들이 있을 텐데요. Bazel은 Google에서 사용하는 빌드 툴이고 TensorFlow를 비롯해 많은 프로젝트가 Bazel로 빌드되고 있습니다. Bazel로 빌드된 코드는 AWS의 Elastic Kubernetes Service(EKS)에 배포돼 학습 모델과 추론 결과를 만들고 있습니다.
개발자는 학습 및 추론에 필요한 파라미터들을 정의하고, 명령어 한 줄만 실행하면 코드 빌드, 컨테이너 이미지 푸시, EKS 컨테이너 생성이 자동으로 완료됩니다. 나머지 시간엔 모델이 잘 학습되길 바라며 커피 한 잔을 즐길 수 있죠. ☕
> bazel run //data/ml/recsys/kube:recsys-train-job.apply
그뿐 아니라, 모델 학습이 진행되는 동안 최고의 성능을 낸 체크포인트와 다양한 성능 지표들을 자동으로 저장하고 있습니다. 성능 지표들은 Tensorboard에서 확인할 수 있는 포맷으로 저장하고 있어 학습 과정 동안 모델 성능이 어떻게 변화했는지, 목표치에 도달했는지 등을 모니터링할 수 있습니다.
Bazel을 사용해 빌드 환경을 만든 결과, 데이터사이언스팀의 머신러닝 개발자는 로컬에서도 쉽게 EKS를 사용해 모델을 실험할 수 있게 되었고, Stage나 Production 환경에 모델을 배포하는 과정도 GitOps 방식을 통해 간단히 처리할 수 있게 되었습니다.
A/B 테스팅
머신러닝 모델은 한번 배포하고 끝나는 것이 아니라 새로운 기술을 적용하거나 하이퍼 파라미터를 수정해 개선하는 과정을 수없이 거치는데요. 오프라인 데이터에서 기존 모델보다 성능이 우세했더라도 온라인에서도 우세한 성능을 보인다는 것은 보장되지 않습니다. 여러분은 느끼지 못하셨겠지만, 리디에서는 새로운 기능을 배포할 때 기능 플래그 및 A/B 테스트 도구를 사용합니다.
데이터사이언스팀도 새로운 모델의 온라인 성능을 테스트해 보기 위해 A/B 테스트를 적극 활용하고 있습니다. 고객들을 나누어 일부는 기존 모델이 추론한 결과를 사용해 서비스하고 나머지 고객들은 새로운 모델을 사용해 서비스합니다. 새로운 모델이 온라인 테스트에서도 기존 모델 보다 나은 성능을 보여야 모든 고객들에게 서비스 되도록 운영하고 있습니다.
const useModelV2 = await flag('Recommendation-Api-Model-V2');
let bookIds;
if (useModelV2) {
bookIds = await recommendApiV2.recommend();
} else {
bookIds = await recommendApiV1.recommend();
}
서빙 API
머신러닝 모델이 생성한 추론 결과는 API를 통해 리디 앱과 웹에 결과를 제공하고 있습니다. API는 사용자가 마주하는 리디 서비스에 맞닿아 있기 때문에 빠른 응답 속도가 무엇보다 중요합니다. 이를 위해, 리디에서는 Node.js를 사용해 API를 개발하고 있고, 데이터사이언스팀의 머신러닝 관련 API들도 Node.js를 통해 각종 추론 결과를 제공하고 있습니다.
컨테이너 기반 운영과 배포 자동화
리디의 각종 서비스들은 컨테이너 환경을 기반으로 서비스되고 있고, 데이터사이언스팀의 개발 및 운영 환경도 컨테이너 환경에 기반을 두고 있습니다. 앞서 말씀드린, 머신러닝 모델 개발을 EKS에서 할 수 있는 것도 이런 환경이 갖춰져 있기 때문입니다. 데이터 처리 파이프라인이나 머신러닝 코드가 새로 배포되면 코드 빌드와 컨테이너 배포가 모두 자동으로 이뤄집니다. 많은 부분이 자동으로 이뤄지니 빠질 수 없는 것이 유닛 테스트입니다. 데이터사이언스팀은 모든 코드에 테스트 케이스를 작성하는 것을 정책으로 삼고 있습니다. 머신러닝 관련 코드들도 예외는 아닙니다. 꼼꼼하게 작성된 테스트 케이스들은 새로운 코드가 배포됐을 때 문제가 생길 여지는 없을지, 작성 중인 코드가 원하는대로 작동하는지를 확인할 수 있어 팀원들이 모두 중요하게 생각하고 있습니다.
머신러닝 코드들이 배포되어 학습이나 추론 결과를 생성할 때는 GPU가 필요한데요. EKS에서 머신러닝 코드가 작동할 때는 GPU가 장착된 노드들을 연결해 사용하고 있습니다. GPU가 장착된 인스턴스들은 비용이 비싸기 때문에 필요한 만큼 사용하고, 사용이 끝나면 반환해야 비용을 절감할 수 있습니다.
리디는 EKS에서 컨테이너들을 효율적으로 운영하기 위해 Karpenter를 사용하고 있습니다. 머신러닝 작업들도 Karpenter와 연동돼 있어, 작업이 실행되는 동안만 GPU가 장착된 인스턴스들을 프로비저닝해서 사용하고, 사용이 끝나면 자동으로 반환해 비용이 낭비되지 않도록 운영하고 있습니다.
모니터링
리디는 Production 환경에서 운영 중인 각종 서버들의 성능 지표들을 실시간으로 추적하고 있고, 문제가 생길 소지가 있는 것들은 미리 경고하도록 설정되어 있습니다. 응답 및 지연시간을 비롯한 각종 실시간 지표들은 Datadog로 수집해 대시보드로 모니터링하고 있고, 주의가 필요할 때는 Slack, 위험 수준이 되면 Slack과 전담 SRE 팀의 페이저(전화)로 메시지를 받습니다. 머신러닝 서비스들의 실시간 서빙 상태도 Datadog를 통해 응답 시간이나 호출량 등을 실시간으로 모니터링 중입니다.
실시간 서빙뿐만 아니라 배치 작업도 상태를 모니터링하고 있습니다. Airflow가 스케줄링한 DAG 실행이 실패하면, 실패한 DAG와 작업 정보를 Slack 메시지로 받고 있습니다. 이런 기능들은 문제 발생을 빠르게 알 수 있고, 문제의 원인을 분석하는 데 굉장히 많은 도움이 되고 있습니다.
또한, Airflow DAG의 성공, 실패, 작업들의 진행 상태들은 앞서 언급한 Datadog에 수집해 대시보드로 관리하고 있습니다. 주로 문제가 생기는 DAG는 무엇인지, 무슨 작업을 처리할 때 문제가 발생하는지를 한눈에 볼 수 있어 배치 작업의 현황을 확인하는 데 큰 역할을 하고 있답니다.
머신러닝 기술이 적용된 서비스들은 실시간 서빙 성능과 배치 처리 지표들에 추가해 모델의 온라인 성능도 모니터링하고 있습니다. 추천을 비롯한 머신러닝 모델들의 성능은 학습에 사용한 오프라인 데이터로만 좋고 나쁨을 판단하기 어렵습니다. 학습에 사용한 데이터는 그 시점의 스냅샷일 뿐이라 실세계에서 발생하는 다양한 변수들을 모두 반영하기는 어렵기 때문인데요. 고객들이 실제로 느끼는 만족감은 온라인 환경에서만 테스트할 수 있습니다. 예를 들어, 리디에서는 추천 서비스의 온라인 성능을 확인하기 위해 CTR, CVR, 기여 매출을 계산해 대시보드에서 확인하고 있습니다.
지금까지 설명한 것들이 어떻게 유기적으로 연결돼 있나요?
그럼 지금까지 설명드린 머신러닝 파이프라인이 듬직한 기존 시스템들과 어떻게 유기적으로 연결되어 있는지 정리해 보겠습니다.
이런 과정을 거친 후 완성된 머신러닝 파이프라인을 기반으로 머신러닝 엔지니어들은 리디의 서비스 품질을 높이는 데 기여하고 프로토타이핑도 빠르게 해볼 수 있게 되었습니다.
맺음말
지금까지 리디에서 구축한 머신러닝 파이프라인과 작동 방식에 대해서 설명드렸습니다. MLOps 도구들을 도입해 커스터마이징에 많은 시간과 노력을 들이는 것 대신 기존 시스템들을 재활용하며 머신러닝에 맞게 기능을 개선하는 방향으로 작업했는데요. 운영하면서 계속 개선점을 찾고 보완해 나가고 있습니다. 앞으로도 MLOps의 모습을 점점 더 갖춰 나갈 테니 지켜봐 주세요! 🙏
고객과 발맞춰 새로운 콘텐츠 경험을 선보이는
리디와 함께할 당신을 기다립니다.