[실무] ML(머신러닝) 실무노트
소프트웨어 측면에서는 리펙토링, 단위테스트, 종속성 제거, 문서화 등을 통해 유지 보수를 관리해왔는데, 머신러닝 실무에서는 어떤식으로 이를 관리할까?
먼저 데이터, 모델 서빙 측면으로 나눠서 ML 실무를 살펴보면 다음과 같다..
1) 데이터 변화가 분기 단위, 월 단위 심하면 연 단위로 천천히 일어날 때
2) 데이터 변화가 빠르게 일어날 때 -> 유저의 피드백을 통해 계속적인 학습이 이루어져야 하는 상황, 1) 보다 어려움,,
1) 온라인 서빙 : ML을 시스템에 인테그레이션 할 때, 온라인 프로덕션을 통해 api 서버를 만들어서 리얼타임 서빙을 진행할 수 있음 => 어려움,, 서비스 측면에서 에러 발생 가능
2) 오프라인 서빙 : 전체 유저에 대해 하루에 한번 정도 예측 진행 => 온라인 서빙보다 쉬움, 서비스 측면에서 에러는 안나니까
이때 ML을 진행하면서 직면할 수 있는 크고 작은 문제들이 있는데,
1) 고정된 데이터 셋 => 변화에 대응할 수 있는 데이터 셋 설계
2) 아티팩트 통합이 어려움 => 재사용 가능한 모델들로 수정
3) 명확한 문제의 정의가 없음 => 문제를 올바르게 정의
4) 데이터셋, 모델 검증 미흡 => 예상치, 데이터셋, 모델 모두 검증절차를 거쳐야 함 (output에 에러는 따로 안나므로 예측률이 떨어져서 한참 뒤에야 개선할 수 있음,,장애를 모르고 그냥 지나감,, )
5) 데이터셋이 편향 => 다양한 데이터 수집
(데이터를 엔지니어링 하는 실무 역량이 필요)
이렇게 개선 되도록 노력해야한다.
<ML 실무 노트>
* 머신러닝 프로덕트를 만든다고 했을 때, 학습 데이터의 feature 가 쌓이고 , 오프라인 데이터 파이프라인에 적재되고, 온라인 서빙이 되는 전체 구조를 파악하고 있어야 함. 그 다음 실 데이터가 오프라인에 저장 되고 학습데이터로 정제되는 과정을 파이프라인으로 디자인 해야함.
* 모델 레지스트리를 관리 해주어야함. 하나의 프로젝트에서 여러 모델들이 있을 때 각각의 버전 특징과, 성능, 사용하는 데이터 feature, 프레임워크 등을 표준화된 방식으로 관리.
* ML은 여러 Feature, 알고리즘, 하이퍼 파라미터, 다양한 모델 구성 등을 바꿔가며 실험하고 가능한 빨리 문제점을 개선할 수 있는 모델을 구성한다. 코드 재사용을 극대화하면서 효과가 있는 실험 관리를 하는 것이 중요. (실험의 연속이랄까..효과적인 실험을 추구하는 ML...)
* SW 측면의 배포는 자동배포의 경우 깃에서 머지 되면 트리거 포인트가 발생하지만, ML 측면의 배포는 여러가지 트리거 포인트가 발생한다. 모델을 만들고 나서 성능을 검증한 뒤에 리더가 서빙을 결정한 경우, 기존 모델의 정확도가 떨어져서 재학습이 필요한 경우, 매일 학습시켜야 하는 데이터를 사용하는 경우는 매일 배포, 온라인 리얼타임 서빙을 하는 경우 등등..
* ML은 작성한 코드말고도 데이터가 계속 변하므로 언제든 성능이 저하될 수 있음. 따라서 데이터 통계를 보고 모델의 온라인 성능을 모니터링 해 예상치를 벗어날 때 인지해야함.
<MLOps 의 KeyPoint>
① 모델을 학습, 배포하는 타이밍 (트리거)
- 학습 또는 배포 수동 요청 : 파이프라인을 수동으로 실행한다.
- 회사에서 일정 기준이 있을 때 : 라벨이 지정된 새 데이터가 매일 매주 매월 단위로 업데이트 될 때 그에 맞게 모델도 재학습, 배포를 진행한다.
- 새 학습 데이터 추가 : 새로운 데이터가 추가되는 경우 모델의 재학습을 진행한다.
- 모델 성능이 저하 : 모니터링에서 모델의 성능이 기준치 이하로 저하되는 경우 모델의 재학습을 진행한다.
- 데이터 분포의 변화 시 (데이터 드리프트) : 예측 수행에서 사용되는 feature의 데이터 분포에 큰 변화가 있으면, 모델이 오래되었다는걸 의미하므로 재학습, 배포가 필요하다.
② CI/CD/CT
CI (Continuous Integration 지속적 통합)
CD (Continuous Deployment 지속적 배포)
CT (Continuous Traning 지속적 학습) -> 데이터파이프라인 자동화가 우선시 되어야 함
구글에서 정리해준 CI/CD/CT 관련 글인데 참고하면 좋을 듯 하다
MLOps: 머신러닝의 지속적 배포 및 자동화 파이프라인 | 클라우드 아키텍처 센터 | Google Cloud
의견 보내기 MLOps: 머신러닝의 지속적 배포 및 자동화 파이프라인 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 문서에서는 머신러닝(ML) 시스템을 위한
cloud.google.com
<ML 파이프라인>
위와같은 파이프라인을 자동화하는게 좋고, 전체 flow를 팔로우 할 수 있어야 한다.
① 데이터 수집 (Data ingestion/versioning)
: 데이터셋에 버전관리 필요, 피쳐 엔지니어링은 별도 수행X
② 데이터 유효성 검사 (Data validation)
: 새로운 데이터의 통계가 예상대로인지 확인 -> TFDV 사용하면 좋음
③ 데이터 전처리, 데이터 분할 (Data preprocessing)
: 배치단위로 효율적으로 하는게 좋음, 프로세싱이 끝나면 데이터로더에 캐싱 시키면 전처리 한번만 할 수 있음 (모델 매 에포크마다 하는거 금지..)
④ 모델 학습 (Model training)
⑤ 모델 튜닝 (Model tuning)
⑥ 모델 분석 (Model analysis)
⑦ 모델 검증 (Model validation)
: TFDV 사용하면 좋음
⑧ 모델 버전 관리 (Model deployment)
⑨ 모델 배포, 피드백