본문 바로가기

Data & AI

[JeTech Lab] 설계-2. AI 모델 배포/추론에 대한 고민

안녕하세요. 

 

지난 글/영상에서 JeTech Lab에 대해서 이야기할 때는

 

Web 서비스에 필요한 요소들에 대해서 소개를 드렸는데.

 

이번 시간에는 가장 핵심이 되는 AI 모델들에 대한 영역을 소개해 드릴 예정입니다. 

 

AI 기반의 기업들이 시장에서 주목받고 있는 와중에

 

AI라는 것들을 서비스화 하기 위해 기업들은 어떤 고민을 하고 있는지

 

그리고 저도 준비하면서 참고한 내용들을 함께 공유하려고 합니다. 

 

참고 

AI라는 신기술을 사업 아이템으로 쓰는 것은 멋진 일이기도 하지만

 

아직 체계가 갖춰지지 않은 것들도 많고

 

현재로선 어떤 방법들이 효율적인지 엔지니어들의 고민으로 만들어가고 있습니다. 

 

AI Infrastructure Aliance에서는 이런 고민들을 함께 해결하고

 

AI 서비스를 위한 표준, 특히 AI 서비스 제공을 위한 인프라 영역의 고민을 하는 단체입니다. 

 

NVIDIA, W&B 등의 기업들이 파트너사로 활동하고 있고

 

연간 발행물, 컨퍼런스들을 하는데 현업 여러 기업들이 시행착오를 겪고 고민한 내용들을 보고 이야기를 해볼까 합니다. 

 

 

 

Designing Machine Learning Systems 책도 참고했습니다. 

 

모델 배포와 배포 이후 Data Distribution Shifts 들을 다루는

 

책의 7, 8 장을 주로 참고했습니다. 

 

 

연구와 훈련

 

Training이 AI 서비스에서 핵심이라고 생각할 수 있는데

 

저는 아직 연구가 계속되고 있는 알고리즘들을 반영하는 것도 중요하다고 생각하고 있습니다. 

 

연구에 대한건 짜여진 프로세스 같은 것보다는 빠른 연구 내용들을 관심을 가지는 것이 최선이라고 생각합니다. 

 

저는 주로 SNS를 활용해서 최신 연구들에 귀 기울이고 있습니다. 

 

시장의 데이터가 시계열데이터이기도 하고, 강화학습을 주로 연구하는 연구실이나

 

해당 분야의 연구자들을 주로 팔로우하고 추천하는 아티클이나 주관적 견해들도 참고하곤 합니다. 

 

 

훈련의 인프라에 대한 부분은 후에도 이야기할 것이지만 

 

서드파티 서비스들을 주로 이용할 예정입니다. 

 

주로 유료로 GPU를 제공해 주는 SaaS 업체들을 이용할 예정이고 

 

연구 내용을 가볍게 실험하고 체계적인 학습 파이프라인으로 자리 잡기 전의 테스트베드로는

 

데이터의 조회나 관찰이 쉬운 노트북과 손쉽게 GPU를 제공하는 Colab을 활용할 것 같고. 

 

어느 정도 모델 설계나 검증이 끝난 이후는 AWS SageMaker를 이용할 것 같습니다. 

 

AI모델을 직접 만들어서 추론까지 진행하면

 

데이터를 학습시키는 거야 코드를 짜주면 기계가 해주지만

 

학습을 진행하기 전과 후 작업이 은근 손이 많이 가고 틀을 잡아야 하는데

 

데이터 파이프라인들과 확장성, 모델 버전관리 등을 고려하면 개인이 서비스를 하는데 SageMaker만 한 게 없지 않을까 생각이 듭니다. 

 

(제가 AWS 친화적인 개발을 주로 해서 그럴 수 있습니다)

 

 

연구나 훈련에 대해선 위 두 가지 도구를 사용한다는 것 외에는 큰 설계는 없습니다. 

 

연구에 대한 주된 주제는 시장을 바라보는 에이전트의 시각을 확장하는데 주를 이룰 것 같습니다. 

 

환경을 분석하고 행동하는 에이전트, 그 행동에 근거를 부여할 수 있도록

 

에이전트에게 "주관적인" 분석을 할 수 있는 감각기관들을 주로 만드는데 집중할 예정입니다. 

 

주관적인 에이전트들이 필요한 이유는

 

(시장을 바라보고 행동하는 메커니즘이 각기) 다양한 에이전트들을 통해

 

복잡성이 높은 시장을 적자생존 전략으로 공략하기 위해서입니다.

 

유전적 다양성이 예측불가능한 우주환경에서 생명체를 진화시킨 것처럼 말입니다. 

 

그러기 위해선

 

주어진 시장을 다양한 시각으로 관찰해야 합니다. 

 

조금 더 깊게, 에이전트를 학습시킬 때 Exploration에 대한 연구를 강화할 예정입니다. 

 

시장에서 이런 행동 저런 행동을 해보면서 우연히 터득한 시장분석과 행동이 장기적으로도 생존에 유리한지 검증하는 것도 의미 있겠죠

 

 

그다음 제가 관심 있는 부분은 Offlline Learning입니다. 

 

강화학습에서 많은 알고리즘들은 주로 Online Learning입니다. 

 

에이전트를 환경에 바로 노출시키고 그냥 행동하게 합니다. 

 

하지만 이런 연구가 불가능한 분야가 금융, 의료 등이 있습니다. 

 

검증되지 않은 연구를 돈을 날려가면서 하긴 쉽지 않고, 환자의 생명을 걸어두고 실험할 수 없기 때문입니다. 

 

그래서 Offline Learning에서는 주어진 데이터 샘플 내에서 데이터 분포를 학습하고

 

행동에 대한 가치함수를 산정할 때 점수를 보수적으로 주게 하거나. (Conservative Q-Learning)

 

Model-based approaches, Bootstrapping from the batch 들의 연구들에도 관심 있습니다.

 

 

 

 

모델 배포/추론

 

연구한 알고리즘, 깨끗한 데이터 전처리와 체계적인 학습을 통해 만들어진 모델들을

 

여러분들이 사용할 수 있도록 서비스와 연동되도록 해야 하고 

 

여러분들이 보는 시장에 대해 분석 결과를 창출해내야 합니다. 

 

이 과정을 배포와 추론이라고 부릅니다. 

 

AI 서비스를 주도적으로 만들고 있는 많은 회사들의

 

모델 배포작업에 대한 통계 자료를 가져왔습니다. 

 

 

 

위 통계는 AI 서비스를 하는 기업들이

 

1년에 몇 번이나 서비스에 모델을 내보내는지에 대한 내용입니다. 

 

이 통계는 AI 모델이 추론하는 도메인이 어떤지에 따라 다를 것 같습니다. 

 

모델이 보는 데이터들이 학습 전과 후, 데이터샘플들이 변이가 심하지 않은 이미지분류나 분석등이라면

 

획기적인 알고리즘이 나오지 않는 이상 굳이 모델을 재배포하지 않아도 될 것입니다. 

 

하지만 데이터 Shifting이 심한 영역의 도메인의 경우 100번 이상의 배포를 진행하는 기업들의 비율은 7% 정도 되었습니다. 

 

그래도 대부분의 기업들은 10번 내외로 배포를 진행하고 있었습니다. 

 

 

다음은 그 배포를 위해 어느 정도의 시간이 드는가에 대한 조사입니다. 

 

이 시간은 데이터를 수집하고, 정제하고 모델을 만들고 학습하는 과정까지 모두 포함된 시간입니다. 

 

대부분의 기업들은 30일 이내로 처리하고 있는데 2~3달, 혹은 1년 이상이 걸리는 기업까지 있다고 해서 좀 놀라웠습니다. 

 

이전 통계와 마찬가지로 스스로 서비스하는 도메인이 주기적인 업데이트가 필요한 영역인지 아닌지 판단해서

 

주기적인 배포에 대응할 수 있는 인프라를 갖추었는가 아닌가에 따라 위 통계 시간차이도 크게 날 것 같습니다. 

 

 

필요에 의해서 그런 인프라를 작업해두지 않았을 수 있는데

 

아무래도 AI를 하는 회사라는 이미지를 주어야 주가 방어가 가능했던 시기로 인해

 

일단 급하게 AI모델을 배포해 두고 형식만 갖춘 AI Company가 된 회사들이 

 

새로운 모델을 제공하기 위해 시간이 많이 들었던, 체계적으로 AI 서빙 인프라를 갖추지 않았기 때문이기도 할 것입니다. 

 

 

위 통계는 AI 모델을 서비스에 투입시키고

 

개선/운영을 위해 계획할 때 가장 힘든 점들을 물은 결과입니다. 

 

가장 많은 기업들이 모델을 상용 환경, 즉 실제 서비스에 투입시키는 데 걸리는 시간이 가장 예측 어려웠다고 합니다. 

 

그다음은 그런 일련의 일들을 수행할 수 있는 인력들이나 데이터들에 대한 이야기를 했습니다. 

 

이것을 보면, 초기 허들이 높을 수 있더라도

 

AI 모델들을 학습하고 배포할 때까지 자동화 툴을 제공하는 인프라를 갖추면 추후 마주할 수 있는 어려움들을 피할 수 있을 것 같습니다. 

 

 

이렇듯, 모델 배포는 AI 서비스에 중요 사안입니다. 

 

어떤 프레임워크를 쓰던 구애를 받지 않고

 

확장 가능한 도구를 선택하는 게 중요할 것 같습니다. 

 

KServe는 k8s 기반의 확장가능한 모델 서빙을 지원하는데

 

요즘 오픈소스로 주목받고 있습니다. 

 

 

 

첫 계층을 보면 데이터 전처리, 추론에 대한 부분은 물론 

 

다양한 프레임워크와 연동될 수 있음을 보여주고 있습니다. 

 

서버리스 컴퓨팅을 가능하게 하는 

 

KNative 서버리스 워크로드와 Istio 서비스메쉬를 제공하여 마이크로 서비스 간 네트워킹을 관리합니다. 

 

혹은 NVIDIA의 Triton을 사용해서도 효율적으로 GPU 최적화 추론을 할 수 있습니다. 

 

 

 

개선 포인트

 

JeTech Lab에서는 다양한 모델들이 필요하고 지속적인 업데이트도 중요합니다. 

 

또, 초기에는 배치 추론을 진행하다가도, 유료 서비스로 온라인 추론을 제공해야 한다면

 

모델의 빠른 추론, 이를 위한 모델 경량화, 하드웨어 강화도 필요합니다. 

 

 

모델 경량화 측면에선

 

Low-rank factorization을 이용해서 

 

파라미터가 너무 많은 conv filter를 compact block으로 대체하여

 

파라미터 수를 줄이고 속도를 높일 수 있습니다.

 

SqueezeNet은 3x3 conv -> 1x1 conv로 대체하는 등

 

다양한 전략을 사용하여 50배 더 적은 파라미터로 ImageNet에서 AlexNet 수준의 정확도를 달성합니다. 

 

 

이렇듯, 갖고 있는 모델들에 대해 경량화 작업을 통해 추론, 학습 시간을 아낄 수 있습니다. 

 

컨볼루션 필터 개선에 대한 방안은 컨볼루션 신경망에 국한되긴 하지만 

 

설계한 모델의 구조 최적화를 위해 참고할 논문들도 연구를 해봐야겠습니다. 

 

하드웨어

 

AWS가 편하긴 한데 네트워크 Latency가 모델의 성능지연보다 더 큰 이슈가 될 수도 있습니다. 

 

JeTech lab은 Batch Inference를 통해

 

어느 정도 실시간성은 포기하고 캐싱된 데이터를 제공하는 형식이 될 것 같습니다. 

 

(추후 유료버전에서 Online Inference 지원 등 가능)

 

 

모델의 구조도 중요하지만

 

정말 고도로 개선을 하려고 달려들면 하드웨어 레벨까지 고려할 것도 많습니다. 

 

CPU, GPU, TPU가 처리하는 데이터들을 보면

 

각각 스칼라, 벡터, 텐서에 대한 연산이 최적화되어 있습니다. 

 

우리가 학습 시 GPU를 가장 많이 이용하지만

 

때에 따라선 Tensor로 처리되는 연산이 더 유리하게 작용할 수 있습니다. 

 

코드 레벨에서 메모리 병목을 최소화하는 방식으로 개발을 하는 것도 중요합니다.

 

 

설계로 시작했으나 

 

하고 싶은 것들을 생각하다 보니 부족한 부분들이 아직 많을 것 같습니다. 

 

강화학습은 다른 AI 학습보다도 학습의 양이 많이 들 수 있습니다. 

그 시간을 절약하기 위해서 분산 학습에 대한 관심도 있고, 실제 개발 시 다뤄 볼 예정입니다.

 

 

 

사실 이런 이야기들이 여러분들에겐 그저 그렇구나, 혹은 어쩌란 거냐로 들릴 수 있습니다. 

저도 말만 하지 말고 당장 눈에 보이는 프로덕트를 하나라도 만들고 개선해 나가면서 추진해야겠단 생각이 들고 있습니다. 

 

아직 갈길이 멀지만 재미있을 것 같고

 

과정 중 유익한 내용은 글과 영상으로 잘 남겨두도록 하겠습니다. 

 

감사합니다.