Post-IT
ML 엔지니어링 용어 정리 본문
AI 서빙(Model Serving)
모델 서빙에는 크게 두가지 방식이 존재한다.
- Real-time Inference : 사용자 요청이 들어올 때마다 즉시 예측을 반환한다. REST API 형태로 만들어서
POST /predict에 데이터를 보내고 결과를 받습니다. 챗봇이나 이미지 분류 같은 실시간 서비스에 사용합니다. 실시간으로 이루어지기 때문에 레이턴시가 중요합니다. - Batch Inferecne : 많은 양의 데이터를 한꺼번에 처리합니다. 예를 들어, 특정 시간마다 전체 사용자의 추천 목록을 미리 계산해둡니다. 결과를 DB에 저장하고 사용하는 방식이고, 처리량이 중요합니다.
서빙 시스템을 만들 때 고려할 점:
- 모델 버전 관리 : A 또는 B 테스트를 위해 여러 버전을 동시에 서빙하거나, 새 버전으로 점진적으로 교체합니다.
- 오토스케일링 : 요청이 많아지면 서버를 자동으로 늘리고, 적어지면 줄입니다.
- 캐싱 : 같은 입력에 대한 결과를 저장해두면 빠르게 응답이 가능합니다.
- 모니터링 : 응답 시간, 에러율, 모델 성능 지표를 실시간으로 추적합니다.
RAG(Retrieval-Augmented Generatoin)
RAG의 핵심은 "LLM의 환각(hallucination)을 줄이고, 최신 정보나 특정 도메인 지식을 활용하자"입니다.
동작 과정:
- 문서 준비 : 문서들을 작은 청크로 나눈다(500-1000 토큰). 각 청크를 임베딩 모델로 벡텨변환 후 벡터 DB에 저장합니다.
- 검색 단계 : 사용자 질문도 같은 임베딩 모델로 벡터로 만듭니다. 벡터 DB에서 코사인 유사도가 높은 상위 k개 문서를 가져옵니다.
- 생성 단계 : 검색한 문서들을 프롬프트에 포함시킵니다. "다음 문서를 참고해서 답변해줘 : 문서들"의 형태로 LLM에게 보내면 LLM이 해당 문서를 기반으로 답변을 생성합니다.
고급 기법들 :
- Hybrid Search : 키워드 검색(BM25)과 벡터 검색을 결합해서 더 정확하게 찾아냅니다.
- Reranking : 검색된 문서들을 다시 정렬해서 가장 관련성 높은 것만 LLM에게 전달합니다.
- Query Transformation : 사용자 질문을 여러개로 확장하거나 다시 작성해서 검색 품질을 높입니다.
- HyDE(Hypothetical Document Embeddings) : LLM에게 가상의 답변을 먼저 생성하게 하고, 그 답변을 활용해서 검색합니다.
Agent
에이전트는 "생각", "행동", "관찰"의 사이클을 반복하는 AI 시스템입니다. ReAct패턴이 가장 기본적인 패턴입니다. 에이전트의 패턴도 디자인 패턴이 존재한다고 합니다.
Tools : 툴은 에이전트가 사용할 수 있는 기능들을 말합니다.
- 검색 도구 : Google Search, Wikipedia API
- 계산 도구 : Python REPL, Calculator
- 데이터 접근 : SQL DB, API 호출
- 액션 : 이메일 전송, 파일 생성
메모리 시스템:
- 단기 메모리 : 현재 대화 맥락을 유지
- 장기 메모리 : 과거 대화나 학습한 정보를 벡터 DB에 저장했다가 필요할 때 불러옵니다.
Workflow
워크플로우는 에이전트보다 결정론적입니다. 각 단계가 명확히 존재합니다.
- 조건부 실행 : 특정 조건에 따라 다른 경로를 선택할 수 있습니다.(영어 문서 -> 영어 모델 / 한국어 문서 -> 한국어 모델)
- 병렬 처리 : 여러 단계를 동시에 실행 할 수 있습니다.
- 에러 핸들링 : 특정 단계 실패시 재시도, 실패 시 대체 방법 사용
Airflow나 Perfect같은 도구로 워크플로우를 정의하고 실행합니다. DAG(Directed Acyclic Graph) 형태로 작업 간 의존성을 표현합니다.
LangChain
랭체인은 LLM 애플리케이션 개발의 "레고 블럭"입니다. 자주 사용되는 패턴들을 모듈화 해두어서 조립만 하면 됩니다. 핵심 컴포넌트들만 소개하겠습니다.
- Models : 다양한 LLM을 통일된 인터페이스로 사용
- Prompts : 프롬프트 템플릿을 재사용 가능하게 만듭니다.
- Chains : 여러 단계를 연결합니다.
- Memory : 대화 기록을 관리합니다.
- Agents : 도구를 사용하는 에이전트를 쉽게 만듭니다.
- Vector Stores : 벡터 DB 연동을 추상화합니다.
Vector DB
벡터 DB는 고차원 벡터를 효율적으로 저장하고 검색하는 DB입니다. 일반 DB에서는 id가 111인 데이터를 찾는다면 벡터 DB는 "V와 가장 가까운 k개의 벡터 찾기"와 같이 유사도를 검색하는 개념입니다.
검색 알고리즘:
- Brute Force : 모든 벡터와의 거리 계산. 정확하지만 느리다.
- HNSW : 그래프 기반으로 빠르게 근사 검색
- IVF : 벡터를 클러스터로 나눠서 검색 공간을 줄입니다.
- LSH : 해시 함수로 유사한 벡터를 같은 버킷에 넣습니다.
실제 벡터 DB들:
- Pinecone : 관리형으로 사용하기 쉬우나 유료입니다.
- Chroma : 오픈소스이고 로컬에서 실행이 가능합니다.
- Faiss : Meta에서 만든 라이브러리로 매우 빠르지만 직접 관리가 필요합니다.
추가로 벡터 DB는 메타 데이터 필터링도 지원한다고 합니다. "2025년도 문서에서 유사한 것 찾기"와 같은 쿼리가 가능하죠.
프롬프트 엔지니어링
LLM을 효과적으로 사용하는 기술입니다.
- Zero-shot : 예시 없이 바로 요청
- Few-shot : 몇 개 예시를 보여주고 출력을 요청
- CoT(Chain of Thought) : 단계별 사고 과정을 보이게 합니다.
- Self-Consistency : 같은 질문을 여러번 해서 가장 많이 나온 답을 선택합니다.
- Tree of Thoughts : 여러 사고 경로를 탐색하고 평가해서 최선의 경로를 선택합니다.
기타 고급 기법:
- Role Prompting : "너는 수학 천재야"처럼 역할을 부여합니다.
- System Message : 전체 대화의 맥락을 설정합니다.
- Negative Prompting : "
해줘"가 "하지마"보다 효과적입니다. - Output Format : JSON, 표, 코드블럭등 형식을 지정해줍니다.
사실 우리가 의도하진 않았지만 사용하던 방법들과 유사합니다.
LLM 추론 최적화
대형 언어 모델은 파라미터가 수십억개이기 때문에 추론이 느립니다. 따라서 최적화 기법들이 존재하죠. 내용이 많아서 내일 해당 주제로 글을 쓰려고합니다.
- vLLM
- 양자화
- KV Cache 최적화
- Speculative Decoding
- Flash Attention
모델 모니터링
배포 후에도 모델을 계속해서 관찰하고 관리해줘야 합니다.
- 성능 모니터링 : 레이턴시, 처리량, 에러율을 체크합니다.
- 모델 품질 모니터링 : 정확도의 변화, 신뢰도, 예측분포를 예측합니다.
- 데이터 드리프트 : 입력 데이터 분포가 학습 데이터와 달라지면서 입력-출력 관계가 변하면 재학습하거나 롤백합니다.
MLOps 도구들
실험관리:
- MLflow : 실험 파라미터, 메트릭, 모델을 자동으로 로깅합니다.
- Weights & Biases : 실시간으로 학습 그래프를 보여주고, 하이퍼파라미터 스윕 기능도 있습니다.
파이프라인 관리:
- Airflow : 워크플로우를 DAG로 정의하고 스케줄링합니다.
- Kuberflow : 쿠버네티스 기반 ML 파이프라인
- Perfect : Airflow보다 파이썬스러운 API
모델 레지스트리:
- 학습된 모델을 버전별로 관리하고, 스테이징/프로덕션 단계를 구분합니다.
- MLflow Model Registry
CI/CD:
- Github Actions : 코드 푸시시 자동으로 테스트하고 배포합니다.
'인공지능' 카테고리의 다른 글
| Top-N Error (0) | 2025.10.28 |
|---|---|
| 전이 학습, Transfer Learning (0) | 2025.10.27 |
| 사전 학습 모델, Pre-trained Model (0) | 2025.10.27 |