본문 바로가기

book

머신러닝 시스템 설계

머신러닝이라는 단어는 기술용어이지만, 일반적으로 사용되어지고 있습니다.

그만큼 머신러닝을 통해서 우리가 사용하는 일반적인 서비스 부터, 회사의 전략적인 부분까지 많은 산업 전반에 걸쳐서

이용됩니다. 

우리는 기존의 데이터를 분석하고, 그 수집된 데이터를 기반으로 미래를 예측하려고 하기 때문입니다.

그러한 기술의 발전으로 조금 더 나은 사용자 만족도을 얻기 위함입니다

 

시중에는 머신러닝을 학습할 많은 책이 있습니다. 지도,비지도학습에 대해서 개념을 잡고, 회귀, 로지스틱, 트리 등등의 알고리즘을 통해서

실제 현업 및 자신이 분석해야 할 분야에 적용해 봅니다.

 

하지만, 여기서 우리는 여기서 그치면 안되고 이것을 개인 Local-PC, 1대의 서버에서 수행하는 것이 아니라

조금 더 큰 시스템을 통해서 자동화 및 배포, 모니터링 및 사람의 손을 거치지 않은 자동화된 시스템을 만들어야 합니다.

그래야 계속 알고리즘 테스트가 쉬워지고, 검증이 자유로워지고 서비스에 적용이 장애없이 구축될수 있습니다.

 

이 책의 제목은 보시는 것과 같이 "머신러닝 시스템 설계" 이며, 

부제는 "프로젝트 범위 산정부터 프로덕션 배포 후 모니터링까지, MLOps 완벽 해부하기" 입니다.

 

기존에는 없었던 DEVOps라는 기술직군이 생겼습니다. 개발된 SW에 대한 배포시스템을 관리하는 기술인데, 예전에는 서버가 그렇게 많이 없어도 되었지만, 지금은 모바일라는 디바이스를 통해서 엄청남 트랙픽을 처리하기 위한 서버의 대수와 시스템 아키텍처는 정말 많이 변화가 있었습니다.

책의 부제에서도 있는 MLOps 라는 의미는 MachineLearning에 대한 Ops의 역활이며, 이것은 실제 머신러닝을 서비스 구축하기 위한 필수적인 부분입니다.

 

<읽기전 생각난 부분>

① 책에서는 머신러닝 알고리즘에 대한 설명은 없을것 같다. (why : 시스템 설계 책이니까.)

② 기존의 웹서비스 시스템 구성과 어떠한 점이 다를까? (why : WAS는 필요없을것이고, 어떠한 구성도가 필요할까?)

③ MLOps에 대해서 잘 정리해볼수 있을까?

프로젝트 범위 산정는 어떻게 정하는 것일까? (why : 일반 프로젝트의 범위 산정과 무엇이 다를까

배포, 모니터링은 어떻게 할까? (why : 기존 내가 알던 부분과 무엇이 다를까?)

 

 

 

 

■ 책의 리뷰

· 책의 난이도 있습니다. 단순히 Ops 입장의 책은 아니고 MLOps를 잘하기 위한 책이라는 생각이 들었습니다.

  머신러닝 알고리즘 개발자 분들도 이책을 보면, 많은 도움을 받으실수 있다고 생각이 들었습니다.

  알고리즘 개발시 필요한 요소들이 크게 시스템적으로 접근했을때 어떻게 접근하는지는 비슷한 부분이 많았습니다.

· 저자분의 다양한 경험 및 이론을 잘 뒷받침 하는 자료 및 근거가 제시되어 있어서 참고할 내용이 많이 있습니다.

· MLOps를 구축하기 위해서, 기준이 되는 바이블 같은 책입니다.

· 언급되는 항목이 꼭 MLOps가 아니여도 곳곳에 전체적인 시스템적으로 도움을 받을만한 내용이 있습니다.

· 책의 서문에 나온 대상독자 글에서도 명확히 이책의 장점이 나타납니다. 아래와 같은 시나리오는 한번쯤은 고민해봤을 부분이라고

생각이 되고, 지면을 통해서 순차적으로 설명되어 집니다.

 

 

■ 언제 머신러닝을 도입해야 할까? 우리 프로젝트에 머신러닝이 더 적합한 것인가?

· 약간 근본적인 질문입니다. 머신러닝 시스템을 구성하기 전에 한번더 머신러닝에 대해서 정의하고, 일반 솔류션과의 차이점을 환경적인 부분에서 재 정의 해보면 좋을것 같습니다.

· 책에서는 총 9가지 항목으로 정의합니다.

  1. 학습 : 시스템에 학습 능력이 있습니다. (RDBMS는 ML시스템이 아님)
  2. 복잡한 패턴 : 학습할 패턴이 존재하며 복잡합니다.
  3. 기존 데이터 : 사용가능한 데이터가 있거나, 데이터 수집이 가능합니다.
  4. 예측 : 예측에 대한 문제입니다.
  5. 본적 없는 데이터 : 본적없는 데이터가 훈련 데이터와 동일한 패턴을 갖습니다.
  6. 반복적입니다.
  7. 잘못된 예측으로 발생하는 비용이 낮습니다.
  8. 대규모로 수행됩니다.
  9. 패턴이 지속적으로 변합니다.

위의 사항을 보면, DBMS에 저장된 기존 아키텍처를 사용해서 정보를 제공하는것 말고, 예측, 패턴을 제공하는 서비스에는 머신러닝이 검토하는 과정이 필요해 보입니다.

 

 

■ 머신러닝 시스템 vs 전통적인 소프트웨어

분명 다르다고 알고 있고, 차이점이 있다는 것을 알고 있는데 정확히 표현을 못할수 있습니다.

· 가장큰 차이는 데이터 관점입니다.

· 기존 소프트웨어 SWE는 코드와 데이터가 분리돼 있다고 가정하에 설계되어있고, 가능한 코드와 데이터를 모듈화 하는것에 우선하는 경향이 있는데, ML 시스템은 코드, 데이터, 그리고 이것으로 생성된 아티팩트로 구성되어 있습니다.

· ML알고리즘은 데이터를 개선하는데 매우 큰 비중을 둡니다. 이렇게 다양한 데이터 샘플을 유연하게 처리 할수 있는 구조가 되어야 합니다.



■ 머신러닝 시스템의 핵심 : 반복 프로세스

· 보통 반복인 batch성 작업으로 처리됩니다. 하지만, ML에서는 조금 더 다르게 반복 프로세스가 더욱 중요한 부분을 차지합니다. 

그 이유는 워낙 많은 다양한 모델을 학습해야 하고, 그 중심에는 지속적으로 변경되는 데이타가 있습니다.

 

· 책에서 나온 광고 사례입니다.
· 책에서 언급된 처리는 사람이 할수 없는 시스템화 되어 이어야 하는 부분입니다.

 

 

■ 데이터의 중요성

· 우리는 DB에 많은 데이터가 저장되어 있다고 하지만, 데이터의 종류는 정형화된 데이타 말고, 더 많은 비정형화된 데이타가 있습니다.

데이터의 형태는 매우 다양하고, MLOps에서도 이러한 부분이 고려되어야 하고 

이러한 관점은 알고리즘 개발자입장에서도 매우 관심이 많습니다. 연구를 하려는 데이터가 다양한 포맷으로 제공되고

보통 상업적인 데이터를 제외하고는 그 형태가 매우 다양하기 때문입니다.

사용자의 로그를 기준으로 보아도, 년월일의 포맷이 다 다르고 그 data의 생성되는 위치도 모두 일치하지 않습니다.

이러한 Pre-Handling 하는 입장에서 어떻게 그 사항을 다루어야 하는지 설명합니다.

· Json, CSV, 넘파이, 판다스를 통한 설명이 있고, 데이터를 행과 열의 입장에서 제공하는 예시도 좋았습니다.

· 우리가 많이 사용하는 관계형 데이타베이스, RDBMS를 통한 데이터 접근법도 참고하면 됩니다.

· NoSql은 Json,xml, bson등의 형태로 인코딩됩니다. 그래프 모델 등이 있습니다.

· 정형데이타, 비정형데이타가 있습니다.


■ 훈련데이터

훈련데이터는 머신러닝을 하기위해서 반드시 있어야 하는 매우 중요한 요소입니다.

이러한 훈련데이터의 속성을 아는것이 매우 중요합니다. 학습에 필요한 데이터는 모두 동일하지 않고

어떻게 분류하고, 구분지어서 관리하느냐, 어느 관점으로 Data-Set의 기준선을 정하는지 등에 따라서 많은 차이가 발생합니다.

· 다양한 샘플링 기법으로 비확율샘플링, 단순 무작위 샘플링, 계층적 샘플링, 가중 샘플링, 저수지 샘플링, 중요도 샘플링이 있습니다.

· 레이블링의 기법으로는 수작업 레이블, 자연 레이블등이 있습니다.

· 클래스의 불균현 문제를 해결하고, 올바른 지표를 추출해서 리샘플링 할수 있게 합니다.

 

■ 모델에 대한 평가

작성된 모델이 정상적인가, 잘 동작하는지 평가하고 확인하는 과정이 필요합니다.

· 모델 개발과 훈련은 머신러닝 모델이 많은데 어떠한 알고리즘을 사용해야 할지 정하는데 도움이 됩니다.

  1. 최첨단만 추정하는 함정에 빠지지 않기
  2. 가장 단순한 모델부터 시작하기
  3. 모델을 선택할때 사람의 편향을 주의하기
  4. 현재 성과와 미래 성과를 비교 평가하기
  5. 트레이드오프를 평가하기
  6. 모델의 가정을 이해하기

· 양상블을 이용해서 처음 적용하는 입장에서 모델을 예측해보면 좋습니다. 배깅, 부스팅, 스태킹 기법을 이용합니다.

· 평가를 하기 위해서 ML도 베이스라인을 정하고, 교란테스트, 불변성 테스트, 방향예상테스트, 모델보정, 신뢰도 측정, 슬라이스 기반평가 등을 수행합니다.

 

 

■ 배포하기, 장애는 어떠한 것이 있을까?

보통 이책의 가장 관심이 있는 부분이 7장 (모델배포와 예측서비스) 부분이라고 생각이 듭니다.

· 아래 통상적으로 알고 있는 질문은 ML배포관련된 현업의 충분한 의문해소를 제공합니다.

<아래 사항은 이렇다는 것이 아니고, 많이 통념으로 인지하는 그러한 제목글입니다.>

  1. 한번에 한두가지 머신러닝 모델만 배포합니다.
  2. 아무것도 하지 않으면 모델 성능은 변하지 않습니다.
  3. 모델을 자주 업데이트할 필요가 없습니다.
  4. 대부분 머신러닝 엔지니어는 스케일에 신경 쓰지 않아도 됩니다.

· 시스템이 배치처리를 해야 할지, 온리인 처리를 해야 할지, 파이프라인에 대한 구성

· 많은 모델에 대해서 어떻게 효율적으로 서비스를 할지, 압축에 대한 부분에 대한 해법

  이러한 모델도 지속적으로 업데이트 해야 하는 부분도 기존 시스템과 다른 부분입니다.

· 장애관련해서는 프로덕션 환경 데이타가 훈련데이터와 다른경우가 있습니다.

· ML 인프라를 위한 레이어는 아래와 같이 제시합니다.

일반적인 시스템과 같이 사용하는것도 있지만, ML을 위한 별도의 레이어가 제공됩니다.

 

 

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