데이터 공부/Python

스트리밍 데이터 기반 AI 모델 처리에 대한 고민 (1) 람다 아키텍처 활용

한소희DE 2022. 9. 4. 20:22

공부를 통해 배운 내용을 작성하고 있습니다. 혹여 해당 포스팅에서 잘못된 부분이 있을 경우, 알려주시면 빠르게 수정 조치하도록 하겠습니다.

 

 

 

데이터의 변경사항이 있을 때마다, 머신러닝 알고리즘을 돌리면 어떻게 될까? 매우 비효율적일 것이다.
그렇다고 1일 1회 정기 배치 업데이트를 하자니, 데이터의 변경 사항이 반영되지 않은 머신러닝 알고리즘을 쓸 수없는 환경일 수 있다.
이를 해결하기 위한 방법으로, 람다 아키텍처를 활용해보면 어떨까 하는 생각이 들었다.

 

 

요즘 개발하고 있는 머신러닝 모델은, 텍스트 벡터라이즈와 시밀러리티 연산이 필요하다. 따라서 만약 기존에 training 되지 않은 스트림 데이터가 카프카 컨슈머(Kafka Consumer)를 통해 인입되면, 머신러닝 알고리즘을 다시 돌려서 벡터라이즈하고 & 시밀러리티 값 재연산이 필요하다.

 

1일 1회 배치 업데이트만 지원하자니, 새로 인입된 데이터나 or 데이터 상태값이 '삭제'로 변경된 데이터에 대해서 즉시 반영이 안 됐는데, 상황 상 이러한 데이터에 대해 즉시 반영되어야 하는 상황이었기 때문에, 고민이 많았다.

 

그래서 조언을 구했고, 그 결과 배치와 스트림을 조합한 아키텍처로 진행을 해야겠다는 결론을 얻었다.

 

즉, 람다 아키텍처를 응용할 것이다.

람다 아키텍처란, 실시간 분석을 지원하는 빅데이터 아키텍처다.

람다 아키텍처에 대한 자세한 설명은 이전 포스팅에서 다룬 적이 있으므로 생략하겠다. (대신 아래 링크를 걸었다.) 

 

https://eng-sohee.tistory.com/90

 

05. 워크플로 관리와 데이터 플로우

워크플로의 관리는 배치 수집에 반드시 필요하다. 나는 현재 기업 협업 프로젝트를 하고 있는데, 이 프로젝트에서도 워크플로 관리의 필요성을 여실히 느꼈다. 따라서 '워크플로 관리'와 '데이

eng-sohee.tistory.com

 

 

따라서, 이를 활용한다면 이 이슈를 해결할 수 있을 것으로 보았다.

 

이때 카프카 컨슈머를 통해 새로 인입되는 데이터는, 아주 최소한의 트레이닝 데이터만 뽑아 모델링하여 반영해둔다.

그리고 삭제된 데이터는, 삭제되는 데이터가 결과값에 반영된 id를 출력하여, 삭제된 데이터를 제외한 나머지 값으로 rank 를 다시 매기는 방식을 수행한다.

그리고, 1일1회 배치(batch) 업데이트가 진행될 시 한번에 모두 배치 레이어로 돌려 업데이트한다.

 

 

현재 해당 방법으로 변경하여 테스트를 진행하고 있다.

성능이 얼마나 더 좋아졌을지 & 이것을 실 서비스에 쓸 수 있을지 등에 대해서는 추후 해당 포스팅에 붙여 넣어 작성하도록 하겠다.