콘텐츠로 이동

M3: 고도화 및 최적화

항목 내용
기간 2026-04-28 -- 2026-05-22 (Week 9--12)
상태 부분 완료 (46%)
핵심 목표 AWQ 양자화 v2, vLLM 서빙, RAG 파이프라인, 에이전트 시스템

개요

M3 단계에서는 M2 MVP에서 미달했던 핵심 KPI를 대폭 개선했다. vLLM 0.17.0 도입으로 추론 속도를 9.29초에서 2.43초로 단축하고, 분류 정확도를 2%에서 90%로 끌어올렸다. 또한 FAISS 기반 RAG 파이프라인과 멀티턴 에이전트 시스템 아키텍처를 설계하여 시스템의 기능을 확장하고 있다.


M2 대비 KPI 개선 현황

지표 M2 MVP M3 최적화 후 개선폭 목표 달성
분류 정확도 2.00% 90.0% +88.0%p >= 85% 달성
추론 속도 (Avg) 9.291s 2.43s -6.86s < 2s 근접
BERTScore F1 -- 46.05 신규 확보 베이스라인 달성
GPU VRAM 4.95GB 4.17GB -0.78GB < 8GB 달성

AWQ v2 + vLLM KPI 평가 (1,265건)

M3에서 AWQ v2 모델(umyunsang/GovOn-EXAONE-AWQ-v2)을 vLLM으로 서빙한 종합 평가 결과이다. 8개 민원 카테고리, 1,265건의 테스트 데이터셋을 대상으로 평가했다.

레이턴시 성능

항목 측정값 목표 판정
답변 생성 p50 1.56s -- --
답변 생성 p95 2.85s < 3.0s PASS
검색 p50 23.08ms -- --
검색 p95 39.76ms < 1,000ms PASS
Throughput 178.4 tok/s -- --

답변 품질

항목 측정값 목표 판정
BERTScore F1 71.04 >= 55 PASS
SacreBLEU 7.74 >= 30 미달
ROUGE-L F1 18.76 >= 40 미달
EOS 정상 종료율 88.6% >= 80% PASS

리소스 사용

항목 측정값 목표 비고
VRAM 사용량 29.41GB <= 5.0GB KV 캐시 + vLLM 런타임 오버헤드 포함, A100 40GB 기준

VRAM 목표 미달 설명

VRAM 5GB 목표는 모델 가중치만의 크기 기준이다. vLLM 런타임에서 KV 캐시, CUDA Graph, 토크나이저 등 추가 메모리를 사용하므로 실제 서빙 시 A100 40GB급 이상이 필요하다.

vLLM 엔진 설정

파라미터 설명
max_model_len 2,048 최대 시퀀스 길이
gpu_memory_utilization 0.60 GPU 메모리 활용률
enforce_eager False CUDA Graph 활성화
repetition_penalty 1.1 반복 억제
양자화 커널 awq_marlin Ampere+ 최적화 GEMM

W&B 리포트: m3-exaone-vllm-final-success


에이전트 시스템 아키텍처

M3에서 설계한 멀티턴 대화형 Agent 시스템은 공무원이 AI와 자연어로 대화하며 민원 분류, 유사 사례 검색, 답변 초안 생성을 처리하는 구조이다.

Agent Loop 동작 흐름

User Input --> Session Load --> RAG Search
                                    |
                                    v
Response  <-- LLM Generate <-- Prompt Build
    |
    v
Save to DB --> Wait for next input

Agent의 핵심 역할

역할 설명
민원 분류 민원 본문을 입력받아 카테고리를 자동 분류
유사 사례 검색 FAISS 벡터 검색으로 유사 민원 Top-K건 검색
답변 초안 생성 RAG 컨텍스트 기반 표준 답변 초안 생성
대화형 수정 멀티턴 대화를 통한 답변 수정 및 정제
감사 로그 모든 대화 이력을 DB에 저장 (추적성 확보)

기존 API 대비 Agent 확장

구성요소 기존 (단일 턴) Agent 확장
API 서버 FastAPI + vLLM 멀티턴 대화 루프 + WebSocket
프롬프트 정적 EXAONE Chat Template 동적 멀티턴 프롬프트 빌더
세션 관리 없음 (Stateless) DB 기반 세션 + 대화 이력
RAG FAISS 검색 (단일 쿼리) 대화 문맥 기반 동적 검색
Frontend 없음 (API 전용) 에이전트 사이드바 UI

RAG 파이프라인

설계 구조

FAISS IndexFlatIP 기반의 벡터 검색과 BM25를 결합한 하이브리드 검색을 구현한다.

구성요소 기술 역할
임베딩 모델 multilingual-e5-large (dim=1024) 민원 텍스트 벡터화
벡터 인덱스 FAISS IndexFlatIP 의미 기반 유사도 검색
인덱스 관리 MultiIndexManager CASE/LAW/MANUAL/NOTICE 4종 인덱스 관리
하이브리드 검색 FAISS + BM25 의미 검색 + 키워드 검색 결합

검색 쿼리 형식

임베딩 모델 사용 시 query: prefix가 필수이다.

query_text = "query: 보도블록 파손으로 인한 안전 문제 민원"

기술적 이슈 및 해결

1. vLLM 토크나이저 충돌

증상: ExaoneTokenizer 클래스 인식 오류

해결: PreTrainedTokenizerFast 강제 매핑 및 로컬 설정 패치

2. 구조적 NoneType 에러

증상: transformers 버전 업데이트로 rope_parametersget_interface 누락

해결: 로컬 소스 하드 패치 및 런타임 인젝션 (vllm_stabilizer.py)

3. 분류 정확도 90% 달성

방법: <thought> 태그 완벽 분리 파서 + add_generation_prompt=True 적용으로 모델의 추론 능력을 극대화


산출물 체크리스트

산출물 상태
vLLM 0.17.0 서버 구축 및 검증 완료
vllm_stabilizer.py (EXAONE용 런타임 패치) 완료
M3 최종 평가 스크립트 (evaluate_m3_vllm_final.py) 완료
M3 완료 리포트 (FINAL_M3_COMPLETION_REPORT.md) 완료
W&B KPI 평가 보고서 완료
Agent 아키텍처 ADR 완료
FAISS 벡터 검색 시스템 구현 중
RAG 파이프라인 구현 중
FastAPI 백엔드 서버 구현 중
Docker 컨테이너화 예정
Figma MCP 기반 프론트엔드 예정

관련 GitHub 이력

PR / Issue 내용
PR #24 M2 MVP Final Report & M3 Optimization Complete
Issue #20 추론 속도 개선: vLLM 배포로 p50 < 2초 달성
Issue #21 민원 분류 정확도 평가 방법론 개선
Issue #27 RAG 통합, FAISS 벡터 검색 및 전용 분류기 구축
Issue #67 QLoRA 하이퍼파라미터 최적화
Issue #68 답변 생성 품질 고도화
Issue #69 추론 속도 추가 최적화
Issue #128 Agent 시스템 아키텍처 설계

고도화 의존성 흐름

#70 데이터 증강 ---+
                   +--> #67 QLoRA HP 최적화 --> #68 답변 품질 고도화
                   |                                |
#54 RAG 파이프라인 -+--------------------------------+
                                                    |
#69 추론 속도 최적화 <------------------------------+