최근에 보게된 Andrew Ng 교수님의 MLOps: From Model-centric to Data-centric AI talk에서 MLOps라는 단어를 보았습니다. 관련 업계에서 일하고 있으면 직감적으로 Machine Learning과 DevOps의 합성어임을 알수 있습니다. 딥러닝을 이용하여 신경망 모델을 학습하고 실제로 제품화하여 배포 해보신 분이라면 MLOps라는 단어는 생소하더라고 분명히 이 부분에 대해서 좋은 방법과 best practice를 찾아보려고 고민하셨을 거라고 생각합니다. 여기서는 MLOps라는 것이 무엇인지에 대해서 나름대로 정리를 해보았습니다.
인공지능 모델은 크게 4가지 단계로 만들어 집니다. 먼저, (1) 어떤 문제를 풀 것인지를 정의합니다. 그리고 문제를 풀기위한 (2) 데이터를 수집합니다. 필요시 데이터에 학습 타겟이 될 레이블도 만듭니다. 데이터를 충분한 만큼 모았다고 생각되면 이제 소위 말하는 DNN, RNN, CNN 등 우리가 풀 문제에 가장 적합하다고 생각되는 모델을 구현합니다. (3) 구현된 인공지능 모델을 데이터를 이용하여 학습합니다. 학습이 적당히(?) 완료된 모델을 테스트해 봅니다. 잘 작동하면 배포하고 (4) 제품화하여 사용합니다.
MLOps는 기계 학습으로 만들어진 모델을 배포하고 제품화하는데 필요한 과정에서 일어나는 모든 일들 입니다.[1] 더 넓게는 기계 학습의 전체 lifecycle을 관리하는 일이라고 할 수 있습니다. 인공지능 모델은 전통적인 프로그램이 코드만으로 이루어진 것과 다르게 코드와 데이터로 만들어 지는데, 즉, 코드 부분에 해당하는 모델을 개발하고 배포하는 부분과 데이터를 다루고 관리하는 부분의 두 가지 작업이 모두 필요합니다. 처음에 말씀드린 Andrew Ng 교수님의 talk에서는 어찌보면 그동안에 홀대(?)했던 데이터 부분에도 더 신경을 쓰자라는 메시지를 담고 있습니다.
먼저, 코드를 다루는 부분에서 필요한 역할을 생각해 보았습니다.
- 인공지능 모델을 구현합니다. Tensorflow, PyTorch 등의 라이브러리를 이용하여 구현합니다.
- 데이터를 이용하여 모델을 학습하고 튜닝합니다.
- 학습된 모델을 평가하고 테스트 합니다. 모델의 정확도(accuracy) 뿐만 아니라 실제, 제품화에 요구되는 충분한 속도(performance)가 만족되는지도 중요합니다.
- 개발이 완료된 모델을 배포합니다.
다음으로, 데이터를 다루는 부분에서 필요한 역할입니다.
- 어떤 종류의 데이터를 사용할지 정합니다.
- 필요한 데이터를 어떻게 모을지 정합니다.
- 지도 학습을 기반으로 한다면, 어떻게 레이블링을 할 것인지 정합니다.
위의 작업들은 필요할때 마다 반복해서 수행됩니다.
인공지능 모델을 개발하고 제품화하는데 있어서 모든 과정이 필요하고 당연한 부분이지만, 만약 MLOps의 역할을 해야 한다면, 혹은 지금 하고 계시다면 둘 중 어떤 부분이 더 중요해 보이시나요? 인공지능 모델의 성능을 계속해서 유지하고 향상시키기 위해서는 어떤 역할이 가장 크리티컬할까요? 또, 그 역할을 가장 잘 수행하기 위한 방법은 무엇일까요? 혹시 지금 가장 중요한 부분을 놓치고 있지 않은지 고민해 볼만한 것 같습니다.
참고
[1] MLOps, https://en.wikipedia.org/wiki/MLOps
'컴퓨터공학' 카테고리의 다른 글
Machine Learning: Data Bias (데이터 편향) (0) | 2021.05.29 |
---|