(책)머신러닝 실무 프로젝트

leesj·2021년 8월 17일
0

MLOps

목록 보기
3/12
  • 머신러닝 실무 프로젝트: 실전에 필요한 머신러닝 시스템 설계, 데이터 수집, 효과 검증 노하우 도서 요약

기존 시스템에 머신러닝을 통합하는 과정

  1. 문제를 정의한다.
  2. 머신러닝을 사용하지 않는 방법은 없는지 검토한다.
    3. 시스템을 설계한다.
  3. 사용할 알고리즘을 선택한다.
    5. 특징과 정답 데이터, 로그를 설계한다.
  4. 데이터를 전처리한다.
  5. 학습을 수행하고 파라미터를 튜닝한다.
  6. 시스템에 통합한다.
  • 위에서 나열된 머신러닝 적용 과정에서 3,5 번을 통해 머신러닝 시스템을 구성하는 방법을 알아본다.
  • 3번 항목은 머신러닝 시스템을 구성하는방법을 5번 항목은 머신러닝에 사용할 정답 데이터를 얻기 위한 로그 수집 방법에 중점을 둔다.

시스템 설계

  • 지도학습 기준 머신러닝 학습의 두 단계는 학습과 예측이다.
  • 이 단계는 다시 학습이 일어나는 시점에 따라 배치처리 시 이뤄지는 방식과 실시간으로 이뤄지는 방식으로 나뉜다.

머신러닝에서 배치처리와 배치학습

  • 배치처리(배치학습=일괄학습): 머신러닝에서 배치처리는 대개 배치학습을 가리킨다.
  • 실시간처리(온라인 학습=순차학습): 시시각각 입력되는 센서 데이터나 로그 데이터를 순서대로 처리하는 것.

일괄 학습과 순차 학습의 차이는 학습 도중 최적화하는 방법의 차이, 그리고 한 번에 다루는 데이터 덩어리의 크기 차이.

  • 조합 가능한 처리 방식
  • 배치 처리로 일괄 학습(O)
  • 배치 처리로 순차 학습(O)
  • 실시간 처리로 일괄 학습(X)
  • 실시간 처리로 순차 학습(O)

예측 단계는 학습 단계에서 적용한 학습 방식이나 처리 방법과 상관없이 배치 처리와 실시간 처리가 모두 가능하다.
학습을 수행할 때는 배치 처리를 적용하는 편이 시행착올르 줄이는데 유리하다.

배치 처리를 적용한 학습 패턴 3가지

  1. 배치 처리로 학습 + 예측 결과를 웹 애플리케이션에서 직접 산출(예측을 실시간 처리)
  2. 배치 처리로 학습 + 예측 결과를 API를 통해 사용(예측을 실시간 처리)
  3. 배치 처리로 학습 + 예측 결과를 DB에 저장하고 사용(예측을 배치 처리)

1. 배치 처리로 학습+ 예측 결과를 웹 애플리케이션에서 직접 산출(예측을 실시간 처리)

모놀리식 웹 애플리케이션에서 예측 처리를 통합하고 예측 결과 자체는 라이브러리의 API를 통해 구한 다음, 이 결과를 웹 애플리케이션에서 이용한다.

  • 예측에 실시간 처리가 필요
  • 웹 애플리케이션과 머신러닝을 수행하는 시스템이 동일한 언어로 구현
  • 예측 모델은 메모리에 올리지 부담스럽지 않은 크기로 관리한다.
  • 예측 처리에 드는 연산 부하가 낮은 알고리즘을 택하여 모델의 시간/공간 복잡도를 억제
  • 머신러닝 처리 부분과 웹 애플리케이션 사이의 결합이 강해지는 특징이 있다.
  • 결론적으로 애플리케이션 규모가 커지면 코드 변경과 배포 비용이 증가하므로 머신러닝 부분의 개발도 보수적으로 되기 쉽다.

2. 배치 처리로 학습 + 예측 결과를 API를 통해 사용(예측을 실시간 처리)

예측을 수행하는 부분을 별도 API 서버에 맡기는 패턴.
학습이 배치 처리로 이뤄진다는 점은 다른 패턴과 같지만, 예측 결과는 실시간으로 처리되어 API 를 통해 웹 애플리케이션에 전달된다. HTTP 나 RPC 요청의 응답으로 예측 결과를 전달하는 API 서버를 둔다는 점이 특징이다.

  • 웹 애플리케이션과 머신러닝을 구현하는 언어가 서로 다르다
  • 웹 애플리케이션에서 이벤트가 발생하면 예측이 실시간으로 수행된다.

API 서버를 직접 구현하고 이 서버 앞에 로드밸런서를 두어 부하에 따라 예측 서버를 늘리거나 줄이는 구조가 필요하다.
퍼블릭 클라우드의 매니지도 서비스인 애저 머신러닝 이나 아마존 머신러닝 처럼 예측 처리용 서비스가 포함된 플랫폼을 이용하는 방법도 있다.
예측 모델을 오브젝트 스토리지 에 저장하고 API 서버는 도커 이미지로 만들어 일레스틱 컨테이너 서비스나 구구르 쿠버네티스 엔진을 통한느 방식으로도 규모확장이 손쉬운 환경을 구축할 수 있다.

3. 배치 처리로 학습 + 예측 결과를 DB에 저장하고 사용(예측을 배치 처리)

웹 애플리케이션에 적용하기 가장 유리한 패턴으로 가장 먼저 시도할 방법으로 무난한 방법으로 소개된다.
학습 모델을 일괄 학습한 다음, 이 모델로 예측까지 배치 처리하고 그 결과를 DB 에 저장해 둔다.

  • 예측에 필요한 정보는 예측 배치를 실행할 때만 필요하다.
  • (사용자의 웹 페이지 요청 같은) 이벤트에 대해 예측 결과를 즉각 알려주지 않아도 된다.

웹 애플리케이션과 머신러닝 시스템은 순전히 DB만을 경유해 정보를 공유하니 구현 언어가 서로 달라도 무방하다.

그 외 실시간 처리로 학습

실시간 처리로 학습해야 하는 경우는 어떤 상황인가?
실시간 추천의 경우 파라미터를 실시간을 갱신해야 한다.
이런 경우 입출력 데이터를 메시지 큐 등을 활용하여 주고받는다.

하지만 분류나 회귀 같은 작업에서 모델을 그렇게 즉각적으로 갱신해야 하는 일을 많지 않으므로 모델을 비교적 짧은 간격으로 갱신해야 한다면, 그 간격 동안 쌓인 데이터만을 배치 처리로 학습하되, 최적화에는 추가 학습이 가능한 미니배치 학습을 적용해보는것이 좋다.

참고 할 만한 아키텍처:

  • 실시간 갱신을 분산 메시지 큐인 카프카와 조합한 Oryx0 프레임워크의 아키텍처
  • 순차 학습에 특화된 주바투스(jubatus)1 프레임워크

책 정보

  • 아리가 미치아키, 나카야마 신타, 니시바야시 다카시, 『머신러닝 실무 프로젝트』, 한빛미디어(2018), 4.기존 시스템에 머신러닝 통합하기

0: https://github.com/OryxProject/oryx
1: http://jubat.us/ja/

0개의 댓글