[살아 움직이는 머신러닝 파이프라인 설계] 1. 머신러닝 파이프라인
인공지능/Tensorflow Extended

[살아 움직이는 머신러닝 파이프라인 설계] 1. 머신러닝 파이프라인

오늘부터 TFX 스터디에 참여하면서 '살아 움직이는 머신러닝 파이프라인 설계'의 내용을 글로 정리하게 되었습니다. 책의 내용을 정리할 때 코드 부분을 생략하니 참고 바랍니다.


머신러닝 파이프라인이란

머신러닝 파이프라인이란 '머신러닝 생애주기를 표준화 및 자동화하는 방법'이다. 소프트웨어 공학이 '고품질의 소프트웨어를 개발하고 유지보수하도록 생애주기를 체계화하고 자동화'하기 위해 존재하듯, 머신러닝 파이프라인도 머신러닝 프로젝트에서 발생할 수 있는 여러 기술부채를 줄이기 위해 머신러닝 생애주기를 체계화 및 자동화한 것이다.

머신러닝 파이프라인의 필요성

머신러닝 파이프라인을 도입하게 되면 위에서 언급했듯이 머신러닝 프로젝트에서 생길 수 있는 기술부채를 줄일 수 있다. 구체적으로 설명하면 다음과 같다.

  • 기존 모델의 유지보수에 신경 쓰지 않고 새 모델 개발에 집중할 수 있다. 머신러닝 파이프라인을 적용하면 재사용 가능한 코드를 사용하기 때문에 기존 모델의 코드를 최신화하지 않아도 현재 프로젝트 코드에서 원활하게 돌아간다. 이덕분에 데이터 과학자들은 새로운 모델의 개발과 학습에만 집중할 수 있다.
  • 버그를 예방할 수 있다. 예를 들어 하나의 모델이 학습을 마치고 배포를 하기 전에 데이터 전처리 코드를 수정했다면, 모델은 학습할 때와 다른 전처리 방식을 적용한 채 배포됩니다. 머신러닝 파이프라인은 이러한 상황을 예방하도록 도와줍니다.
  • 버전 관리 문서화를 자동으로 처리할 수 있다. 모델은 데이터셋과 하이퍼 파라미터에 따라 성능이 달라진다. 그렇기때문에 해당 모델이 어떤 데이터셋으로 학습했는지, 하이퍼 파라미터가 어떤 값으로 설정되어 있는지 추적해야 한다. 머신러닝 파이프라인은 이러한 모델의 버전 관리를 자동으로 문서화까지 하여 데이터 과학자들이 쉽게 모델 간 성능 비교를 하도록 도와준다.
  • 머신러닝 프로젝트가 표준화된다. 과정이 표준화되면 의사결정이 간소화되고 팀원간 의사소통이 원활해진다. 그 덕분에 본질적인 문제에 집중할 수 있고 머신러닝 프로젝트가 빠르고 효율적으로 운영된다.

언제 머신러닝 파이프라인을 도입해야 하는가

머신러닝 파이프라인은 이런 이점을 제공하지만 새로 나온 논문의 모델이나 자체적으로 새로 설계한 모델을 학습하고 검증할 때는 구축 시간에 비해 많은 이점을 주지 못한다. 모델을 연구할 때는 새로운 데이터가 물밀듯이 들어오지도 않고, 배포와 확장성을 고려할 필요도 없다. 그렇기 때문에 모델 파이프라인은 지속적으로 데이터 수집, 모델 학습, 모델 배포가 이루어지거나, 머신러닝 시스템을 확장할 필요가 있는 상황에서 빛을 발한다.

머신러닝 파이프라인 단계

머신러닝 파이프라인은 다음과 같이 여러 단계로 나누어진다.

머신러닝 파이프라인 도식화

데이터 수집 및 버전관리

모든 머신러닝 프로젝트는 데이터 수집으로 시작한다. 다양한 경로를 통해 수집된 데이터를 각 단계에서 처리할 수 있도록 데이터를 가공하고 이를 데이터셋으로 저장한다. 또한 모델이 배포한 이후에도 계속 데이터를 수집하고 버전화한다. 데이터셋을 버전화하는 이유는 모델이 학습한 데이터셋에 종속적이기에 각 모델이 어떤 데이터셋으로 학습했는지 기록하는 것이 중요하기 때문이다.

데이터 검증

데이터 검증 단계에서는 데이터셋의 통계가 예상대로인지 확인한다. 새로 수집한 데이터셋의 성질이 항상 이전 데이터셋과 비슷하다고 보장할 수 없다. 예를 들어, 데이터셋의 클래스 분포가 A는 70%, B는 30%로 수집된다고 가정하고 이를 데이터 증강(Data Augmentation)이나 학습에 적용했다고 하자. 이때 새로 수집한 데이터셋의 클래스 분포가 A가 40%, B가 60%라고 하면, 같은 방식으로 모델을 학습하기 어렵다. 그래서 데이터 검증을 통해 새로운 데이터셋의 특징을 파악하고 이전 데이터셋과 비교한다. 이때 이전 성질과 다르다면 이를 학습에 반영하거나 사람에게 경고할 수 있다.

데이터 전처리

데이터 전처리는 데이터를 모델이 학습할 수 있는 형태로 가공하는 단계를 말한다. 모든 데이터가 수집된 상태에서 바로 모델에 집어넣을 수 없기 때문에 학습이나 배포시에 데이터를 모델에 집어넣기 전에 전처리 과정을 꼭 거친다. 또한 모델의 일반화나 성능에도 영향을 미친다. 이러한 영향력 때문에 데이터 전처리 과정이 수정되면 이전에 학습한 데이터와 모델들이 더 이상 유효하지 않게 된다. 그렇기에 데이터 전처리 과정은 특히 조심히 관리해야 한다.

모델 학습 및 튜닝

우리가 익히 잘 알고있듯, 모델 학습은 데이터셋을 모델이 학습하는 과정이다. 이때 모델이 학습할 때 사용되는 컴퓨팅 자원을 효율적으로 분배하는 방법도 해당 단계에서 다룬다. 또한 하이퍼 파라미터 튜닝 과정을 통해 모델 배포 전 가장 최적화된 하이퍼 파라미터를 찾는 과정도 추가할 수 있다.

모델 검증 및 분석

배포하기 전, 학습한 모델이 기준 성능을 만족하는지, 또한 이전 모델보다 향상되었는지를 검사한다. 다양한 성능 지표와 테스트 데이터셋을 통해 기준치와 이전 모델의 성능을 비교하여 데이터 과학자가 해당 모델을 배포할지 결정할 수 있도록 도와준다.

모델 버전 관리

데이터셋, 하이퍼 파라미터, 모델을 지속적으로 추적하는 과정이다. 모델은 항상 최신 데이터를 학습해야 하고, 이에 따라 최적화된 하이퍼 파라미터가 달라질 수 있다. 또한 성능 향상을 위해 데이터 과학자들이 새로운 모델을 도입할 수 있다. 그렇기 때문에 모델을 버저닝하고 이에 사용된 세 가지 요소를 문서화해야 한다.

모델 배포

학습한 모델을 사용자들에게 제공하는 과정이다. 어플리케이션에 모델을 내장할 수도 있지만 이는 모델 업데이트가 어렵다. 그래서 모델 서버를 따로 두어 배포하는 방식을 취한다. 모델 서버 방식은 애플리케이션 운영을 중단하지 않고도 새로운 모델을 배포할 수 있고, 여러 서버를 호스팅해 A/B 테스트를 진행할 수 도 있다.

피드백 루프

피드백 루프는 모델이 배포 환경에서 제성능을 발휘하는지 확인할 수 있다. 또한 운영중 들어오는 데이터를 수집해 새로운 모델 학습에 활용할 수 있다.

개인 정보 보호

개인 데이터 수집 및 사용에 대해 소비자들이 점차 우려하고 있다. 그래서 최근에 머신러닝 생애주기 내에서 개인 정보 취급이 적법하다는 것을 보장해야 한다.

파이프라인 오케스트레이션

머신러닝 파이프라인의 각 과정은 항상 순차적으로 동작하지 않는다. 머신러닝 파이프라인은 방향 비순환 그래프의 형태를 띄우고 있어 병렬로 처리할 수 있는 단계들도 존재한다. 하지만 이런 과정들이 문제없이 병렬적으로 동작하기 위해 직접 글루 코드(Glue Code)를 작성하기란 쉽지 않다. 실제로 'Hidden Technical Debt in Machine Learning Systems'라는 논문에서는 머신러닝 프로젝트가 실패하는 대부분의 요인이 이 잘못 작성된 글루 코드 때문이라고 밝힌다. 이를 위해 Apache Beam, Apache Airflow, Kubeflow 등의 파이프라인 오케스트레이션이 등장했다. 이들은 머신러닝 파이프라인의 각 과정을 관리하고 표준화된 도구를 통해 글루 코드에서 발생할 수 있는 버그를 예방한다.