프로젝트 요약
연구환경 개선, 인프라효율성 개선, 상품개발환경 조성을 위한 MLOps 도입
•
제목: 오픈소스 기반 온프레미스 MLOps 도입
•
기간: 2024년 01월 - 2024년 06월 (6개월)
•
역할: 리드 MLOps 담당 ~ 기획 + VoC + ML Workloads/Infra + PoC + 운영 [기여도 90%]
◦
Kubeflow
▪
Argo Workflows와 통합; AutoML, 분산학습, 모델 레지스트리 지원, 최대 16 GPU 가속
◦
JupyterHub
▪
IDE와 통합된 원격 개발 환경 구현; 원격 GPU 노트북 지원, 최대 4 GPU 가속
◦
VectorDB
▪
Milvus, ChromaDB 등 고가용 벡터 데이터베이스 구현, RAG+LLM 챗봇 개발
◦
ML Infra
▪
CI/CD, NAS, 데이터 레이크, 이미지 레지스트리, 모니터링 등 ML 워크로드를 지원할 인프라 구현
•
성과: 연구환경 개선, 리소스 통합 관리 ~ 리소스를 병합하여 가용성과 용량을 늘리고, 관리 자동화로 효율성은 유지
◦
연구환경 개선
▪
연구원들이 개별 관리하던 분산 서버들을 쿠버네티스로 통합하여 인프라 용량 및 안정성 확보. PoC를 통해 구성원의 MLOps 도입 의사결정 성공
◦
AI 플랫폼
▪
Kubeflow, JupyterHub 등 연구원 2명의 VoC에서 10명으로 점차 사용자 및 규모 확대. 지속적 MLOps 고도화로 연구환경 개선 및 기술부채 해소
◦
GPU 활용성 개선
▪
GPU 사용률 3배 증가 및 800건 이상의 AutoML 실험 수행 결과로 상품화 기여
•
대표 사용 기술
◦
Kubeflow
◦
Katib
◦
Training Operator
◦
Model Registry
◦
JupyterHub
◦
Argo Workflows
◦
Milvus
◦
ChromaDB
◦
Ollama
◦
Open WebUI
◦
Grafana Stack (PLG, Prometheus + Loki + Grafana)
◦
TensorBoard
아키텍처
1. ML 파이프라인
ML 모듈을 동작시키기 위한 파이프라인입니다. 쿠버네티스 네이티브 워크플로우 엔진인 ‘Argo Workflows’를 주로 사용했습니다. YAML 및 Python으로 파이프라인을 개발하였고, 정적/동적 파이프라인을 모두 지원하였습니다.
ML Pipeline을 위한 아키텍처는 다음과 같습니다:
•
동일 기능 파이프라인으로 온프레미스와 퍼블릭에서 모두 동작할 수 있게 스토리지 및 이미지 레지스트리를 설정하였습니다.
주로 고효율의 온프레미스에서 파이프라인을 동작시켰습니다., 산출물은 온프레미스(백오피스 및 분석)와 퍼블릭(서빙)에 모두 저장하였습니다. 온프레미스를 사용할 수 없을 때 퍼블릭을 사용하는 하이브리드 구조를 가집니다.
•
각 클라우드를 모니터링하고 API 게이트웨이로 파이프라인 요청을 스케줄링하였습니다.
•
파이프라인은 GitOps를 통해 원격 저장소에서 관리하고 API로 호출하여 사용합니다. 개발환경에서는 연구원이 Argo Workflows 서버에 직접 실행하여 파이프라인을 가동할 수 있습니다.
2. AI 플랫폼 JupyterHub
AI 개발을 위한 Jupyter Notebook을 공급하는 JupyterHub으로 AI 플랫폼을 구성하였습니다. Jupyter는 원격 GPU 서버를 연구자에게 공급할 수 있습니다. 웹, IDE 통합을 모두 지원하기 때문에 연구원의 PC 자원과 독립적인 연구 환경을 구성할 수 있습니다.
JupyterHub는 쿠버네티스에 배포하였고, 연구원들이 개별 관리하던 서버를 클러스터에 통합하였습니다. 이를 통해 유휴 자원을 최소화 하고, GPU 분산가속을 이용해 단일 서버보다 높은 성능의 실험을 수행할 수 있게 되었습니다. AI 플랫폼은 다음과 같은 전제로 개발되었습니다.
•
모든 연구원이 항상 실험을 하지 않음
•
모든 연구원이 항상 모든 자원을 사용하지 않음
•
연구원은 아주 많은 연산이 필요할 경우가 있음
•
연구원들이 데이터 I/O 및 분석을 위해 단순 작업을 반복하는 경우가 많음
JupyterHub를 위한 아키텍처는 다음과 같습니다:
•
JupyterHub에 로그인 합니다.
•
연구원이 원하는 사양이 노트북을 선택합니다.
◦
CPU, RAM, GPU, 베이스 노트북 이미지를 선택할 수 있습니다.
◦
원하는 사양이 없을 경우 챗봇 + CustomSpawner를 이용하여 동적으로 생성할 수 있습니다.
•
클러스터에 할당된 GPU 수를 모니터링하여 자원을 효율적으로 관리합니다.
3. AI 플랫폼 Kubeflow
Kubeflow는 ML/AI 연구 및 개발을 위한 통합 솔루션입니다. 연구원이 GPU 클러스터를 직접 구성할 필요없이, 쿠버네티스에 속한 GPU 노드들을 간접적으로 호출하여 가속할 수 있는 기능을 제공합니다.
다음과 같은 구성요소가 있습니다.
•
Pipeline: Argo Workflows를 엔진으로 정적/동적 파이프라인을 생성할 수 있습니다. 단일학습, 분산학습 등 모든 시나리오를 수행할 수 있습니다.
•
AutoML Katib: 하이퍼파라미터를 찾기 위한 스케줄러입니다. 같은 실험을 여러 번 반복하여 분석할 수 있습니다.
•
Training Operator: 단일 실험을 위해 분산학습을 수행하는 스케줄러입니다. 비동기 모델 학습 및 전파를 지원하는 환경에서 높은 성능으로 학습을 진행할 수 있습니다.
•
Model Registry: Kubeflow에 통합된 모델 이미지 레지스트리입니다. 클러스터 외부의 레지스트리도 사용할 수 있습니다.
이 AI 플랫폼 역시 JupyterHub와 같은 전제로 개발되었습니다.
•
모든 연구원이 항상 실험을 하지 않음
•
모든 연구원이 항상 모든 자원을 사용하지 않음
•
연구원은 아주 많은 연산이 필요할 경우가 있음
•
연구원들이 데이터 I/O 및 분석을 위해 단순 작업을 반복하는 경우가 많음
Kubeflow를 위한 아키텍처는 다음과 같습니다:
•
Kubeflow의 워크플로우 엔진은 쿠버네티스 잡 대신 Argo Workflows를 사용합니다.
◦
이를 지원하는 모듈은 Pipeline, Katib AutoML, Training Operator가 있습니다.
◦
이미 Argo Workflwos를 사내 워크플로우 엔진으로 사용하고 있기 때문에, 이 선택이 연구/개발 주기를 당길 수 있어 유용합니다.
•
연구원이 원하는 사양이 파이프라인을 설정합니다.
◦
CPU, RAM, GPU, 베이스 노트북 이미지를 선택할 수 있습니다.
◦
원하는 사양이 없을 경우 챗봇과 GitOps를 통해 사양을 수정할 수 있습니다.
•
실험결과는 각 파이프라인 실험 끝에 NAS에 저장하는 로직을 넣도록 가이드라인을 구성하였습니다. 실험이 끝난 후 실험 데이터를 그대로 TensorBoard 혹은 Wandb로 불러와 분석할 수 있습니다.
4. LLM+RAG 챗봇
사내 문서를 임베딩하여 학습한 벡터 데이터베이스를 이용한 챗봇을 프로토타이핑 개발하였습니다.
•
아키텍처: TBA
•
모델 선택
◦
파인 튜닝 된 오픈소스 LLM 모듈 → 이미지 레지스트리에 저장
◦
OpenAI API (LLM 성능 비교를 위해서)
•
모델 서빙
◦
Ollama (개발용)
◦
Kubeflow KServe (프로덕션, 고가용성)
•
UI/UX
◦
Open WebUI
◦
Python FastUI