서평 - 머신러닝 시스템 설계

 

이 포스팅은 도서 머신러닝 시스템 설계에 대한 리뷰를 담고 있습니다.

머신러닝 시스템 설계 표지

요약

이 책은 머신러닝과 밀접하게 일하시는 분들이라면 반드시 읽어봐야 할 책이라 생각합니다. 예를 들면 ML Engineer 혹은 ML Ops 하시는 분들은 당연하며 Product Owner (PO) 와 User Experience (UX)를 담당하시는 분들도 머신러닝의 적용과정 몇 결과에 대한 이해를 위해 읽어보시면 좋은 책 입니다.

ML이라고 하면 최신 모델과 기법만을 생각하기 쉬운데 서비스 적용 시 현실적으로 겪어야 하는 내용들에 대해 잘 정리하고 있습니다. 예를 들면 머신러닝이 해당 서비스에서 왜 필요한지 그리고 어떤 비지니스의 목표를 달성해야 하는지부터 알아야 한다는 점을 강조하고 있습니다.

카카오에서 다양한 서비스에 추천시스템을 적용해본 경험을 바탕으로 이 책을 보았을 때, 제가 겪었던 다양한 상황이 이 책에 녹아있어 놀라웠습니다. 겪어본 것 뿐 아니라 그보다 더 다양한 상황을 쉽고 체계적으로 정리하고 있습니다.

서비스의 비지니스 성과 달성을 머신러닝을 통해 하고자 분들의 경우 이 책을 꼭 추천드립니다. 실전 머신러닝의 정수를 담고 있기에 많은 도움이 될 것이라 생각합니다.

머신러닝이 제품에 적용되려면?

ML이라고 하면 멋진 최신 모델을 적용하는 것으로 이해하는 분들이 많으신데 이 책은 그것부터 꼬집고 시작합니다.

사용자 지향 서비스에서의 ML은 state of the art (SOTA) 모델을 적용하는 것이 가장 중요한 것이 아니라 해당 서비스에서 어떠한 문제를 풀고자 하는지 이해하고 비지니스 목표가 무엇인지 이해를 하는 것이 중요하다고 언급합니다. 예를 들면 광고를 노출하는데 있어 클릭을 많이 하도록 목적 함수를 설정할지 혹은 광고 수익이 높도록 설정할지는 비지니스의 목표가 무엇인지에 따라 결정해야 한다는 것 입니다.

이것은 상당히 중요한 이야기인데 ML 결과물을 어디에 적용할지 생각하지 않고 시스템부터 구축한다는 것은 목적지도 정하지 않은 채 망망대해에 배를 띄운 것과 같기에 결국 표류하게 됩니다.

서비스에서의 백엔드 혹은 프론트엔드의 경우 필요한 제품의 명세에 맞게 구현하고 추가 사항이 있을 경우 업데이트 해야하는 필수 요소이기에 누구도 필요성에 대한 의심을 하지 않습니다. 그런데 머신러닝의 경우 반드시 필요하냐 라고 질문한다면 대부분 아닐 가능성이 높습니다. 따라서 이것이 비지니스에서 왜 필요한지 잘 이해하는 것은 반드시 알아야 하는 부분입니다.

데이터 그리고 데이터

이 책에서는 데이터 엔지니어링의 기초부터 시작하여 데이터를 다룰 때 발생하는 현실적인 문제와 피처 추출을 위한 엔지니어링 방법들을 나열하고 있습니다.

  • 관계형 모델 vs NoSQL
  • 배치 vs 스트림

핵심 키워드를 나열하자면 위와 같으며 데이터를 다루는데 있어 필수적인 요소입니다. 배치 데이터와 스트림 데이터를 결합하여 서비스하는 것에 대해서도 설명하고 있는데 저의 경우엔 배치 데이터로 모델링 전에 API를 요청이 온 경우 스트림 데이터를 적극적으로 활용하여 서비스에 적용한 경험이 있습니다.

모델링만 하면 끝?

SOTA 모델 적용은 필요한 일이며 반드시 진행해야 하는 업무입니다. 다만 실서비스에서 이 작업이 최우선순위에 있는지에 대해서는 상황을 잘 파악해야 합니다.

이 책에서는 실서비스에서 데이터가 변함에 따라 모델과 하이퍼파라메터 등을 같이 변경하지 않는 것이 얼마나 큰 문제가 되는지 설명하고 있습니다. 데이터 분포 시프트와 모니터링 이라는 챕터가 따로 있는데 이 부분을 반드시 읽으시는 걸 추천합니다.

모델링의 결과물이 좋다고 하여 그대로 서비스에 적용하면 이슈가 발생할 수 있습니다. 대표적으로는 모델 사이즈가 커서 메모리에 올라가지 않는다거나 혹은 올라가도 inference에 시간을 꽤 소모하는 등의 응답성 이슈가 있을 수 있습니다. 이를 해결하기 위한 방법인 모델 압축에 대해서도 다양한 방법을 안내하고 있습니다.

모델간의 성능

서비스에 올라갈 모델을 응답성 등 여러가지 요소를 고려하여 구축했다고 해도 거기서 끝이 아닙니다. 해당 모델이 실서비스에서의 성능이 얼마나 나올지는 실제 테스트를 해봐야 알 수 있습니다. 오프라인 테스트로 아무리 결과가 좋았다고 해도 실제로 사용자의 의도와는 맞지 않을 수 있기 때문입니다.

이를 위한 섀도 배포, A/B 테스트, 카나리 배포, 인터리빙 실험, 그리고 밴딧 등 다양한 내용을 설명하고 있습니다.

SWE로 비유하자면 모델 혹은 데이터가 버전이 업데이트 되며 전체적인 성능에 얼마나 영향을 미치는지 파악하기 위한 것으로 이해할 수 있습니다.

마무리

이 책은 실서비스에서 맞닿는 부분을 잘 설명하고 있습니다. 위의 요약 챕터에서 이미 설명을 한터라 아래에 간단히 저의 생각을 다시 한번 적어둡니다.

좋은 점

  • 머신러닝의 현실을 체계적으로 잘 정리함
  • 데이터부터 서비스 적용까지 필요한 기본지식이 포함되어 있음
  • 최신 유행 흐름을 타는 내용이 아닌 업무에 필요한 메타의 정수를 담고 있기에 오래두고 몇번을 봐도 좋음
  • 결론: 머신러닝을 서비스에 적용하고자 하는 분들에겐 필수!

이 책을 읽은 후엔?

  • 각 챕터별 키워드 중 필요한 부분에 대해서 관련 서적 혹은 논문을 좀 더 깊게 탐색

마지막으로 언급할 것은 이 책이 실전에 대해 아주 잘 정리한 책이지만 그 외에도 AI 윤리에 대한 논의에 상당한 지면을 할애했습니다. 우리가 사용자에게 서비스를 제공하는 측면에서 단순히 비지니스 목표에만 매몰되지 않고 좀 더 멀리 볼 수 있는 기준을 제시한다고 생각합니다. 기술 뿐 아니라 우리가 함께 생각해야 할 부분까지 있다는 점이 아주 놀라운 책입니다.

저는 이 책을 옆에 두고 몇번을 다시 읽어볼 생각입니다. 머신러닝을 하시는 모든 분들께 이 책을 추천합니다.

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.