머신러닝 시스템 설계 책을 모두 읽고 정리한 가이드임. 

 

실제로 머신러닝 시스템을 개발하고 구축하고 운영할 때 어떠한 행동들을 해야하는지 위주로 정리. 


ML 설계 과정:

  • ML 프로세스의 설계 과정은 워터풀이 아니라 반복적인 프로세스이다.
  • 단순하게 시작해서 점진적으로 개선하는 것을 추천한다.

 

ML 설계 과정 프로세스:

    1. 프로젝트 선정
    1. 데이터 엔지니어링 (e.g 데이터 수집, 전처리, 레이블링, 훈련 데이터 생성)
    1. 모델 개발 (e.g 모델 알고리즘 선택, 피처 엔지니어링, 훈련 및 재훈련)
    1. 모델 평가
    1. 배포
    1. 모니터링과 연속학습
    1. 피드백 (e.g 비즈니스적인 분석)

 

초기 설계 단계:

  • ML 이 적합한 솔루션인지 판단해야함.
  • ML 을 비즈니스 지표 개선에 목표를 두어야한다.
  • ML 사용자 경험 고려

 

데이터 엔지니어링 단계:

  • 데이터 종류 (e.g 사용자 데이터, 시스템 데이터 등) 에 따라 처리 방식 선택
  • 데이터 포맷 선정:
    • 이진 or 텍스트 포맷
    • 행 우선 포맷 or 열 우선 포맷
  • 데이터 모델 정하기 (e.g 문제를 해결하기 위한 데이터 표현 정하기, 관계형 모델 vs 문서형 모델 vs 그래프 모델)
  • 데이터 전달 방식 정하기 (e.g 데이터베이스 적재, API 를 통한 전달, 메시지 발행을 통한 전달)
  • 데이터 처리 방식 정하기 (e.g 스트림 처리 vs 배치 처리)
  • 데이터 분류

 

양질의 훈련 데이터 생성 단계:

  • 목적: 데이터 편향 없애기.
  • 데이터 샘플링 방법 정하기
  • 데이터 레이블링 방법 정하기
  • 데이터 증강 적용 여부 정하기
  • 데이터 리샘플링으로 클래스 불균형 문제 해결하기
  • 테스트 데이터와 훈련 데이터의 중복/그룹 누수는 없애야한다.

 

모델의 성능을 끌어올리기 위해 피처 엔지니어링 하기:

  • 데이터 결측값 처리하기
  • 피처 스케일링 하기
  • 필요하면 이산화 (Discretization) 하기
  • 필요하면 범주형 피처 인코딩 하기
  • 필요하면 교차 피처 (cross feature) 하기
  • 데이터 누수 문제 제거 해야함.
  • 피처 엔지니어링 Best Practice 를 적용하는 것.

 

모델 개발 단계:

  • 문제에 적합한 모델 알고리즘을 선택하기
  • 모델이 일반화를 잘 하는지/편향이 크진 않은지 판단하기 (e.g 훈련 데이터로 학습 시켰을 때 편향이 강하면 잘못된거, 단일 배치로 과적합이 안되면 잘못된거,
  • 모델 앙상블을 적용할 지 판단하기
  • 분산 훈련이 필요한 지 판단하기
  • 데이터 계보 (Data Lineage) 구축
  • 전이 학습 사용 여부 정하기
  • 책임 있는 AI 구축
  • 모델 카드 작성
  • 하이퍼파라미터 튜닝하기. (대체 방안으로 AutoML 적용하기)

 

모델 평가 (Evaluation) 단계:

  • 모델의 성능이 잘 나오는지 판단:
    • 성능과 관련된 사용자 지표 분석
    • 정밀도, 재현율, F1 점수, AUC-ROC 확인
    • 베이스 라인 평가 사용
    • 원하는 수준의 목표에 도달했는지 판단
    • 슬라이스 기반 평가
  • 요구사항을 충족하는지 판단:
    • 신뢰성
    • 확장성
    • 유지보수성
    • 적응성
    • 안정성 (e.g 모델이 인종차별 하지는 않는지 테스트 )
    • 강건성 (e.g 작은 입력 변화에도 모델이 정상적으로 잘 작동하는지)
    • 공정성
    • 해석가능성
    • 보정이 잘 되는지

 

모델 배포 단계:

  • 배치 예측을 할 건지, 온라인 예측을 할 건지 판단
  • 모델을 압축할건지 여부
  • 하드웨어 수준의 지원을 어느정도로 받을건지 판단.
  • 프로덕션 테스트를 바탕으로 배포할 모델 선택

 

시스템이 잘 동작하고 있는지 모니터링:

  • 시스템이 잘 작동하는지 (e.g 로깅, Latency, Throughput, 지난 시간 동안 예측 횟수, 상태 코드 200대의 응답 비율과 200대가 아닌 응답의 비율, CPU, GPU, 메모리 사용률, 가용성 측정)
  • 분산 시스템 지연으로 시스템 성능이 저하되지는 않는지
  • 예측 성능이 떨어지지는 않는지 (e.g 모델 정확도 관련 지표, 예측값, 피처값, 원시 입력 값)
  • 데이터 파이프라인에서 데이터 수집이 잘 되는지, 데이터가 손상되지는 않는지
  • 데이터 파이프라인 처리 속도가 너무 느리진 않는지
  • 데이터 시프트 감지
  • 퇴행성 피드백 루프가 발생하지는 않는지
  • 피처 모니터링 (e.g 피처 로깅, 피처 유효성 검사)
  • 예측값 모니터링

 

데이터 시프트에 대응하기 위한 연속 학습:

  • 빠른 적응을 위해 능동적 학습 할 지 여부 정하기
  • 개념 드리프트, 데이터 드리프트 감지한 후 그에 맞게 대응
  • 기본적으로는 상태 재훈련, 개념/데이터 드리프트가 발생하면 무상태 재훈련
  • 연속 학습은 콜드 스타트 문제를 해결할 정도로 빨라야함. (e.g 모델 업데이트 트리거 구축, 실시간 스트림 처리 프로세싱 구축)

 

ML 인프라 구축:

  • 모델 성능 판단할 수 있는 모니터링 툴
  • 데이터 버전 관리
  • 피처 스토어 구축 (e.g 피처 버전 관리, 피처 재사용, 피처 일관화)
  • 모델 계보 관리
  • ML 워크 플로우 관리를 위한 스케줄러와 오케스트레이터
  • 모델 스토어 (e.g 모델 구성 정보 저장, 모델 매개변수 저장, 종속성, 데이터, 피처 등 저장)

 

MLOps 에 필요한 도구

  • 모델 실험을 추적하고 관리할 수 있는 도구 (e.g MLflow)
  • 개발 중 실험 추적을 위해 웨이츠 앤 바이어시스 (Weight & Biasis) 또는 Comet.ml
  • CI/CD 테스트를 위해 Github Actions 또는 CircleCI
  • 똑같은 파이썬 언어 버전
  • 컨테이너로 도커, 컨테이너 오케스트레이터로는 K8s
  • 스케줄러로는 Ariflow, 오케트스레이터로는 Kubeflow
  • 모델 배포를 위한 AWS SageMaker

+ Recent posts