이번 포스팅에선 머신러닝 파이프라인에 대해 알아보도록 하겠습니다. 머신러닝 파이프라인은 학습 데이터를 수집하는 것 ~ 모델에 대한 피드백을 받는 것까지의 단계까지를 말하는데, 이를 life cycle이라고도 한다고 합니다. 머신러닝 모델을 개발하는 Researcher는 최대한 모델의 개발에만 집중할 수 있게 이 외의 모든 과정을 자동화하는 것이 서비스를 제공하는 입장에서 매우 중요합니다. 또한, 양질의 데이터가 많을수록 성능이 좋아지는 머신러닝 모델의 특성 상 데이터를 검증하고, 전처리하여 모델을 재학습시키는 과정을 자동화시킬 필요가 있습니다.
머신러닝 파이프라인의 흐름을 표현하면 아래 그림과 같습니다.
각 단계가 의미하는 바가 무엇인지, 각 단계가 필요한 이유가 무엇인지 간단히 보도록 하겠습니다.
1. 데이터 수집, 버전 관리, 데이터 검증
1-1. Data Ingestion/Versioning
머신러닝 파이프라인의 첫 걸음인 데이터 수집 단계입니다.
모델의 재현 가능성, 성능 비교를 위해 데이터는 모두 versioning해둡니다.
이를 위한 cloud 기반 objective storage 툴로는 amazon의 s3, google의 gcs등이 있습니다.
1-2. Data Validation
새로운 데이터가 들어오면 이를 검증해주어야 합니다. 이상한 데이터가 있지는 않은지, 결측치가 생기진 않았는지.. 이런 데이터들은 학습 데이터로 들어왔을 때 모델의 성능을 저하시킬 수 있기 때문입니다.
이 단계를 학습 전에 미리 해두는 이유는, 기껏 학습/검증 데이터의 비율을 원하는 비율로 맞추고 나서 학습 전에 데이터 검증을 들어가게 되면 원하지 않는 비율로 모델의 학습/검증을 할 수 있기 때문입니다.
이를 위한 툴로는 tfdv가 있는데, 사용자의 설정에 따라 soft warning을 주는 것부터, 파이프라인을 중지시키는 것까지 가능합니다.
또한 데이터의 비율을 여기서 맞춰주게 됩니다. 데이터 imbalance가 심하면 모델의 데이터 학습에 영향을 줄 수 있기 때문입니다. 엔지니어의 판단에 따라 undersampling해 그 비율을 맞추는 등의 작업을 이 단계에서 합니다.
1-3. Data Preprocessing
새로 수집한 데이터를 모델이 학습할 수 있는 형태로 정제해줍니다.
음성, 시계열의 경우 vectorize해준다거나, 이미지의 경우 tensor로 바꾸어주는 등의 작업이 있겠습니다.
2. 모델 학습, 분석, 버젼 관리
2-1. Model Training
사실상 파이프라인의 존재 이유가 아닐까 생각해봅니다.
loss를 최소화하는 모델을 학습시킵니다.
모델 훈련의 효율적인 분포가 중요한데, 이에 사용되는 툴로는 Neural Architecture Search(NAS), Feature Space Search, Ensemble Search 등이 있습니다.
2-2. Model Tuning
모델을 잘 학습시키기 위한 hyper parameter를 선택하는 단계입니다.
이것이 성능 개선과 경쟁 우위 선점에 중요하기에 많이 관심받고 있다고 합니다.
이를 위한 툴로는 TFMA 등이 있습니다.
2-3. Model Analysis
precision, AUC와 같은 metric을 이용해 모델의 성능을 평가하는 단계입니다.
모델의 feature importance를 파악할 수 있고, feature 변경 후 모델의 예측 변화를 파악할 수 있습니다.
이 과정에선 Researcer의 분석과 검토가 필요합니다.
2-4. Model Validation, Versioning
모델의 AB 테스트를 위해 어떤 모델이 사용되었고, 어떤 hyper parameter들이 사용되었으며 어떤 버전의 데이터셋이 사용되었는지 기록합니다.
이 때 큰 변화가 있다면 메인 버전 번호를, 작은 변화가 있다면 서브 버전 번호를 늘려 기록합니다.
이를 잘 문서화 해두어야 릴리즈 시 모델 성능 비교에 용이합니다.
3. 모델 배포, 피드백 루프 반복, 개인 정보 보호
3-1. Model Deployment
모델을 학습하고, 튜닝하는 과정에 대해 알아보았습니다. 이 과정에서 여러 버전의 모델이 생기는 것은 자연스러운 일입니다.
이 때, 모델이 너무 다양하다면 모델의 업데이트는 조금 복잡한 작업이 될 것입니다.
REST API, RPC 등의 툴을 사용한다면 여러 버전의 모델을 동시에 호스팅해 AB 테스트를 진행하고, 다른 모델을 서비스에 동시에 배포해 양질의 피드백을 얻을 수 있어 동시에 여러 모델을 배포할 환경을 구축해두는 것이 좋습니다.
또한 이렇게 서버를 구축해둔다면 서비스의 종료 없이 새로운 모델의 배포가 용이하므로 backend 팀과 머신러닝 팀의 커뮤니케이션에서 오는 수고로움을 크게 덜어줄 수 있습니다.
3-2. Model Feedback
여러 종류의 피드백이 있을 수 있습니다.
이의 자동화를 잘 해두어야 researcher들이 모델의 개발에만 집중하는 것이 가능해집니다.
모델의 개선, 개발, 피드백 외에는 모두 자동화가 가능합니다.
3-3. 개인 정보 보호
이루다 사태만 보아도 개인 정보 보호가 중요한 것을 알 수 있었습니다.
유저의 동의 없이 raw data를 접근하지 못하게 하는 비식별화가 필요합니다.
다만, 현업에서 이를 엄격하게 지키기 쉽지 않으니 항상 올바른 방향에 대해 고민할 필요가 있습니다.
댓글 영역