[MLOps] [번역] Continuous delivery and automation pipelines in machine learning (4) MLOps level 0: Manual process

Hayley·2022년 4월 28일
0

MLOps

목록 보기
4/6

안녕하세요! 선한 데이터 사이언티스트를 꿈꾸는 Hayley 에요~! 👱‍♀️

저는 Google ☁ Cloud Architecture Center에서 작성한 Continuous delivery and automation pipelines in machine learning을 번역해오고 있습니다. 글이 길고, 차근차근🚶‍♀️ 공부하고 싶어서, 섹션을 나눠서 번역하고 있는데요!

오늘부터는 제가 이 글을 번역하고 공부하고 싶었던 이유인, MLOps의 성숙수준에 대해서 이야기해보겠습니다!

먼저 작성한 글은 다음 링크를 참고해주세요!

(지난 글 요약😎)

지난 글에서는 ML 시스템을 만드는데에 포함된 데이터 수집부터 데이터 준비, 데이터 탐색, 모델 학습, 모델 확인, 모델 배포, 모델 모니터링까지의 8개 단계를 다뤘습니다. 그리고 말미에 이런 단계들은 수작업으로 진행될 수도 있고 자동 파이프라인으로 진행될 수도 있는데, 이 단계들이 얼마나 자동화 되었는지에 따라 ML 프로세스의 성숙 수준을 결정한다는 이야기를 했습니다.

오늘 글에서는 이제 이 단계들이 모두 수동으로 진행되는 수준 0에 대해 다뤄보겠습니다.

* 문장을 읽기 편하게 하긴 위한 의역이 포함되어 있습니다.
* 해당 글의 공식적인 번역문은 해당 사이트에서 언어 설정을 영어 -> 한국어로 바꾸면 보실 수 있습니다.
* 혹 오역을 확인하시면 댓글 남겨주시기 바라겠습니다!


MLOps 레벨 0: 수동 프로세스

많은 현업 팀들은 최첨단의 모델을 만들 수 있는 데이터 사이언티스트와 ML 연구자들을 보유하고 있습니다. 하지만 ML 모델을 만들고 배포하는 과정은 완전히 수동이죠. 이것을 MLOps의 기초 수준, 또는 레벨 0 라고 부릅니다. 아래 다이어그램은 이 프로세스의 업무흐름을 보여줍니다.


그림 2. 모델을 예측 서비스로 제공하기 위한 수동 ML 단계

특징들

아래의 리스트는 그림 2에 보이는 MLOps 레벨 0 프로세스의 특징들입니다.

수동의, 스크립트 중심의, 인터랙티브한 프로세스

데이터 탐색적 분석, 데이터 준비, 모델 학습, 모델 성능 확인을 포함한 모든 단계는 수동입니다. 각 단계를 수동으로 처리해야 할 뿐 아니라, 한 단계에서 다른 단계로 넘어 가는 과정도 수작업입니다. 이 수동 프로세스는 보통 데이터 사이언티스트들이 쓸만한 모델이 만들어질 때까지 노트북에 작성하고 실행하는 실험적인 코드를 중심으로 진행됩니다.

ML 과 Ops(운영)의 단절

이 수동 프로세스에서는 모델을 만드는 데이터 사이언티스트들과 모델을 예측 서비스로 서빙하는 엔지니어들이 분리되어 있습니다. 데이터 사이언티스트들은 엔지니어링 팀에 모델을 아티팩트 형태로 (번역자 추가: 학습을 완료한 결과물, 바이너리 파일 등의 형태로) 전달하고, 엔지니어링 팀은 이를 그들의 API 인프라에 배포합니다. 이 전달은 특정 저장 위치에 학습된 모델을 넣어 놓는 것, 코드 리포지토리에 모델 객체를 커밋하는 것, 또는 모델 레지스트리에 모델 오브젝트를 업로드하는 것등의 형식을 띕니다. 그리고 나서 모델을 배포하는 엔지니어들이 저지연(Low-latency) 서빙을 할 수 있도록 모델에서 사용되는 변수들이 운영환경에서 접근 가능하도록 합니다. 이 과정에서 학습-서빙 비대칭(Training-serving skew)이 생길 수도 있습니다.

빈번하지 않은 릴리즈 반복

이 프로세스는 당신의 데이터 팀이 자주 변하지 않는 소수의 모델을 관리한다고 가정합니다. 모델 변화는 모델 구현을 바꾸거나 새로운 데이터로 모델을 재학습함으로 인해 발생합니다. 모델 버전 업 배포는 1년에 몇 번만 이뤄집니다.

CI(Continuous Integration, 지속적 통합) 없음

모델 구현 변화가 거의 없을 것이라고 가정하기 때문에, CI는 무시됩니다. 보통 코드에 대한 테스트는 노트북에 포함되어 있거나 스크립트 실행에 포함되어 있습니다. 실험 단계들을 구현한 스크립트와 노트북들은 버전 관리되며, 이러한 스크립트와 노트북들이 학습된 모델, 평가 지표, 시각화 결과와 같은 아티팩트(결과물)을 생성합니다.

CD(Continuous Deployment, 지속적 배포) 없음

모델 버전 배포가 자주 있지 않기 때문에, CD를 고려하지 않습니다.

"배포"란 예측 서비스 배포만을 의미

이 수동 프로세스는 학습한 모델은 예측 서비스로 배포하는 (예를 들면, REST API가 있는 마이크로 서비스) 것과만 관련 있으며, ML 시스템 전체를 배포하는 것과는 관련되지 않습니다.

능동적인 성능 모니터링의 부재

이 수동 프로세스는 모델 예측값이나 행동을 추적하거나 로그로 남기지 않습니다. 이러한 모니터링은 모델 성능 악화나 다른 모델 작동 방식의 드리프트(천천한 변화)를 감지하는데 필요합니다.

이 때 엔지니어링 팀은 API 설정, 테스트, 배포를 위해 보안, 회귀, 로드 테스트, 카나리 테스트와 같이 그들 나름의 복잡한 셋업을 갖추고 있을 수도 있습니다. 또한, ML 모델의 신규 버전이 운영 환경에 배포될 때는 보통 모든 운영 트래픽을 서빙하도록 배포되기 전에 A/B 테스트나 실시간 실험을 거칩니다.

챌린지들

MLOps 레벨 0은 ML을 적용하기 시작한 많은 기업들에 공통적으로 나타납니다. 이 데이터 사이언티스트 중심의 수동 프로세스는 모델이 거의 변하지 않거나 재학습 되지 않을 때에는 충분할 수도 있습니다. 하지만 실제로는 모델이 현실 세계에 배포될 때 문제가 생기는 경우가 많습니다. 주변 환경의 역동적인 행태가 변하거나 환경을 설명하는 데이터가 변하면 모델이 적응하지 못합니다. 이에 대한 더 많은 정보는, 왜 머신러닝 모델이 운영에서 고장나고 불타버리는가 글을 참고하세요.

이런 어려움을 다루고 운영에 배포된 모델의 정확도를 유지하기 위해서는 다음을 해야 합니다.

운영환경에 배포된 모델의 품질을 능동적으로 모니터링

모니터링은 성능 하락과 모델 변질을 탐지할 수 있게 합니다. 모니터링은 새로운 실험 사이클이나 새로운 데이터 기반의 모델 (수동) 재학습을 시작하는 신호로 작동할 수 있습니다.

운영 모델을 자주 재학습

진화하고 새롭게 나타나는 패턴들을 포착하기 위해서는 가장 최신의 데이터로 모델을 재학습할 필요가 있습니다. 예를 들어, 당신의 앱이 ML을 이용해서 패션 상품을 추천한다면, 이 앱의 추천 결과는 최신 유행과 제품에 맞게 달라져야 합니다.

계속해서 새로운 모델 구현 방법을 실험

최신 아이디어들과 기술 발전을 활용하기 위해서는, 변수 가공(feature engineering), 모델 아키텍쳐, 하이퍼 파라미터와 같은 모델 구현 방식에 새로운 것이 있으면 시도해보아야 합니다. 예를 들어, 당신이 얼굴 인식을 위해 컴퓨터 비전 기술을 사용한다면, 얼굴 패턴은 고정되어 있지만, 더 나은 새로운 기술을 이용함으로써 인식 정확도를 개선할 수 있습니다.

이 수동 프로세스의 어려움을 줄이기 위해서는, CI/CD와 CT를 위한 MLOps 프랙티스(관행)들을 사용하는 것이 도움이 될 수 있습니다. ML 학습 파이프라인을 배포함으로써 CT를 가능케 할 수 있고, ML 파이프라인의 새로운 구현코드를 빠르게 테스트, 빌드하고, 배포하기 위해서 CI/CD 시스템을 셋업할 수 있습니다. 이러한 기능들은 다음 섹션에서 좀더 자세히 다루겠습니다.


요약

ML을 도입하기 시작한 많은 기업들에서 보이는 패턴은 수동 프로세스, MLOps 성숙 레벨 0 이다. 이 수동 프로세스에서는 모든 단계와 단계 간의 연계가 수동이고, 특히 데이터 사이언티스들이 주피터 노트북에 반복적으로 작성하고 실행하는 실험 코드가 중심이 된다. 학습과 운영 파트 간에 단절이 있으며, 데이터 사이언티스트가 학습을 완료하고 모델 바이너리를 배포 담당 엔지니어에게 전달하면 엔지니어가 모델을 API 로 배포한다. 소스코드 버전 관리는 하지만 CI 까지는 하지 않고, 소스코드 배포도 CD도 하지 않는다. '배포'라는 말은 모델을 서비스한다는 의미로만 쓰인다. 모델을 자주 재배포 하지 않고, 모델 성능 모니터링도 하지 않는다.

덧붙이는 소감

오늘 과정을 읽으면서, 제가 현업 데이터 사이언티스트로 경험한 많은 프로젝트의 현주소 같았습니다. 애초에 PoC 위주의 프로젝트들이 많기도 하고 구축까지 가더라도, ML과 Ops는 구분되어 있어 데이터 사이언티스트가 모델을 만들어 바이너리를 저장해드리면 엔지니어분이 가져가서 쓰시는 식이었죠. 이 글에는 소스코드 버전 컨트롤은 한다고 되어 있는데, 저는 심지어 대부분 소스 코드 버전 컨트롤도 잘 하지 않는 프로젝트들을 많이 경험했습니다. 실험을 통해 모델 성능이 높도록 만드는 것에 방점이 찍혀있다 보니 주피터 노트북으로 대부분의 작업을 하고 프로젝트 말미에 해당 코드를 스크립트 화하고 배치 Job을 거는 정도였어요. 저의 개인적 경험에 한정적이지만, 아직 많은 ML 시스템의 MLOps 구현 수준은 Level 0 인것 같습니다. 하지만, 미래는 언젠가 오겠죠! 미리미리 준비해보겠습니다.

그러면, 다음 시간에는 다음 MLOps 성숙수준 레벨 1에 대해 번역해 보겠습니다! 다음시간에 만나요~! :)

profile
선한 데이터 사이언티스트를 꿈꾸다.

0개의 댓글