어떠한 일련의 작업들을 순서대로 묶어 위험요소나 외부의 개입을 최소화하고 자동으로 실행하고자 할 때 파이프라인을 구축한다.

파이프라인의 개념이 적용되지 않은 머신러닝 프로젝트는 결과물을 얻기 위한 과정의 자동화와 재사용성이 확보되지 않기 때문에 일회성 PoC에 그칠 가능성이 높다.

머신러닝 파이프라인이라는 개념은 머신러닝 모델을 학습하고, 재사용하며, 필요한 자원들을 관리하고 배포하는 일련의 과정을 표준화하고 자동으로 동작할 수 있도록 하기 위해 논의 되기 시작했다.

DAG

파이프라인은 대개 DAG(Directed acyclic graph: 방향성 비순환 그래프)의 형태를 띄고 있다. 이름에서 알 수 있듯이, DAG는 방향을 가지되, 루프는 존재하지 않아, 그래프의 시작과 종료가 이루어지는 시점이 명확하기에 파이프라인을 구성하는데 적절한 구조이다.

DAG의 예시

DAG의 예시

DAG의 형태를 띈 머신러닝 파이프라인을 구성하는 요소에는 컴포넌트(component)와 아티팩트(artifact)가 있다.

머신러닝 파이프라인의 요소

머신러닝 파이프라인에는 각각의 작업을 하는 컴포넌트와, 컴포넌트의 결과물이자 다음 작업에 사용되는 아티팩트가 있다.

머신러닝 파이프라인에서의 컴포넌트와 아티팩트

머신러닝 파이프라인에서의 컴포넌트와 아티팩트

컴포넌트 (Component)

  • 컴포넌트는 각각의 독립되고 재사용이 가능한 모듈로서 입력을 받아 어떠한 처리나 연산을 거쳐 결과값을 출력한다.
  • 스크립트, 노트북 또는 다른 실행 가능한 형태의 코드가 될 수 있다.
  • 예) 데이터 검증, 데이터 전처리, 학습, 평가, 추론 등

아티팩트 (Artifact)

  • 아티팩트는 컴포넌트의 산출물로서, 파일이나 경로가 될 수 있다.
  • 아티팩트는 다른 컴포넌트의 입력값의 역할을 하며, 컴포넌트와 컴포넌트 사이를 잇는 역할을 할 수 있다.
  • 아티팩트는 저장된 경로와 그 버전이 꼭 관리가 되어야 한다.
  • 예) 데이터, 모델, 피쳐 등

머신러닝 파이프라인의 단계

머신러닝 파이프라인에도, 구현하고자 하는 기능과 재사용성, 자동화 여부 등에 따라 파이프라인의 성숙도 즉, 수준이 구별된다.

Level 0

모델을 위한 갖가지 학습을 반복적으로 진행하고, 특정한 성능 지표의 달성을 최우선으로 한다. 주로 노트북이나 개별로 실행하는 스크립트의 형태를 띄고 있으며, 재사용성은 매우 낮다. 따라서 프로덕션 용도로 사용되지 않는다.

주로 사이드프로젝트나, 새로운 기술을 익히기 위한 용도로 사용되며, 캐글 대회나 연구, PoC 등을 진행할 때 주로 보인다.

즉, 파이프라인으로서의 역할과 그 효과가 매우 미미하거나 없는 형태인 수준이라고 할 수 있다.

Level 1

데이터 처리와 학습, 성능 평가, 추론 등의 단계가 컴포넌트로 독립되어 있으며 각각의 산출물은 아티팩트로서 저장된다. 따라서 재학습이 용이하며, 각 실험결과 또한 기록된다.

프로덕션 상태에서도 모니터링이 이루어지며, 추론 속도, 재학습 속도 등의 성능 또한 중요한 지표로 기록된다.

레벨 1의 파이프라인은 최소한의 작업단위들을 모듈로서 표준화 하고 빠르게 프로덕션 환경을 프로토타이핑 하는데 용이하며, 재학습을 가능케 한다. 또한, 이러한 형태의 파이프라인은 업무의 공유나, 인수인계 상황에서 복잡한 과정을 피할 수 있다.

Level 2

레벨 2의 파이프라인은 CI/CD(Continuous Integration and Continuous Deployment)와 더불어 CT(Continuous Training)의 요소까지 접목된 수준을 나타낸다.

CI/CD/CT가 접목된 파이프라인은 모델의 개선과 프로덕션의 수정을 용이하게 하고, 개선된 파이프라인과 기존 파이프라인의 A/B테스팅이 용이해진다. 또한 공백없는 배포를 자동으로 수행하기 때문에, 결과적으로 협업을 통한 제품의 개선과 반영 속도를 훨씬 빠르고 안전하게 할 수 있다.


마무리하며

이번에는 MLOps 에 대해 공부하며, 머신러닝 파이프라인에 대한 개념과 수행 기능, 요건 등을 정리해보았다. 현재 머신러닝 파이프라인을 구축하는데 사용되는 툴이나 라이브러리는 너무나 다양하게 포진되어 있기에, 어떠한 특정 툴을 사용하는 것보다는, 파이프라인을 구축하는데 무엇이 필요하고 어떤 기능이 꼭 구현되어야 하는지를 제대로 파악한 뒤, 필요에 따른 적합한 도구를 사용하는 것이 매우 중요하다고 판단된다.

Reference

  • Udacity: Machine Learning DevOps Engineer