본문 바로가기



AiDAOps개발/개발 준비

AiDAOps의 기반 시스템 형태 결정하기

MLOps는 머신러닝 모델의 라이프 사이클 관리를 위하여 크게 데이터 관리, 모델 개발 및 학습, 모델 관리의 3 부분으로 구성된다고 할 수 있습니다.
그럼 개발하고자 하는 AiDAOps의 기능도 크게 3개의 부분을 기준으로 하는 것이 좋겠죠.
물론 점점 업그레이드 하면서 형태가 바뀔지도 모릅니다.

일단은 데이터 관리 부분을 먼저 진행할 계획입니다.
이어서 머신러닝 모델 개발 및 학습, 모델 관리의 순서로 진행할 것입니다.
그런데 모델 관리 부분은 조금 내용이 바뀔 수도 있을 것 같습니다.
AiDAOps는 Personal MLOps를 목표로 하기때문에 모델의 관리가 필요하기는 하지만 모델의 배포라든지... 그런 부분에 대한 관리는 기존의 MLOps에 비하여 중요도가 떨어진다고 해야하나.. 아무튼 비중이나 의미가 조금 달라질 수 있습니다.
그래서 모델 관리 부분은 제일 마지막 순서로 넣도록 하겠습니다.

 

그리고 가장 먼저 결정해야 할 것은 AiDAOps의 기반 시스템의 형태일 것입니다.
오픈소스 프로젝트 중에 개인이 사용할 수 있는 오픈소스 MLOps(?) 도구로 Orange라는 툴킷이 있습니다.
정확히는 MLOps는 아니지만 개인이 개인적으로 사용하는 경우에는 나름의 활용 정책을 결정해두고 사용한다면 MLOps처럼 사용할 수 있을 것으로 봅니다.
Orange 툴킷처럼 독자적인 애플리케이션으로 개발할 것인지... Server-Client 형태로 갈 것인지... Server-WEB 형태로 갈 것인지... 를 가지고 고민을 많이 했습니다.
Orange 툴킷은 파이썬을 기반으로 작동하기때문에 Windows, Linux, Mac 시스템을 모두 지원하고 있습니다.
그래서 사실상 어디에서든 활용할 수 있게 하겠다.. 라는 목적은 큰 차별성이 없어보입니다.

확장성을 위해서는 아무래도 WEB 형태로 가는 것이 좋을 것 같은데 그렇다고 꼭 그것만이 해답은 아닌 것이죠.
그러다가 문득 떠오른 것이 스마트폰에서도 작업을 해야 할 경우가 생길 수도 있지 않나... 라는 것입니다.
저는 파이썬 작업이나 딥러닝 작업을 할 때, 구글의 CoLab을 많이 사용하고 있는데...
예전에 노트북을 지참하지 않고 참석한 스터디 모임에서 실습을 할 때, 스마트폰을 이용해서 진행했던 기억이 났습니다.
실제로 밖에 나가 있는데 갑자기 작업을 해야하는 경우가 생긴다거나... 스마트폰 등에서 동작시켜서 확인할 필요가 생긴다거나... 하는 경우에는 독립된 애플리케이션으로 개발한다면 문제가 될 수 있을 것 같습니다.
그래서 WEB을 기반으로 해야겠다.. 라고 결정하게 되었습니다.
 

그러면 WEB 기반의 시스템을 구성해야 하는데 당연히 WEB 서버가 필요하겠죠.
WEB 서버는 무엇으로 개발해야 하나... 어떤 구조로 개발해야 하나... 등을 고민하게 됩니다.
WEB 서버로 많이 사용되는 것으로 Django, Flask, Tornado, Pyramid 등 다양한 웹 프레임워크들이 있는데 어떤 것을 선택하는 것이 좋을까... 하는 것도 고민거리입니다.
다른 웹서버도 많지만 20년 가까이 Java를 써 오다 파이썬으로 전향했으니 아예 파이썬으로 파고 들기로 했기때문에... 웹 프레임워크도 파이썬 계열로 진행합니다.
또한 데이터 분석이나 머신러닝 등을 수행하기에는 Java 계열보다 파이썬 계열이 쉽고 자료도 풍부하니까요.
 

그러다보니 예전에 썼던 글 중에서 FastAPI라는 것을 다루었던 기억이 납니다. ( FastAPI의 설치와 확인 )

MLOps를 구현하기 위해서는 REST API를 개발해야 할 필요도 있기때문에 마이크로 서비스의 형태로 갈 가능성이 큽니다.
그래서 마이크로 프레임워크로 구분되는 Flask로 가는 것이 좋지 않을까...라는 생각도 했지만 FastAPI도 마이크로 프레임워크라고 하는군요.
FastAPI는 Flask보다 뛰어난 성능을 가지고 있으며 ASGI(Asynchronous Server Gateway Interface, 비동기 서버 게이트웨이 인터페이스)를 사용하기 때문에 Flask가 가지고 있는 WSGI(Web Server Gateway Interface)의 한계를 뛰어넘었다고 합니다.
그래서 FastAPI로 가면 되겠다.. 라고 생각했는데 왠걸.. Sanic 이라는 프레임워크와 Dash라는 프레임워크가 있네요.
벤치마크를 보면 Sanic이 파이썬 기반의 웹 프레임워크 중에서 가장 빠르다고 합니다.
그리고 Dash는 분석 웹 응용 프로그램을 만들기 위한 프레임워크라고 하네요.
갑자기 Dash에 끌리기 시작했습니다.
특히 Dash는 웹 개발에 익숙하지 않은 데이터 과학자를 위한 웹 프레임워크를 목표로 한다고 하는데 Flask와 많은 부분이 호환된다고 합니다.
웹 개발을 20년 가까이 해왔지만 주로 Java 계열이 많았고... 파이썬을 이용한 웹 개발 경험은 거의 없기 때문에 Dash를 선택하는 것도 좋아 보이긴 합니다.

그 외에도 뭔가 찾으면 찾을 수록 줄줄이 새로운 것들이 나오니까 더 혼란스러워졌습니다.
그래서 그냥 간단하게 정하기로 했습니다.
일단 한 번에 하나씩 순차적으로만 일을 처리하는 WSGI 대신 ASGI를 선택하기로 했습니다.
Flask도 ASGI를 쓸 수 있다고 하지만 WSGI에 가장 적합하게 만들어졌다고 하니까 제외했습니다.
다음으로 실제 운영을 하거나 할 때 문서화가 많이 필요할텐데 자동 문서화 기능을 제공하는 프레임워크들이 있어서 그 중에서 선택하기로 했습니다.
그리고 국내에서 그래도 좀 사용되는 것들을 고르기로 했습니다.
자료 찾기가 너무 어려우면 그것도 좋지 않으니까요.
마지막으로 라이센스가 MIT, Apache 중 하나였으면 합니다.
GPL(General Public License) 계열의 라이센스는... 생각보다 제한이 많아서 저는 그다지 선호하지 않습니다.
가장 선호하는 라이센스는 MIT 라이센스입니다. (사실 Beer-ware 라이센스를 가장 선호하지만 좀처럼 볼 수 없기때문에..)
 

결국 돌고 돌아서 FastAPI로 돌아오게 되네요.
사실 Sanic도 조건을 모두 만족하고 있긴한데... 국내에서는 사용 예를 찾기가 어렵네요.
FastAPI는 오늘(2023.03.02)을 기준으로 0.92.0 버전이므로 아직 미완성의 프레임워크인 반면 Sanic은 최신 버전이 22.12 이므로 더 안정적이라고 볼 수 있습니다.(총 22번의 메이저 버전업이 있었던 것이 아니라 앞에 붙은 숫자는 연도입니다)
그러나 어째선지 국내에선 검색해도 잘 나오지 않네요.
그리고 공식 사이트에서 제공하는 기술 문서를 보면 Sanic보다는 FastAPI가 분량도 훨씬 많고 매우 상세하게 잘 제공되고 있기때문에 최종적으로 FastAPI를 사용하기로 했습니다.

 

 

마지막으로 정리하면...

  • WEB 기반의 시스템으로 개발
  • REST API를 개발하여 활용
  • FastAPI를 사용하여 비동기 방식을 지원하는 서버 개발
  • 일단 데이터 관리 기능부터 개발

정도라고 할 수 있겠습니다.

그럼 하나씩 차근차근 진행해 보겠습니다.

 

 

 

 

 

반응형